postgresql - 将数据库中特定架构上的所有内容授予 PostgreSQL 中的组角色

标签 postgresql database-design roles privileges sql-grant

使用 PostgreSQL 9.0,我有一个名为“staff”的组角色,我想授予该角色对特定模式中的表的所有(或某些)特权。以下均无效

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

“员工”的成员仍然无法对模式“foo”中的单个表进行选择或更新,或者(在第二个命令的情况下)数据库中的任何表除非我授予该特定表上的所有权限。

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

更新:a similar question on serverfault.com 的帮助下解决了这个问题.

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

最佳答案

您找到了为给定模式中的所有现有 表设置权限的简写。 The manual clarifies :

(but note that ALL TABLES is considered to include views and foreign tables).

大胆强调我的。 serial 列是使用 nextval() 在序列上作为列默认值实现的,quoting the manual :

For sequences, this privilege allows the use of the currval and nextval functions.

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

GRANT USAGE ON ALL SEQUENCES IN SCHEMA foo TO mygrp;

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

对象怎么样?

您还会对 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 Pane 中显示默认权限,即使它们不适用于当前角色。请务必在复制 SQL 脚本时手动调整 FOR ROLE 子句。

关于postgresql - 将数据库中特定架构上的所有内容授予 PostgreSQL 中的组角色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10352695/

相关文章:

mysql - 数据库网页前端

postgresql - 如何使用 TSVECTOR 和 TSQUERY 搜索单个或多个列

mysql - 使用父类(super class)表在数据库中建模继承的性能

mysql - 公司、产品、配件和协会的数据库设计

sql - 分配用户角色的首选数据库设计方法? (帽子与组)

java - Spring Boot 如何使用 jwt 管理用户角色

java.sql.SQLException : No Suitable Driver error in android app that interacts with postgres 异常

Python psycopg2 执行挂起

php - 您应该将用户登录详细信息存储在与您的网站相同的数据库中吗?

debian - 抱歉,用户 "user"不允许以 root 身份执行 '/usr/bin/apt-get update'