本文介紹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