我是否需要将所有权限授予PostgreSQL 9.3数据库中的表的所有者?
问题描述:
综观pgAdmin的一些表格,我可以看到表定义与下面的语句我是否需要将所有权限授予PostgreSQL 9.3数据库中的表的所有者?
ALTER TABLE table_name
OWNER TO user_name;
GRANT ALL ON TABLE table_name TO user_name;
在同一数据库中的其他表省略了第二个GRANT ALL
声明,我怀疑它是多余的,因为user_name
已经是OWNER
的table_name
。
因此,在这种情况下,GRANT ALL
是多余的,如果是的话,我可以删除它的定义(从table_name
> Properties> Privileges标签)?
由于
答
大概不会见下文。
默认情况下,所有者对表拥有完整的权利,并且注意他们也可以在他们自己的表上授予权限。这与公共权利无关。请参阅:
chris=> create table footest(id int);
CREATE TABLE
chris=> revoke all on footest from public;
REVOKE
chris=> insert into footest values (1);
INSERT 0 1
chris=> revoke all on footest from chris;
REVOKE
chris=> insert into footest values (1);
ERROR: permission denied for relation footest
chris=> grant all on footest to chris;
GRANT
chris=>
所以,除非你已经撤销的权限,你不需要向他们发放。
答
1)“的对象可以被分配到一个新的所有者与适当的种类的对象的ALTER命令,例如ALTER TABLE 超级用户可以总是这样做; 普通角色只能做它,如果它们都是对象的当前所有者(或所属角色的成员)和新的所有的成员角色“。
2)“写入所有代替特定特权授予与对象类型相关的所有特权。”
所以简而言之,它取决于上面提到的用户类型。
可以GRANT具体特权 EG 使用子集GRANT的选择等。格兰特的更多信息可以在第二链路PostgreSQL的GRANT找到 - 定义访问权限
所有最优秀的