本文介紹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以下版本,請您使用自助升級或加入HologresDingTalk交流群反饋,詳情請參見如何擷取更多的線上支援?。需要資料庫開啟專家許可權模型,如果您開啟的是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