使用PostgreSQL 9.0,我有一个名为"staff"的组角色,并希望在特定模式的表上向该角色授予所有(或某些)权限.以下工作都没有

GRANT ALL ON SCHEMA foo TO staff;
GRANT ALL ON DATABASE mydb TO staff;

"staff"的成员仍然无法 Select 或更新模式"foo"中的各个表,或(在第二个命令的情况下)数据库中的任何表,我授予该特定表的所有权限.

我能做些什么让我和我的用户的生活更轻松?

Update:a similar question on serverfault.com的帮助下找到了答案.

GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA foo TO staff;

推荐答案

您找到了为给定模式中的所有existing个表设置权限的简写方法.The manual clarifies:

(但请注意,ALL TABLES被认为包括viewsforeign tables).

我的.101列以nextval()列作为默认列,quoting the manual列:

对于序列,此权限允许使用currvalnextval函数.

因此,如果有serial列,您还需要在sequences上授予101(或ALL PRIVILEGES)

GRANT USAGE ON ALL SEQUENCES IN SCHEMA foo TO mygrp;

注意:identity columns在Postgres 10或更高版本中使用不需要额外特权的隐式序列.(考虑升级serial列).

What about new objects?

你也会对DEFAULT PRIVILEGES for users or schemas感兴趣:

ALTER DEFAULT PRIVILEGES IN SCHEMA foo GRANT ALL PRIVILEGES ON TABLES TO staff;
ALTER DEFAULT PRIVILEGES IN SCHEMA foo GRANT USAGE          ON SEQUENCES TO staff;
ALTER DEFAULT PRIVILEGES IN SCHEMA foo REVOKE ...;

这会为将来自动创建的对象设置权限,但不会为预先存在的对象设置权限.

默认权限应用于目标用户创建的对象(FOR ROLE my_creating_role).如果省略了该子句,则默认为执行ALTER DEFAULT PRIVILEGES的当前用户.明确地说:

ALTER DEFAULT PRIVILEGES FOR ROLE my_creating_role IN SCHEMA foo GRANT ...;
ALTER DEFAULT PRIVILEGES FOR ROLE my_creating_role IN SCHEMA foo REVOKE ...;

还要注意的是,所有版本的pgAdmin III在SQL窗格中都有一个微妙的错误和display个默认权限,即使它们不适用于当前角色.复制SQL脚本时,请确保手动调整FOR ROLE子句.

Postgresql相关问答推荐

如何在PostgreSQL中正确删除数据库

如何确定要与给定转储文件一起使用的pg_Restore版本?

docker-compose.yml用于使用postgres的spring-boot应用程序

错误:用户需要系统密码:postgres

带有附加组的时间刻度 interpolated_average

Postgres 低估了导致错误查询计划的行数

是否可以在 postgresql 中添加表元数据?

Postgres 会话处于空闲状态,query = COMMIT 或 ROLLBACK

我应该使用哪个 postgresql 包?

SQL数据库表中的多态性?

如何在 PostgreSQL 触发器函数中获取表名?

Postgres - 如果找不到记录,则在更新时返回错误

manage.py 迁移时必须是关系 django_site 的所有者

如何正确索引多对多关联表?

将数据推送到 Heroku 时出错:time zone displacement out of range

错误:关系列不存在 PostgreSQL,无法运行插入查询

python postgres 我可以 fetchall() 100 万行吗?

postgresql DB中唯一键的正确数据类型是什么?

基于秒的 Postgresql 日期差异

在 docker-compose up 后加载 Postgres 转储