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

时间:2020-09-07 04:32:18

标签: postgresql

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

以下命令仅授予特定模式,而不授予整个数据库。

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

例如,

数据库:测试 模式:测试内部的schema1,schema2 表:schema1.table1,schema1.table2,schema2.table1,schema2.table2

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

2 个答案:

答案 0 :(得分:0)

您将必须具有特定的架构。 也可以在GRANT上查看更多用法。此外,授予对象类型可用的所有特权。尽管严格的SQL要求使用PRIVILEGES关键字,但在PostgreSQL中关键字是可选的。

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

所以

grant all to all tables in schema “schema_name” to user 

应该为您完成此操作,但您需要指定架构名称。

有关更多信息,请参见此: link

答案 1 :(得分:0)

使用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语句执行。