
# 访问权限查询函数
DDL类权限ALTER、DROP、COMMENT、INDEX、VACUUM属于所有者固有的权限，隐式拥有。
以下访问权限查询函数仅表示用户是否具有某对象上的某种对象权限，即返回记录在系统表acl字段中的对象权限拥有情况。
#### has_any_column_privilege(user, table, privilege)
描述：指定用户是否有访问表任何列的权限。
 表1参数类型说明 
| 参数名       | 合法入参类型   | 描述 | 取值范围                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
|:---|:---|:---|:---|
| user      | name，oid | 用户 | 用户名字或id。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
| table     | text，oid | 表  | 表名称或表id。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
| privilege | text     | 权限 | - SELECT：允许对指定表任何列执行SELECT语句。  - INSERT：允许对指定表任何列执行INSERT语句。  - UPDATE：允许对指定表任何列任意字段执行UPDATE语句。  - REFERENCES：允许创建一个外键约束（分布式场景暂不支持）。  - COMMENT：允许对指定表任何列执行COMMENT语句。   |
   
返回类型：Boolean
#### has_any_column_privilege(table, privilege)
描述：当前用户是否有访问表任何列的权限，合法参数类型见[表1 参数类型说明]。
返回类型：Boolean
备注：has_any_column_privilege检查用户是否以特定方式访问表的任何列。其参数可能与has_table_privilege类似，除了访问权限类型必须是SELECT、INSERT、UPDATE或REFERENCES的一些组合。
![](https://support.huaweicloud.com/distributed-devg-v8-gaussdb/public_sys-resources/note_3.0-zh-cn.png)
拥有表的表级别权限则隐含的拥有该表每列的列级权限，因此如果与has_table_privilege参数相同，has_any_column_privilege总是返回true。但是如果授予至少一列的列级权限也返回成功。
#### has_column_privilege(user, table, column, privilege)
描述：指定用户是否有访问列的权限。
 表2参数类型说明 
| 参数名       | 合法入参类型        | 描述 | 取值范围                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
|:---|:---|:---|:---|
| user      | name，oid      | 用户 | 用户名字或者id。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
| table     | text，oid      | 表名 | 表的名字或id。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
| column    | text，smallint | 列名 | 列的名字或属性号。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
| privilege | text          | 权限 | - SELECT：允许对表的指定列执行SELECT语句。  - INSERT：允许对表的指定列执行INSERT语句。  - UPDATE：允许对表的指定列执行UPDATE语句。  - REFERENCES：允许创建一个外键约束（分布式场景暂不支持）。  - COMMENT：允许对表的指定列执行COMMENT语句。   |
   
返回类型：Boolean
#### has_column_privilege(table, column, privilege)
描述：当前用户是否有访问列的权限，合法参数类型见[表2 参数类型说明]。
返回类型：Boolean
备注：has_column_privilege检查用户是否以特定方式访问一列。其参数类似于has_table_privilege，可以通过列名或属性号添加列。想要的访问权限类型必须是SELECT、INSERT、UPDATE或REFERENCES的一些组合。
![](https://support.huaweicloud.com/distributed-devg-v8-gaussdb/public_sys-resources/note_3.0-zh-cn.png)
拥有表的表级别权限则隐含的拥有该表每列的列级权限。
#### has_cek_privilege(user, cek, privilege)
描述：指定用户是否有访问列加密密钥CEK的权限。
表3参数类型说明 
| 参数名       | 合法入参类型   | 描述    | 取值范围                                                                                                                                                                                                                                                                                                                                                                                                                                          |
|:---|:---|:---|:---|
| user      | name，oid | 用户    | 用户名字或id。                                                                                                                                                                                                                                                                                                                                                                                                                                      |
| cek       | text，oid | 列加密密钥 | 列加密密钥名称或id。                                                                                                                                                                                                                                                                                                                                                                                                                                   |
| privilege | text     | 权限    | - USAGE：允许使用指定列加密密钥。  - DROP：允许删除指定列加密密钥。   |
   
返回类型：Boolean
#### has_cmk_privilege(user, cmk, privilege)
描述：指定用户是否有访问客户端加密主密钥CMK的权限。
表4参数类型说明 
| 参数名       | 合法入参类型   | 描述       | 取值范围                                                                                                                                                                                                                                                                                                                                                                                                                                        |
|:---|:---|:---|:---|
| user      | name，oid | 用户       | 用户名字或id。                                                                                                                                                                                                                                                                                                                                                                                                                                    |
| cmk       | text，oid | 客户端加密主密钥 | 客户端加密主密钥名称或id。                                                                                                                                                                                                                                                                                                                                                                                                                              |
| privilege | text     | 权限       | - USAGE：允许使用指定客户端加密主密钥。  - DROP：允许删除指定客户端加密主密钥。   |
   
返回类型：Boolean
#### has_database_privilege(user, database, privilege)
描述：指定用户是否有访问数据库的权限。
 表5参数类型说明 
| 参数名       | 合法入参类型   | 描述  | 取值范围                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
|:---|:---|:---|:---|
| user      | name，oid | 用户  | 用户名字或id。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
| database  | text，oid | 数据库 | 数据库名字或id。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
| privilege | text     | 权限  | - CREATE：对于数据库，允许在数据库里创建新的模式。  - TEMPORARY：允许在使用数据库的时候创建临时表。  - TEMP：允许在使用数据库的时候创建临时表。  - CONNECT：允许用户连接到指定的数据库。  - ALTER：允许用户修改指定对象的属性。  - DROP：允许用户删除指定的对象。  - COMMENT：允许用户定义或修改指定对象的注释。   |
   
返回类型：Boolean
#### has_database_privilege(database, privilege)
描述：当前用户是否有访问数据库的权限，合法参数类型见[表5 参数类型说明]。
返回类型：Boolean
备注：has_database_privilege检查用户是否能以在特定方式访问数据库。其参数类似has_table_privilege。访问权限类型必须是CREATE、CONNECT、TEMPORARY或TEMP（等价于TEMPORARY）的一些组合。
#### has_directory_privilege(user, directory, privilege)
 表6参数类型说明 
| 参数名       | 合法入参类型   | 描述 | 取值范围                                                                                                                                                                                                                                                                                                                                                                                                                                        |
|:---|:---|:---|:---|
| user      | name，oid | 用户 | 用户名字或id。                                                                                                                                                                                                                                                                                                                                                                                                                                    |
| directory | text，oid | 目录 | 目录名字或者oid。                                                                                                                                                                                                                                                                                                                                                                                                                                  |
| privilege | text     | 权限 | - READ：允许对该目录进行读操作。  - WRITE:允许对该目录进行写操作。   |
   
描述：指定用户是否有访问directory的权限。
返回类型：Boolean
#### has_directory_privilege(directory, privilege)
描述：当前用户是否有访问directory的权限，合法参数类型见[表6 参数类型说明]。
返回类型：Boolean
#### has_foreign_data_wrapper_privilege(user, fdw, privilege)
 表7参数类型说明 
| 参数名       | 合法入参类型   | 描述      | 取值范围               |
|:---|:---|:---|:---|
| user      | name，oid | 用户      | 用户名字或者id。          |
| fdw       | text，oid | 外部数据封装器 | 外部数据封装器名字或id。      |
| privilege | text     | 权限      | USAGE：允许访问外部数据封装器。 |
   
描述：指定用户是否有访问外部数据封装器的权限。
返回类型：Boolean
#### has_foreign_data_wrapper_privilege(fdw, privilege)
描述：当前用户是否有访问外部数据封装器的权限，合法参数类型见[表7 参数类型说明]。
返回类型：Boolean
备注：has_foreign_data_wrapper_privilege检查用户是否能以特定方式访问外部数据封装器。其参数类似has_table_privilege。访问权限类型必须是USAGE。
#### has_function_privilege(user, function, privilege)
 表8参数类型说明 
| 参数名       | 合法入参类型   | 描述 | 取值范围                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
|:---|:---|:---|:---|
| user      | name，oid | 用户 | 用户名字或者id                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
| function  | text，oid | 函数 | 函数名称或id                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
| privilege | text     | 权限 | EXECUTE：允许使用指定的函数，以及利用这些函数实现的操作符。 - ALTER：允许用户修改指定对象的属性。  - DROP：允许用户删除指定的对象。  - COMMENT：允许用户定义或修改指定对象的注释。   |
   
描述：指定用户是否有访问函数的权限。
返回类型：Boolean
#### has_function_privilege(function, privilege)
描述：当前用户是否有访问函数的权限。合法参数类型见[表8 参数类型说明]。
返回类型：Boolean
备注：has_function_privilege检查一个用户是否能以指定方式访问一个函数。其参数类似has_table_privilege。使用文本字符而不是OID声明一个函数时，允许输入的类型和regprocedure数据类型一样（请参考[对象标识符类型](https://support.huaweicloud.com/distributed-devg-v8-gaussdb/gaussdb-12-0338.html#ZH-CN_TOPIC_0000002558945887)）。访问权限类型必须是EXECUTE。
#### has_language_privilege(user, language, privilege)
 表9参数类型说明 
| 参数名       | 合法入参类型   | 描述 | 取值范围                             |
|:---|:---|:---|:---|
| user      | name，oid | 用户 | 用户名字或id。                         |
| language  | text，oid | 语言 | 语言名称或id。                         |
| privilege | text     | 权限 | USAGE：对于过程语言，允许用户在创建函数的时候指定过程语言。 |
   
描述：指定用户是否有访问语言的权限。
返回类型：Boolean
#### has_language_privilege(language, privilege)
描述：当前用户是否有访问语言的权限。合法参数类型见[表9 参数类型说明]。
返回类型：Boolean
备注：has_language_privilege检查用户是否能以特定方式访问一个过程语言。其参数类似has_table_privilege。访问权限类型必须是USAGE。
#### has_nodegroup_privilege(user, nodegroup, privilege)
描述：检查用户是否有集群节点访问权限。
返回类型：Boolean
表10参数类型说明 
| 参数名       | 合法入参类型   | 描述   | 取值范围                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
|:---|:---|:---|:---|
| user      | name，oid | 用户   | 已存在用户名称或id。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
| nodegroup | text，oid | 集群节点 | 已存在的集群节点。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
| privilege | text     | 权限   | - USAGE：对于子集群，对包含在指定模式中的对象有访问权限时，USAGE允许访问指定子集群下的表对象。  - CREATE：对于子集群，允许在子集群中创建表对象。  - COMPUTE：针对计算子集群，允许用户在具有compute权限的计算子集群上进行弹性计算。  - ALTER：允许用户修改指定对象的属性。  - DROP：允许用户删除指定的对象。   |
   
#### has_nodegroup_privilege(nodegroup, privilege)
描述：检查用户是否有集群节点访问权限。
返回类型：Boolean
#### has_schema_privilege(user, schema, privilege)
描述：指定用户是否有访问模式的权限。
返回类型：Boolean
#### has_schema_privilege(schema, privilege)
描述：当前用户是否有访问模式的权限。
返回类型：Boolean
备注：has_schema_privilege检查用户是否能以特定方式访问一个模式。其参数类似has_table_privilege。访问权限类型必须是CREATE、USAGE、ALTER、DROP或COMMENT的一些组合。当检查类型里包含CREATE权限且被检查的Schema是用户同名的Schema时，由于同名Schema的特殊约束，必须拥有Schema的OWNER权限，该函数才会返回TRUE。
#### has_sequence_privilege(user, sequence, privilege)
描述：指定用户是否有访问序列的权限。
返回类型：Boolean
表11参数类型说明 
| 参数名       | 合法入参类型   | 描述 | 取值范围                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
|:---|:---|:---|:---|
| user      | name，oid | 用户 | 已存在用户名称或id。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
| sequence  | text，oid | 序列 | 已存在序列名称或id。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
| privilege | text     | 权限 | - USAGE：对于序列，USAGE允许使用nextval函数。  - SELECT：允许创建序列。  - UPDATE：允许执行UPDATE语句。  - ALTER：允许用户修改指定对象的属性。  - DROP：允许用户删除指定的对象。  - COMMENT：允许用户定义或修改指定对象的注释。   |
   
#### has_sequence_privilege(sequence, privilege)
描述：指定当前用户是否有访问序列的权限。
返回类型：Boolean
#### has_server_privilege(user, server, privilege)
描述：指定用户是否有访问外部服务的权限。
返回类型：Boolean
#### has_server_privilege(server, privilege)
描述：当前用户是否有访问外部服务的权限。
返回类型：Boolean
备注：has_server_privilege检查用户是否能以指定方式访问一个外部服务器。其参数类似has_table_privilege。访问权限类型必须是USAGE、ALTER、DROP或COMMENT之一的值。
#### 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、REFERENCESTRIGGER、ALTER、DROP、COMMENT、INDEX或VACUUM之一的值。可以给权限类型添加WITH GRANT OPTION，用来测试权限是否拥有授权选项。也可以用逗号分隔列出的多个权限类型，如果拥有任何所列出的权限，则结果为true。
示例：
```
gaussdb=# SELECT has_table_privilege('tpcds.web_site', 'select');
 has_table_privilege  
--------------------- 
 t 
(1 row)
gaussdb=# SELECT has_table_privilege('omm', 'tpcds.web_site', 'select,INSERT WITH GRANT OPTION ');
 has_table_privilege  
--------------------- 
 t 
(1 row)
```
#### has_tablespace_privilege(user, tablespace, privilege)
描述：指定用户是否有访问表空间的权限。
返回类型：Boolean
#### has_tablespace_privilege(tablespace, privilege)
描述：当前用户是否有访问表空间的权限。
返回类型：Boolean
备注：has_tablespace_privilege检查用户是否能以特定方式访问一个表空间。其参数类似has_table_privilege。访问权限类型必须是CREATE、ALTER、DROP或COMMENT之一的值。
#### 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也直接拥有角色的使用权限。
#### has_any_privilege(user, privilege)
描述：指定用户是否有某项ANY权限，若同时查询多个权限，只要具有其中一个则返回true。
返回类型：Boolean
表12参数类型说明 
| 参数名       | 合法入参类型 | 描述    | 取值范围                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
|:---|:---|:---|:---|
| user      | name   | 用户    | 已存在的用户名。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
| privilege | text   | ANY权限 | 可选取值： - CREATE ANY TABLE \[WITH ADMIN OPTION\]  - ALTER ANY TABLE \[WITH ADMIN OPTION\]    - DROP ANY TABLE \[WITH ADMIN OPTION\]  - SELECT ANY TABLE \[WITH ADMIN OPTION\]    - INSERT ANY TABLE \[WITH ADMIN OPTION\]  - UPDATE ANY TABLE \[WITH ADMIN OPTION\]    - DELETE ANY TABLE \[WITH ADMIN OPTION\]  - CREATE ANY SEQUENCE \[WITH ADMIN OPTION\]    - CREATE ANY INDEX \[WITH ADMIN OPTION\]  - CREATE ANY FUNCTION \[WITH ADMIN OPTION\]    - EXECUTE ANY FUNCTION \[WITH ADMIN OPTION\]  - CREATE ANY PACKAGE \[WITH ADMIN OPTION\]    - EXECUTE ANY PACKAGE \[WITH ADMIN OPTION\]  - CREATE ANY TYPE \[WITH ADMIN OPTION\]   |
   
