授予对 Postgres 中所有表的访问权限

Posted

技术标签:

【中文标题】授予对 Postgres 中所有表的访问权限【英文标题】:Grant access for all all tables in Postgres 【发布时间】:2020-12-25 12:15:43 【问题描述】:

如何将 Postgres 数据库中所有模式的所有表权限授予用户/角色?

以下命令仅授予特定架构而不是整个数据库。

GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA schema_name TO username;

例如,

数据库:测试 Schema : schema1, schema2 内部测试 表:schema1.table1,schema1.table2,schema2.table1,schema2.table2

如何为在数据库中找到的所有模式中找到的所有表提供所有表权限。

【问题讨论】:

【参考方案1】:

您必须拥有特定的架构。 有关 GRANT 的更多用法,另请参阅此内容。此外,授予对象类型可用的所有权限。 PRIVILEGES 关键字在 PostgreSQL 中是可选的,但在严格的 SQL 中是必需的。

因此,您基本上可以将 all 用于所有表所属的特定架构。

所以

grant all on all tables in schema "schema_name" to user 

应该为你做,但你需要你指定架构名称。

有关更多信息,请参阅此内容: link

【讨论】:

【参考方案2】:

使用psql

SELECT format(
          'GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA %I TO username;',
          nspname
       )
FROM pg_namespace
WHERE nspname NOT LIKE ANY
         (ARRAY['pg_catalog','information_schema','pg_temp%'])::name[]
\gexec

\gexec 将查询结果作为 SQL 语句执行。

【讨论】:

以上是关于授予对 Postgres 中所有表的访问权限的主要内容,如果未能解决你的问题,请参考以下文章

授予数据库中的所有权限有啥作用?

如何授予对 DynamoDB 表的访问权限?

PostgreSQL 授予对表的访问权限

ClickHouse 仅授予用户对数据库中几个表的访问权限

限制对 Redshift 表的访问,仅授予对视图的访问权限

如何授予用户对系统表的有限访问权限?