
# 访问权限查询函数
#### has_any_column_privilege(user, table, privilege)
描述：指定用户是否有访问表任何列的权限。
返回类型：boolean
#### has_any_column_privilege(table, privilege)
描述：当前用户是否有访问表任何列的权限。
返回类型：boolean
备注：has_any_column_privilege检查用户是否以特定方式访问表的任何列。其参数可能与has_table_privilege类似，除了访问权限类型必须是SELECT、INSERT、UPDATE或REFERENCES的一些组合。
![](https://support.huaweicloud.com/sqlreference-911-dws/public_sys-resources/note_3.0-zh-cn.png)
拥有表的表级别权限则隐含的拥有该表每列的列级权限，因此如果与has_table_privilege参数相同，has_any_column_privilege总是返回true。但是如果授予至少一列的列级权限也返回成功。
#### has_column_privilege(user, table, column, privilege)
描述：指定用户是否有访问列的权限。
返回类型：boolean
#### has_column_privilege(table, column, privilege)
描述：当前用户是否有访问列的权限。
返回类型：boolean
备注：has_column_privilege检查用户是否以特定方式访问一列。其参数类似于has_table_privilege，可以通过列名或属性号添加列。想要的访问权限类型必须是SELECT、INSERT、UPDATE或REFERENCES的一些组合。
![](https://support.huaweicloud.com/sqlreference-911-dws/public_sys-resources/note_3.0-zh-cn.png)
拥有表的表级别权限则隐含的拥有该表每列的列级权限。
#### has_database_privilege(user, database, privilege)
描述：指定用户是否有访问数据库的权限。
返回类型：boolean
#### has_database_privilege(database, privilege)
描述：当前用户是否有访问数据库的权限。
返回类型：boolean
备注：has_database_privilege检查用户是否能以在特定方式访问数据库。其参数类似has_table_privilege。访问权限类型必须是CREATE、CONNECT、TEMPORARY或TEMP（等价于TEMPORARY）的一些组合。
#### has_foreign_data_wrapper_privilege(user, fdw, privilege)
描述：指定用户是否有访问外部数据封装器的权限。
参数fdw，表示外部数据封装器，取值范围为外部数据封装器名字或ID。
返回类型：boolean
#### has_foreign_data_wrapper_privilege(fdw, privilege)
描述：当前用户是否有访问外部数据封装器的权限。
返回类型：boolean
备注：has_foreign_data_wrapper_privilege检查用户是否能以特定方式访问外部数据封装器。其参数类似has_table_privilege。访问权限类型必须是USAGE。
#### has_function_privilege(user, function, privilege)
描述：指定用户是否有访问函数的权限。
返回类型：boolean
#### has_function_privilege(function, privilege)
描述：当前用户是否有访问函数的权限。
返回类型：boolean
备注：has_function_privilege检查一个用户是否能以指定方式访问函数。其参数类似has_table_privilege。使用文本字符而不是OID声明一个函数时，允许输入的类型和regprocedure数据类型一样（请参考[对象标识符类型](https://support.huaweicloud.com/sqlreference-911-dws/dws_06_0022.html)）。访问权限类型必须是EXECUTE。
#### has_language_privilege(user, language, privilege)
描述：指定用户是否有访问语言的权限。
返回类型：boolean
#### has_language_privilege(language, privilege)
描述：当前用户是否有访问语言的权限。
返回类型：boolean
备注：has_language_privilege检查用户是否能以特定方式访问过程语言。其参数类似has_table_privilege。访问权限类型必须是USAGE。
#### has_schema_privilege(user, schema, privilege)
描述：指定用户是否有访问模式的权限。
返回类型：boolean
#### has_schema_privilege(schema, privilege)
描述：当前用户是否有访问模式的权限。
返回类型：boolean
备注：has_schema_privilege检查用户是否能以特定方式访问模式。其参数类似has_table_privilege。访问权限类型必须是CREATE或USAGE的一些组合。
#### has_server_privilege(user, server, privilege)
描述：指定用户是否有访问外部服务的权限。
返回类型：boolean
#### has_server_privilege(server, privilege)
描述：当前用户是否有访问外部服务的权限。
返回类型：boolean
备注：has_server_privilege检查用户是否能以指定方式访问外部服务器。其参数类似has_table_privilege。访问权限类型必须是USAGE。
#### has_table_privilege(user, table, privilege)
描述：指定用户是否有访问表的权限。
返回类型：boolean
#### has_table_privilege(table, privilege)
描述：当前用户是否有访问表的权限。
返回类型：boolean
备注：has_table_privilege检查用户是否以特定方式访问表。用户可以通过名字或OID（pg_authid.oid）来指定，public表明PUBLIC伪角色，如果缺省该参数，则使用current_user。该表可以通过名字或者OID声明。如果用名字声明，则在必要时可以用模式进行修饰。如果使用文本字符串来声明权限类型，该文本字符串必须是SELECT、INSERT、UPDATE、DELETE、TRUNCATE、REFERENCES或TRIGGER之一的值。可以给权限类型添加WITH GRANT OPTION，用来测试权限是否拥有授权选项。也可以用逗号分隔列出的多个权限类型，如果拥有任何所列出的权限，则结果便为true。
示例：
```
SELECT has_table_privilege('tpcds.web_site', 'select');
 has_table_privilege  
--------------------- 
 t 
(1 row)
SELECT has_table_privilege('dbadmin', 'tpcds.web_site', 'select,INSERT WITH GRANT OPTION ');
 has_table_privilege  
--------------------- 
 t 
(1 row)
```
 #### pg_has_role(user, role, privilege)
描述：指定用户是否有角色的权限。
返回类型：boolean
#### pg_has_role(role, privilege)
描述：当前用户是否有角色的权限。
返回类型：boolean
备注：pg_has_role检查用户是否能以特定方式访问角色。其参数类似has_table_privilege，除了public不能用做用户名。访问权限类型必须是MEMBER或USAGE的一些组合。 MEMBER表示的是角色中的直接或间接成员关系（也就是SET ROLE的权限），而USAGE表示无需通过SET ROLE也直接拥有角色的使用权限。
