在不知道架构名称的情况下向组角色添加权限

Posted

技术标签:

【中文标题】在不知道架构名称的情况下向组角色添加权限【英文标题】:Add privileges to group role without knowing schema name 【发布时间】:2013-10-02 08:42:48 【问题描述】:

如何在不指定特定架构的情况下向角色(充当组)添加权限。基本上我有一个带有模式的数据库(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;

【问题讨论】:

【参考方案1】:

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。

【讨论】:

以上是关于在不知道架构名称的情况下向组角色添加权限的主要内容,如果未能解决你的问题,请参考以下文章

在不创建新视图或知道特定父视图的情况下向 UIButton 类添加约束

您可以在没有角色和权限的情况下将 Shiro 用于 Grails 吗?

在不更新应用程序的情况下向应用程序添加/更新“新闻”

如何在不使用 HTML 的情况下向 JLabel 添加换行符

如何在不覆盖现有样式的情况下向 WPF 自定义控件添加触发器?

如何在不使用 kml 的情况下向 android studio 中的谷歌地图应用程序添加大量多边形