📜  列出 postgres 中表的所有权限 - SQL (1)

📅  最后修改于: 2023-12-03 15:07:10.458000             🧑  作者: Mango

列出 postgres 中表的所有权限 - SQL

在 PostgreSQL 数据库中,可以在表级别授予不同的用户或角色不同的权限。这些权限可以用于控制对表的访问,如 SELECT、INSERT、UPDATE 和 DELETE 等操作。如果您想了解一个表的所有权限,可以通过执行以下 SQL 查询来查看它们:

SELECT grantee, privilege_type
FROM information_schema.table_privileges
WHERE table_schema = 'your_schema'
  AND table_name = 'your_table';

这个查询将返回指定表 'your_table'(在指定模式 'your_schema' 中)的所有权限。结果将显示授予这些权限的角色/用户的名称以及权限的类型,如下所示:

| grantee | privilege_type | | --------- | -------------- | | some_role | SELECT | | some_user | INSERT | | other_role | UPDATE | | another_role | DELETE |

这张表格告诉我们,'some_role' 角色被授予了 SELECT 权限,'some_user' 用户被授予了 INSERT 权限,'other_role' 角色被授予了 UPDATE 权限,而 'another_role' 角色被授予了 DELETE 权限。

此外,您还可以使用 PostgreSQL 的系统函数来查看特定表的授权信息。例如,可以执行以下命令:

\z your_schema.your_table

这个命令将显示与前面查询相同的信息,但是以更友好的格式显示,如下所示:

                           Access privileges
 Schema |    Name     | Type  |  Access privileges   | Column privileges | Policies 
--------|-------------|-------|---------------------|-------------------|----------
 public | your_table | table | some_role=arwdDxt/s |                   | 
        |             |       | some_user=a*w/s      |                   | 
        |             |       | other_role=uw/s      |                   | 
        |             |       | another_role=d/*     |                   | 
(1 row)

在这个命令输出中,每个角色/用户被授予的权限都在 'Access privileges' 列下方显示。这些权限由一系列字母表示,每个字母对应一个特定的操作,如下所示:

  • r:SELECT(读取)
  • w:UPDATE(写入)
  • a:INSERT(添加)
  • d:DELETE(删除)
  • D:TRUNCATE(截断)
  • x:REFERENCES(参照)
  • t:TRIGGER(触发器)
  • X:EXECUTE(执行)
  • U:USAGE(使用)

如果某个角色/用户被授予了与特定操作相对应的权限,则相应字母将出现在其名称后面。例如,'some_role' 被授予了 INSERT、UPDATE、DELETE、TRUNCATE、REFERENCES、TRIGGER 和 EXECUTE 权限,因此其权限字符串为 'arwdDxt/s'。

总之,PostgreSQL 提供了多种方法来查看表级授权信息。使用上述 SQL 查询或系统命令,您可以找出哪些用户或角色可以对指定的表执行哪些操作。