数据仓库服务 GaussDB(DWS)-如何查看GaussDB(DWS)某个用户有哪些表的权限?
如何查看 GaussDB (DWS)某个用户有哪些表的权限?
场景一:查看用户有哪些表的权限,可使用information_schema.table_privileges系统表查看。例如
1
|
SELECT * FROM information_schema.table_privileges WHERE GRANTEE='user_name'; |
字段 |
数据类型 |
描述 |
---|---|---|
grantor |
sql_identifier |
赋权用户。 |
grantee |
sql_identifier |
被赋权用户。 |
table_catalog |
sql_identifier |
包含该表的数据库名。 |
table_schema |
sql_identifier |
包含该表的模式名。 |
table_name |
sql_identifier |
表名。 |
privilege_type |
character_data |
被赋予的权限类型:SELECT,INSERT,UPDATE,DELETE,TRUNCATE,REFEREN CES ,ANALYZE,VACUUM,ALTER,DROP或TRIGGER。 |
is_grantable |
yes_or_no |
权限是否可赋予其他用户,YES表示可授予,NO表示不可授予。 |
with_hierarchy |
yes_or_no |
是否允许在表继承层级上的特定操作。当特定操作为SELECT时显示YES,否则为NO。 |
如上图所示,表示用户u2拥有Schema u2下的t2的所有权限和Schema u1下的t1的SELECT权限。
需注意,在查询有哪些表权限时,information_schema.table_privileges只能查到当前用户被直接授予的权限,而函数has_table_privilege()除了能查询被直接授予的权限外还能查到间接的权限(即GRANT role to user获取的)。例如:
1 2 3 4 5 6 7 8 9101112131415161718192021222324252627282930 |
CREATE TABLE t1 (c1 int);CREATE USER u1 password '********';CREATE USER u2 password '********';GRANT dbadmin to u2; // 间接通过角色成员关系赋予权限GRANT SELECT on t1 to u1; // 直接授予权限SET ROLE u1 password '********';SELECT * FROM public.t1; 直接授权可以访问表 c1 ----(0 rows)SET ROLE u2 password '********';SELECT * FROM public.t1; //间接授权可以访问表 c1 ----(0 rows)RESET role; //切回到dbadminSELECT * FROM information_schema.table_privileges WHERE table_name = 't1'; // information_schema.table_privileges仅能看到直接授权 grantor | grantee | table_catalog | table_schema | table_name | privilege_type | is_grantable | with_hierarchy---------+------------+---------------+--------------+------------+----------------+--------------+---------------- dbadmin | u1 | gaussdb | public | t1 | SELECT | NO | YES(1 rows)SELECT has_table_privilege('u2', 'public.t1', 'select'); // has_table_privilege还可以看到间接授权 has_table_privilege --------------------- t(1 row) |
场景二:查看用户是否有某张表的权限,可以通过以下方法。
- 执行以下语句查询pg_class系统表。
1
SELECT * FROM pg_class WHERE relname = 'tablename';
查看relacl字段,该字段回显结果如下,权限参数参见表2。
- "rolename=xxxx/yyyy" --表示rolename对该表有xxxx权限,且权限来自yyyy;
- "=xxxx/yyyy" -- 表示public对该表有xxxx权限,且权限来自yyyy。
例如下图:
joe=arwdDxtA,表示joe用户有所有权限(ALL PRIVILEGES)。
leo=arw/joe,表示leo用户拥有读、写、改权限,该权限来自joe授权。
- 如果要查某用户对某张表是否有某种权限,也可以通过访问权限查询函数has_table_privilege进行查询。
1
SELECT * FROM has_table_privilege('用户名','表名','select');
例如,查询joe对表t1是否有查询权限。
1
SELECT * FROM has_table_privilege('joe','t1','select');
- 数据仓库服务GaussDB(DWS)_SQL on Anywhere
- DWS安全_数据仓库服务安全_DWS数据安全管理_DWS安全保障_DWS安全策略
- 调用GaussDB(DWS) API接口_数据仓库服务调用API_如何调用API_在DWS中调用API
- DWS资源管理_GaussDB(DWS)资源管理作用_DWS资源管控
- GAUSS(DWS)工具_gsql工具_DataStudio工具_DSC工具
- DWS产品介绍_DWS产品优势_DWS功能_DWS使用场景_DWS是什么
- GaussDB(DWS)常用SQL_常用SQL命令_SQL语法
- GaussDB(DWS)服务_什么是IoT数仓_如何使用IoT数仓
- GaussDB查看表大小_GaussDB查询表空间_高斯数据库查看表大小-华为云
- 数据库监控DMS_数据库智能运维_了解Auto Pilot_DMS_DWS节点监控