我不确定PostgreSQL表所有者是什么意思。我注意到它更改了表本身的一个属性,而不是所有者的属性,因为它是通过
PostgreSQL
ALTER TABLE table_name OWNER TO role_name;
b1zrtrql1#
您可以在某个表中查看谁是所有者:
select * from pg_tables where tablename = 'my_tbl';
或者您可以按特定所有者查看所有表:
select * from pg_tables where tableowner = 'username';
piv4azn72#
所有者是(如果没有发生其他事情)* 创建 * 表的用户(角色)。因此,如果用户arthur运行CREATE TABLE foo (id INTEGER),则arthur * 拥有 * 表。表的所有者拥有对表的所有权限,包括删除表的权限,或授予 * 其他 * 用户(角色)访问表的权限。由pg_dump生成的SQL脚本通常包括ALTER TABLE ... OWNER TO ...语句,因为这些脚本是由DBA运行的,在这种情况下,所有表都归DBA所有-这意味着“真实的的”所有者不能更改或访问这些表。
arthur
CREATE TABLE foo (id INTEGER)
pg_dump
ALTER TABLE ... OWNER TO ...
vwoqyblh3#
official docs的一些摘录:建立对象时,会指派一个拥有者。拥有者通常是执行建立叙述句的角色。对于大多数种类的对象,初始状态是只有拥有者(或超级使用者)可以对对象执行任何动作。若要允许其他角色使用对象,必须授与权限。修改或销毁对象的权限是作为对象所有者所固有的,并且不能被授予或撤销。(但是,像所有特权一样,该权限可以由拥有角色的成员继承;见第21.3节。)通常,只有对象的所有者(或超级用户)可以授予或撤消对对象的权限。对象的所有者可以选择撤消自己的普通权限,例如,使表对自己和其他人都是只读的。但所有者始终被视为拥有所有授予选项,因此他们始终可以重新授予自己的权限。
3条答案
按热度按时间b1zrtrql1#
您可以在某个表中查看谁是所有者:
或者您可以按特定所有者查看所有表:
piv4azn72#
所有者是(如果没有发生其他事情)* 创建 * 表的用户(角色)。因此,如果用户
arthur
运行CREATE TABLE foo (id INTEGER)
,则arthur
* 拥有 * 表。表的所有者拥有对表的所有权限,包括删除表的权限,或授予 * 其他 * 用户(角色)访问表的权限。
由
pg_dump
生成的SQL脚本通常包括ALTER TABLE ... OWNER TO ...
语句,因为这些脚本是由DBA运行的,在这种情况下,所有表都归DBA所有-这意味着“真实的的”所有者不能更改或访问这些表。vwoqyblh3#
official docs的一些摘录:
建立对象时,会指派一个拥有者。拥有者通常是执行建立叙述句的角色。对于大多数种类的对象,初始状态是只有拥有者(或超级使用者)可以对对象执行任何动作。若要允许其他角色使用对象,必须授与权限。
修改或销毁对象的权限是作为对象所有者所固有的,并且不能被授予或撤销。(但是,像所有特权一样,该权限可以由拥有角色的成员继承;见第21.3节。)
通常,只有对象的所有者(或超级用户)可以授予或撤消对对象的权限。
对象的所有者可以选择撤消自己的普通权限,例如,使表对自己和其他人都是只读的。但所有者始终被视为拥有所有授予选项,因此他们始终可以重新授予自己的权限。