如何在不指定特定架构的情况下向角色(作为组)添加权限。基本上我有一个带有模式的数据库(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;
最佳答案
有ALTER DEFAULT PRIVILEGES
,但它只适用于表、序列、函数和类型。不适用于架构。更多相关答案:
Grant all on a specific schema in the db to a group role in PostgreSQL
但是,如果动态创建架构,也可以动态地向角色添加权限。例如,如果要在plpgsql函数中执行所有这些操作,请将其合并(不使用DO
包装器):
DO
$$
BEGIN
EXECUTE format('GRANT ALL ON SCHEMA %I TO mygroup', new_schema);
END
$$
format()
需要Postgres 9.1或更高版本。一定要properly escape identifiers for dynamic SQL。
关于postgresql - 在不知道架构名称的情况下向组角色添加特权,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19027247/