更新时间:2025-05-29 GMT+08:00

访问权限查询函数

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的一些组合。

拥有表的表级别权限则隐含的拥有该表每列的列级权限,因此如果与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的一些组合。

拥有表的表级别权限则隐含的拥有该表每列的列级权限。

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数据类型一样(请参考对象标识符类型)。访问权限类型必须是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。

示例:

 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_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]