1

如何在不指定特定架构的情况下向角色(充当组)添加权限。基本上我有一个带有模式(my_first_schema)的数据库。我通过克隆创建多个新模式my_first_schema。然后创建一个新的数据库用户并将我的组权限授予该用户。

如何在不知道架构名称的情况下向组角色添加权限(因为我动态创建架构)?

更新 我试图撤销数据库中所有模式的所有权限,并将选择权限授予动态创建的模式,以便用户只能访问特定模式。但它撤销了所有数据库中所有表的所有权限,并且在授予用户特定模式的 SELECT 权限后,我收到了 Permission denied 错误消息。

ALTER DEFAULT PRIVILEGES REVOKE ALL ON TABLES FROM PUBLIC;

ALTER DEFAULT PRIVILEGES IN SCHEMA john_smith_gmail_com GRANT SELECT ON TABLES TO john_smith_gmail_com;
4

1 回答 1

1

ALTER DEFAULT PRIVILEGES,但它仅适用于表、序列、函数和类型。不适用于模式。此相关答案中的更多内容:
将数据库中特定模式上的所有内容授予 PostgreSQL 中的组角色

但是,如果您动态地创建模式,您也可以动态地为角色添加权限。例如,如果您在 plpgsql 函数中执行所有这些操作,请将其合并(不带DO包装器):

DO
$$
BEGIN
EXECUTE format('GRANT ALL ON SCHEMA %I TO mygroup', new_schema);
END
$$

format()需要 Postgres 9.1 或更高版本。
请务必正确转义动态 SQL 的标识符

于 2013-09-26T11:58:36.543 回答