什么是PostgreSQL的表所有者?

75

我不确定 PostgreSQL 表所有者的含义。我注意到它会更改表本身的属性,而不是所有者的属性,因为它是通过一个指定的


ALTER TABLE table_name OWNER TO role_name;
3个回答

97

您可以查看特定表中的所有者:

select * from pg_tables where tablename = 'my_tbl';

或者您可以查看特定所有者的所有表:

select * from pg_tables where tableowner = 'username';

48
未回答问题。 - OrangePot
19
还是很有帮助的。 - Karuhanga

57

如果没有其他情况发生,所有者是创建表的用户(角色)。因此,如果用户 arthur 运行 CREATE TABLE foo(id INTEGER),则 arthur 拥有该表。

表的所有者拥有其上的所有特权——包括删除它的特权。或者授予其他用户(角色)访问该表的特权。

pg_dump生成的SQL脚本通常包括 ALTER TABLE ... OWNER TO ... 语句,因为这些脚本旨在由数据库管理员运行,在这种情况下,所有表都将由数据库管理员拥有,这意味着“真正”的所有者无法更改或访问表。


非常感谢!只有一个问题:在之前的例子中,用户“arthur”可以授予其他角色对表“foo”的权限吗? - Jonathan Ginsburg
@JonathanGinsburg:当然可以。所有者可以做几乎任何事情。 - user330315
业主是否有其他用户没有的特殊权限?是否可以通过授予另一个用户特权来复制所有权? - Jwan622

5

以下是官方文档的部分摘录:

对象创建时会被分配一个所有者,通常情况下,所有者是执行创建语句的角色。对于大多数对象,初始状态是只有所有者(或超级用户)能够对其进行任何操作。要允许其他角色使用该对象,则必须授予权限。

修改或删除对象的权利属于对象所有者固有的权利,不能单独授予或撤销。(但是,和所有权限一样,这个权利可以被所有者角色的成员继承;详见第21.3节。)

通常只有对象的所有者(或超级用户)才能在对象上授予或撤销权限。

对象的所有者可以选择撤销自己的普通权限,例如使表对自己和其他人只读。但是,所有者始终被视为拥有所有授予选项,因此他们可以随时重新授予自己的权限。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接