查看为对象授予的权限

您可以通过查询以下系统表来查看有关权限、授予者、被授予者和对象的信息:

附加到权限后面的星号 (*) 表示用户可以将该权限授予其他用户。

您还可以使用 GET_PRIVILEGES_DESCRIPTION 元函数查看指定数据库对象的有效权限

查看显式授予的权限

若要查看显式授予的对象权限,请查询 GRANTS 表。

以下查询返回 myschema 架构的显式权限。

=> SELECT grantee, privileges_description FROM grants WHERE object_name='myschema';
 grantee | privileges_description
---------+------------------------
 Bob     | USAGE, CREATE
 Alice   | CREATE
 (2 rows)

查看继承的权限

若要查看哪些表和视图从哪些架构继承权限,请查询 INHERITING_OBJECTS 表。

以下查询返回从其父架构(客户)继承权限的表和视图。

=> SELECT * FROM inheriting_objects WHERE object_schema='customers';
     object_id     |     schema_id     | object_schema |  object_name  | object_type
-------------------+-------------------+---------------+---------------+-------------
 45035996273980908 | 45035996273980902 | customers     | cust_info     | table
 45035996273980984 | 45035996273980902 | customers     | shipping_info | table
 45035996273980980 | 45035996273980902 | customers     | cust_set      | view
 (3 rows)

若要查看表和视图继承的特定权限及其关联的授予语句的信息,请查询 INHERITED_PRIVILEGES 表。

以下查询返回表和视图从其父架构(客户)继承的权限。

=> SELECT object_schema,object_name,object_type,privileges_description,principal,grantor FROM inherited_privileges WHERE object_schema='customers';
 object_schema |  object_name  | object_type |                          privileges_description                           | principal | grantor
---------------+---------------+-------------+---------------------------------------------------------------------------+-----------+---------
 customers     | cust_info     | Table       | INSERT*, SELECT*, UPDATE*, DELETE*, ALTER*, REFERENCES*, DROP*, TRUNCATE* | dbadmin   | dbadmin
 customers     | shipping_info | Table       | INSERT*, SELECT*, UPDATE*, DELETE*, ALTER*, REFERENCES*, DROP*, TRUNCATE* | dbadmin   | dbadmin
 customers     | cust_set      | View        | SELECT*, ALTER*, DROP*                                                    | dbadmin   | dbadmin
 customers     | cust_info     | Table       | SELECT                                                                    | Val       | dbadmin
 customers     | shipping_info | Table       | SELECT                                                                    | Val       | dbadmin
 customers     | cust_set      | View        | SELECT                                                                    | Val       | dbadmin
 customers     | cust_info     | Table       | INSERT                                                                    | Pooja     | dbadmin
 customers     | shipping_info | Table       | INSERT                                                                    | Pooja     | dbadmin
 (8 rows)

查看对象的有效权限

若要查看当前用户对指定数据库对象的有效权限,请使用 GET_PRIVILEGES_DESCRIPTION 元函数。

在以下示例中,用户 Glenn 设置了 REPORTER 角色,并希望检查他对架构 s1 和表 s1.articles 的有效权限。

  • s1.articles 从其架构 (s1) 继承权限。

  • REPORTER 角色具有以下权限:

    • 对架构的 SELECT 权限 s1

    • 对表的 INSERT WITH GRANT OPTION 权限 s1.articles

  • 用户 Glenn 具有以下权限:

    • 对架构 s1 的 UPDATE 和 USAGE 权限。

    • 对表 s1.articles 的 DELETE 权限。

GET_PRIVILEGES_DESCRIPTION 返回 Glenn 对架构 s1 的以下有效权限:

=> SELECT GET_PRIVILEGES_DESCRIPTION('schema', 's1');
   GET_PRIVILEGES_DESCRIPTION
--------------------------------
 SELECT, UPDATE, USAGE
(1 row)

GET_PRIVILEGES_DESCRIPTION 返回 Glenn 对表 s1.articles 的以下有效权限:


=> SELECT GET_PRIVILEGES_DESCRIPTION('table', 's1.articles');
   GET_PRIVILEGES_DESCRIPTION
--------------------------------
 INSERT*, SELECT, UPDATE, DELETE
(1 row)

另请参阅