访问权限查询函数
DDL类权限ALTER、DROP、COMMENT、INDEX、VACUUM属于所有者固有的权限,隐式拥有。
以下访问权限查询函数仅表示用户是否具有某对象上的某种对象权限,即返回记录在系统表acl字段中的对象权限拥有情况。
has_any_column_privilege(user, table, privilege)
描述:指定用户是否有访问表任何列的权限。参数说明如下。
参数名 | 合法入参类型 | 描述 | 取值范围 |
|---|---|---|---|
user | name,oid | 用户 | 用户名字或id。 |
table | text,oid | 表 | 表名称或表id。 |
privilege | text | 权限 |
|
返回类型:Boolean
has_any_column_privilege(table, privilege)
描述:当前用户是否有访问表任何列的权限,合法参数类型见表1。
返回类型:Boolean
备注:该函数检查用户是否以特定方式访问表的任何列。其参数可能与has_table_privilege类似,除了访问权限类型必须是SELECT、INSERT、UPDATE或REFERENCES的一些组合。

拥有表的表级别权限则隐含的拥有该表每列的列级权限,因此如果与has_table_privilege函数的参数相同,该函数总是返回true。但是如果授予至少一列的列级权限也返回成功。
has_column_privilege(user, table, column, privilege)
描述:指定用户是否有访问列的权限。参数说明如下。
参数名 | 合法入参类型 | 描述 | 取值范围 |
|---|---|---|---|
user | name,oid | 用户 | 用户名字或者id。 |
table | text,oid | 表名 | 表的名字或id。 |
column | text,smallint | 列名 | 列的名字或属性号。 |
privilege | text | 权限 |
|
返回类型:Boolean
has_column_privilege(table, column, privilege)
描述:当前用户是否有访问列的权限,合法参数类型见表2。
返回类型:Boolean
备注:该函数检查用户是否以特定方式访问一列。其参数类似于has_table_privilege函数,可以通过列名或属性号添加列。访问权限类型必须是SELECT、INSERT、UPDATE或REFERENCES的一些组合。

拥有表的表级别权限则隐含的拥有该表每列的列级权限。
has_cek_privilege(user, cek, privilege)
描述:指定用户是否有访问列加密密钥CEK的权限。参数说明如下。
参数名 | 合法入参类型 | 描述 | 取值范围 |
|---|---|---|---|
user | name,oid | 用户 | 用户名字或id。 |
cek | text,oid | 列加密密钥 | 列加密密钥名称或id。 |
privilege | text | 权限 |
|
返回类型:Boolean
has_cmk_privilege(user, cmk, privilege)
描述:指定用户是否有访问客户端加密主密钥CMK的权限。参数说明如下。
参数名 | 合法入参类型 | 描述 | 取值范围 |
|---|---|---|---|
user | name,oid | 用户 | 用户名字或id。 |
cmk | text,oid | 客户端加密主密钥 | 客户端加密主密钥名称或id。 |
privilege | text | 权限 |
|
返回类型:Boolean
has_database_privilege(user, database, privilege)
描述:指定用户是否有访问数据库的权限。参数说明如下。
参数名 | 合法入参类型 | 描述 | 取值范围 |
|---|---|---|---|
user | name,oid | 用户 | 用户名字或id。 |
database | text,oid | 数据库 | 数据库名字或id。 |
privilege | text | 权限 |
|
返回类型:Boolean
has_database_privilege(database, privilege)
描述:当前用户是否有访问数据库的权限,合法参数类型见表5。
返回类型:Boolean
备注:该函数检查用户是否能以特定方式访问数据库。其参数类似于has_table_privilege函数。访问权限类型必须是CREATE、CONNECT、TEMPORARY或TEMP(等价于TEMPORARY)的一些组合。
has_directory_privilege(user, directory, privilege)
描述:指定用户是否有访问directory的权限。
参数名 | 合法入参类型 | 描述 | 取值范围 |
|---|---|---|---|
user | name,oid | 用户 | 用户名字或id。 |
directory | text,oid | 目录 | 目录名字或者oid。 |
privilege | text | 权限 |
|
返回类型:Boolean
has_foreign_data_wrapper_privilege(user, fdw, privilege)
描述:指定用户是否有访问外部数据封装器的权限。参数说明如下。
参数名 | 合法入参类型 | 描述 | 取值范围 |
|---|---|---|---|
user | name,oid | 用户 | 用户名字或者id。 |
fdw | text,oid | 外部数据封装器 | 外部数据封装器名字或id。 |
privilege | text | 权限 | USAGE:允许访问外部数据封装器。 |
返回类型:Boolean
has_foreign_data_wrapper_privilege(fdw, privilege)
描述:该函数检查当前用户是否能以特定方式访问外部数据封装器。其参数类似于has_table_privilege函数。访问权限类型必须是USAGE。合法参数类型见表7。
返回类型:Boolean
has_function_privilege(user, function, privilege)
描述:指定用户是否有访问函数的权限。参数说明如下。
参数名 | 合法入参类型 | 描述 | 取值范围 |
|---|---|---|---|
user | name,oid | 用户 | 用户名字或者id。 |
function | text,oid | 函数 | 函数名称或id。 |
privilege | text | 权限 | EXECUTE:允许使用指定的函数,以及利用这些函数实现的操作符。
|
返回类型:Boolean
has_function_privilege(function, privilege)
描述:当前用户是否有访问函数的权限。合法参数类型见表8。
返回类型:Boolean
备注:该函数用于检查一个用户是否能以指定方式访问一个函数。其参数类似于has_table_privilege函数。当使用文本字符而非OID声明一个函数时,允许输入的类型和regprocedure数据类型相同(请参见对象标识符类型)。访问权限类型必须是EXECUTE。
has_language_privilege(user, language, privilege)
描述:指定用户是否有访问语言的权限。参数说明如下:
参数名 | 合法入参类型 | 描述 | 取值范围 |
|---|---|---|---|
user | name,oid | 用户 | 用户名字或id。 |
language | text,oid | 语言 | 语言名称或id。 |
privilege | text | 权限 | USAGE:对于过程语言,允许用户在创建函数的时候指定过程语言。 |
返回类型:Boolean
has_language_privilege(language, privilege)
描述:当前用户是否有访问语言的权限。合法参数类型见表9。
返回类型:Boolean
备注:该函数检查用户是否能以特定方式访问一个过程语言。其参数类似has_table_privilege函数。访问权限类型必须是USAGE。
has_nodegroup_privilege(user, nodegroup, privilege)
描述:检查用户是否有集群节点访问权限。参数说明如下。
参数名 | 合法入参类型 | 描述 | 取值范围 |
|---|---|---|---|
user | name,oid | 用户 | 已存在用户名称或id。 |
nodegroup | text,oid | 集群节点 | 已存在的集群节点。 |
privilege | text | 权限 |
|
返回类型:Boolean
has_schema_privilege(user, schema, privilege)
描述:指定用户是否有访问模式的权限。
返回类型:Boolean
has_schema_privilege(schema, privilege)
描述:当前用户是否有访问模式的权限。
返回类型:Boolean
备注:该函数用于检查用户是否能以特定方式访问一个模式。其参数类似于has_table_privilege函数。访问权限类型必须是CREATE、USAGE、ALTER、DROP或COMMENT的一些组合。当检查类型里包含CREATE权限且被检查的Schema是用户同名的Schema时,由于同名Schema的特殊约束,必须拥有Schema的OWNER权限,该函数才会返回TRUE。
has_sequence_privilege(user, sequence, privilege)
描述:指定用户是否有访问序列的权限。参数说明如下。
参数名 | 合法入参类型 | 描述 | 取值范围 |
|---|---|---|---|
user | name,oid | 用户 | 已存在用户名称或id。 |
sequence | text,oid | 序列 | 已存在序列名称或id。 |
privilege | text | 权限 |
|
返回类型:Boolean
has_server_privilege(user, server, privilege)
描述:指定用户是否有访问外部服务的权限。
返回类型:Boolean
has_server_privilege(server, privilege)
描述:当前用户是否有访问外部服务的权限。
返回类型:Boolean
备注:该函数检查用户是否能以指定方式访问一个外部服务器。其参数类似has_table_privilege函数。访问权限类型必须是USAGE、ALTER、DROP或COMMENT之一的值。
has_table_privilege(user, table, privilege)
描述:指定用户是否有访问表的权限。
参数:
- user:用户可以通过名称或OID(pg_authid.oid)来指定,public表示为PUBLIC角色,或如果缺省该参数,则使用current_user。
- table:指定要检查权限的表,可以通过名称或者OID声明。如果用名称声明,则在必要时可以用模式进行修饰。
- privilege:如果使用文本字符串来声明所希望的权限类型,这个文本字符串必须是SELECT、INSERT、UPDATE、DELETE、TRUNCATE、REFERENCESTRIGGER、ALTER、DROP、COMMENT、INDEX或VACUUM之一的值。
- 可以给权限类型添加WITH GRANT OPTION,用来测试权限是否拥有授权选项。
- 可以用逗号分隔列出的多个权限类型,如果拥有任何所列出的权限,则结果为true。
返回类型:Boolean
has_table_privilege(table, privilege)
描述:用于检查当前用户是否具有对指定表的特定访问权限。参数说明如has_table_privilege(user, table, privilege)所示。
返回类型:Boolean
示例:
1 2 3 4 5 6 7 8 9 10 11 | 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_table_privilege函数。访问权限类型必须是CREATE、ALTER、DROP或COMMENT之一的值。
pg_has_role(user, role, privilege)
描述:指定用户是否有角色的权限。
返回类型:Boolean
pg_has_role(role, privilege)
描述:当前用户是否有角色的权限。
返回类型:Boolean
备注:该函数检查用户是否能以特定方式访问一个角色。其参数类似于has_table_privilege函数,除了public不能用作用户名。访问权限类型必须是MEMBER或USAGE的一些组合。 MEMBER表示的是角色中的直接或间接成员关系(也就是SET ROLE的权限),而USAGE表示无需通过SET ROLE也直接拥有角色的使用权限。
has_any_privilege(user, privilege)
描述:指定用户是否有某项ANY权限,若同时查询多个权限,只要具有其中一个则返回true。参数说明如下。
参数名 | 合法入参类型 | 描述 | 取值范围 |
|---|---|---|---|
user | name | 用户 | 已存在的用户名。 |
privilege | text | ANY权限 | 可选取值:
|
返回类型:Boolean

