本文介绍Hologres支持的账号和权限管理函数。
类型 | 函数 | 功能 |
账号管理函数 | 将邮箱形式或RAM形式的阿里云账号转换为阿里云账号ID。 | |
将阿里云账号ID转换为邮箱形式或RAM形式的阿里云账号。 | ||
授权函数 | 用于在专家权限模型下,将源表给用户授予的权限复制到目标表,目标表保持与源表一致的权限。 | |
权限查询函数 | 确认当前用户或指定用户是否有指定表的任意列的特定权限。 | |
确认当前用户是否有指定列的特定权限。 | ||
确认当前用户或指定用户是否有指定数据库的特定权限。 | ||
确认当前用户或指定用户是否有外部数据包装器的特定权限。 | ||
确认当前用户或指定用户是否有指定函数的特定权限。 | ||
确认当前用户或指定用户是否有指定语言的特定权限。 | ||
确认当前用户或指定用户是否有指定的Schema的特定权限。 | ||
确认当前用户或指定用户是否有指定外部服务器的特定权限。 | ||
确认当前用户或指定用户是否有指定表的特定权限。 | ||
确认当前用户或指定用户是否有指定表空间的特定权限。 | ||
确认当前用户或指定用户是否有特定类型(如表、视图、序列等)的特定权限。 |
账号管理函数
USER_DISPLAY_NAME
描述:将阿里云账号ID转换为邮箱形式或RAM形式的阿里云账号。
SELECT USER_DISPLAY_NAME (user_name);
参数说明
user_name:必填,阿里云账号ID。通常为数字形式,例如
13532241323xxx
或RAM用户p4_23402030200xxx
。返回值说明
返回值为邮箱形式或RAM形式的阿里云账号,例如
xx@aliyun.com
,RAM$mainaccount:subuser
或RAM$public
。示例
--将指定账号转换为邮箱形式或RAM形式的阿里云账号 SELECT USER_DISPLAY_NAME ('13532241323xxx');
HG_DISPLAY_NAME_TO_ID
描述:将邮箱形式或RAM形式的阿里云账号转换为阿里云账号ID。
SELECT HG_DISPLAY_NAME_TO_ID (aliyun_id);
参数说明
aliyun_id:必填,阿里云账号。通常为邮箱形式或RAM形式,例如
xx@aliyun.com
,RAM$mainaccount:subuser
或RAM$public
。返回值说明
返回值为阿里云账号ID,通常为数字形式,例如
13532241323xxx
或p4_23402030200xxx
。示例
SELECT HG_DISPLAY_NAME_TO_ID ('RAM$main:subuser');
授权函数
APPLY_PRIVILEGES
描述:用于在专家权限模型下,将源表给用户授予的权限复制到目标表,目标表保持与源表一致的权限。
-- 将源表的权限复制给目标表,并且不回收目标表的权限,即不删除目标表之前具有的权限规则 CALL APPLY_PRIVILEGES('<old_table>','<new_table>', false); -- 将源表的权限复制给目标表,并且回收目标表的权限,即删除目标表之前具有的权限规则 CALL APPLY_PRIVILEGES('<old_table>','<new_table>');
说明专家权限模型下,当使用
CREATE TABLE LIKE
、INSERT OVERWRITE
、自动分区等创建新表时,新表的权限还需要重新再授予给用户,通过APPLY_PRIVILEGES
函数可以复制源表的所有用户权限至新表,简化授权操作。使用限制
仅Hologres V1.1.48及以上版本支持
APPLY_PRIVILEGES
函数,如果您的实例是V1.1.48以下版本,请您使用自助升级或加入Hologres钉钉交流群反馈,详情请参见如何获取更多的在线支持?。需要数据库开启专家权限模型,如果您开启的是SPM或者SLPM请转换为专家权限模型,详情请参见权限模型转换。
调用函数需要具有目标表的GRANT、REVOKE权限。
APPLY_PRIVILEGES
的目标表是分区表时,只对父表复制权限,不影响子表访问控制权限。
参数说明
old_table:必填,源表名称,即被复制权限的表名称。
new_table:必填,目标表名称,即获得权限的表名称。
示例
-- 将test_table1 ACL授权信息、owner信息应用到test_table2上, false代表不对test_table2之前具有的权限规则进行删除 CALL APPLY_PRIVILEGES('test_table1','test_table2', false); -- 将test_table1 ACL授权信息、owner信息应用到test_table2上,对test_table2之前具有的权限规则进行删除,保持两表的权限完全一致 CALL APPLY_PRIVILEGES('test_table1','test_table2');
权限查询函数
示例数据
权限查询函数相关的示例均基于test
示例数据。以下是创建表test
并添加数据的命令示例。
CREATE TABLE test (
a INT
);
INSERT INTO test (a) VALUES (1);
INSERT INTO test (a) VALUES (2);
INSERT INTO test (a) VALUES (3);
HAS_ANY_COLUMN_PRIVILEGE
描述:确认当前用户或指定用户是否有指定表的任意列的特定权限。
HAS_ANY_COLUMN_PRIVILEGE([user, ]table, privilege)
参数说明
user:可选,账号名称或账号ID。
table:必填,表名称。
privilege:必填,权限类型,也可以用逗号分隔列出的多个权限类型。取值为:SELECT、INSERT、UPDATE、REFERENCES。
返回值说明
返回BOOLEAN类型,若当前用户或指定用户有访问表任何列的权限,则返回true(t);反之返回false(f)。
示例
SELECT HAS_ANY_COLUMN_PRIVILEGE('139699392458****', 'test' , 'SELECT,INSERT,UPDATE,REFERENCES');
返回结果如下。
has_any_column_privilege -------------------------- t
HAS_COLUMN_PRIVILEGE
描述:确认当前用户是否有指定列的特定权限。
HAS_COLUMN_PRIVILEGE(table, column, privilege)
参数说明
table:必填,表名称。
column:必填,列名称。
privilege:必填,权限类型,也可以用逗号分隔列出的多个权限类型。取值为:SELECT、INSERT、UPDATE、REFERENCES。
返回值说明
返回BOOLEAN类型,若当前用户有访问列的权限,则返回true(t);反之返回false(f)。
示例
SELECT HAS_COLUMN_PRIVILEGE('test' , 'a', 'SELECT,INSERT,UPDATE,REFERENCES');
返回结果如下。
has_column_privilege ---------------------- t
HAS_DATABASE_PRIVILEGE
描述:确认当前用户或指定用户是否有指定数据库的特定权限。
HAS_DATABASE_PRIVILEGE([user, ]database, privilege)
参数说明
user:可选,账号名称或账号ID。
database:必填,数据库名称。
privilege:必填,权限类型,也可以用逗号分隔列出的多个权限类型。取值如下:CREATE、TEMPORARY、TEMP。
返回值说明
返回BOOLEAN类型,若当前用户或指定用户有指定数据库的权限,则返回true(t);反之返回false(f)。
示例
SELECT HAS_DATABASE_PRIVILEGE('glz', 'CREATE,TEMPORARY,TEMP');---替换为自己创建的数据库名称
返回结果如下。
has_database_privilege ------------------------ t
HAS_FOREIGN_DATA_WRAPPER_PRIVILEGE
描述:确认当前用户或指定用户是否有外部数据包装器的特定权限。
HAS_FOREIGN_DATA_WRAPPER_PRIVILEGE([user, ]fdw, privilege)
参数说明
user:可选,账号名称或账号ID。
fdw:必填,外部数据封装器名字或ID。
privilege:必填,权限类型,也可以用逗号分隔列出的多个权限类型。取值为:USAGE。
返回值说明
返回BOOLEAN类型,若当前用户或指定用户有外部数据包装器的权限,则返回true(t);反之返回false(f)。
示例
SELECT HAS_FOREIGN_DATA_WRAPPER_PRIVILEGE('dlf_fdw', 'USAGE');--将dlf_fdw替换为自己已创建外部数据封装器。
返回结果如下。
has_foreign_data_wrapper_privilege ------------------------------------ t
HAS_FUNCTION_PRIVILEGE
描述:确认当前用户或指定用户是否有指定函数的特定权限。
has_function_privilege([user, ]function, privilege)
参数说明
user:可选,账号名称或账号ID。
function:必填,函数名称。
privilege:必填,权限类型,也可以用逗号分隔列出的多个权限类型。取值为:EXECUTE。
返回值说明
返回BOOLEAN类型,若当前用户或指定用户有指定函数的操作权限,则返回true(t);反之返回false(f)。
示例
SELECT has_function_privilege('now()', 'EXECUTE');
返回结果如下。
has_function_privilege ------------------------ t
HAS_LANGUAGE_PRIVILEGE
描述:确认当前用户或指定用户是否有指定语言的特定权限。
HAS_LANGUAGE_PRIVILEGE([user, ]language, privilege)
参数说明
user:可选,账号名称或账号ID。
language:必填,语言名称。
privilege:必填,权限类型,也可以用逗号分隔列出的多个权限类型。取值为:USAGE。
返回值说明
返回BOOLEAN类型,若当前用户或指定用户有语言权限,则返回true(t);反之返回false(f)。
示例
SELECT HAS_LANGUAGE_PRIVILEGE('plpgsql', 'USAGE');
返回结果如下。
has_language_privilege ------------------------ t
HAS_SCHEMA_PRIVILEGE
描述:确认当前用户或指定用户是否有指定的Schema的特定权限。
HAS_SCHEMA_PRIVILEGE([user, ]schema, privilege)
参数说明
user:可选,账号名称或账号ID。
schema:必填,Schema名称。
privilege:必填,权限类型,也可以用逗号分隔列出的多个权限类型。取值为:CREATE、USAGE。
返回值说明
返回BOOLEAN类型,若当前用户或指定用户有指定的Schema权限,则返回true(t);反之返回false(f)。
示例
SELECT HAS_SCHEMA_PRIVILEGE('public', 'CREATE,USAGE');
返回结果如下。
has_schema_privilege ---------------------- t
HAS_SERVER_PRIVILEGE
描述:确认当前用户或指定用户是否有指定外部服务器的特定权限。
HAS_SERVER_PRIVILEGE([user, ]server, privilege)
参数说明
user:可选,账号名称或账号ID。
server:必填,外部服务器名称。
privilege:必填,权限类型,也可以用逗号分隔列出的多个权限类型。取值为:USAGE。
返回值说明
返回BOOLEAN类型,若当前用户或指定用户有外部服务器的权限,则返回true(t);反之返回false(f)。
示例
SELECT HAS_SERVER_PRIVILEGE('meta_warehouse_server', 'USAGE');
返回结果如下。
has_server_privilege ---------------------- t
HAS_TABLE_PRIVILEGE
描述:确认当前用户或指定用户是否有指定表的特定权限。
HAS_TABLE_PRIVILEGE([user, ]table, privilege)
参数说明
user:可选,账号名称或账号ID。
table:必填,表名称。
privilege:必填,权限类型,也可以用逗号分隔列出的多个权限类型。取值为:SELECT、INSERT、UPDATE、DELETE、TRUNCATE。
返回值说明
返回BOOLEAN类型,若当前用户或指定用户有指定表的操作权限,则返回true(t);反之返回false(f)。
示例
SELECT HAS_TABLE_PRIVILEGE('test', 'SELECT,INSERT');
返回结果如下。
has_table_privilege --------------------- t
HAS_TABLESPACE_PRIVILEGE
描述:确认当前用户或指定用户是否有指定表空间的特定权限。
HAS_TABLESPACE_PRIVILEGE([user, ]tablespace, privilege)
参数说明
user:可选,账号名称或账号ID。
tablespace:必填,表空间名称。
privilege:必填,权限类型,也可以用逗号分隔列出的多个权限类型。取值为:CREATE。
返回值说明
返回BOOLEAN类型,若当前用户或指定用户有表空间权限,则返回true(t);反之返回false(f)。
示例
SELECT HAS_TABLESPACE_PRIVILEGE('pg_default', 'CREATE');
返回结果如下。
has_table_privilege --------------------- t
HAS_TYPE_PRIVILEGE
描述:确认当前用户或指定用户是否有特定类型(如表、视图、序列等)的特定权限。
HAS_TYPE_PRIVILEGE([user, ]type, privilege)
参数说明
user:可选,账号名称或账号ID。
type:必填,类型名称。
privilege:必填,权限类型,也可以用逗号分隔列出的多个权限类型。
返回值说明
返回BOOLEAN类型,若当前用户或指定用户有特定类型(如表、视图、序列等)的权限,则返回true(t);反之返回false(f)。
示例
SELECT HAS_TYPE_PRIVILEGE('test', 'USAGE');
返回结果如下。
has_type_privilege -------------------- t