我不确定 PostgreSQL
表所有者的含义。我注意到它会更改表本身的属性,而不是所有者的属性,因为它是通过一个指定的
ALTER TABLE table_name OWNER TO role_name;
我不确定 PostgreSQL
表所有者的含义。我注意到它会更改表本身的属性,而不是所有者的属性,因为它是通过一个指定的
ALTER TABLE table_name OWNER TO role_name;
您可以查看特定表中的所有者:
select * from pg_tables where tablename = 'my_tbl';
或者您可以查看特定所有者的所有表:
select * from pg_tables where tableowner = 'username';
如果没有其他情况发生,所有者是创建表的用户(角色)。因此,如果用户 arthur
运行 CREATE TABLE foo(id INTEGER)
,则 arthur
拥有该表。
表的所有者拥有其上的所有特权——包括删除它的特权。或者授予其他用户(角色)访问该表的特权。
pg_dump
生成的SQL脚本通常包括 ALTER TABLE ... OWNER TO ...
语句,因为这些脚本旨在由数据库管理员运行,在这种情况下,所有表都将由数据库管理员拥有,这意味着“真正”的所有者无法更改或访问表。
以下是官方文档的部分摘录:
对象创建时会被分配一个所有者,通常情况下,所有者是执行创建语句的角色。对于大多数对象,初始状态是只有所有者(或超级用户)能够对其进行任何操作。要允许其他角色使用该对象,则必须授予权限。
修改或删除对象的权利属于对象所有者固有的权利,不能单独授予或撤销。(但是,和所有权限一样,这个权利可以被所有者角色的成员继承;详见第21.3节。)
通常只有对象的所有者(或超级用户)才能在对象上授予或撤销权限。
对象的所有者可以选择撤销自己的普通权限,例如使表对自己和其他人只读。但是,所有者始终被视为拥有所有授予选项,因此他们可以随时重新授予自己的权限。