賬號(hào)和權(quán)限管理函數(shù)
本文介紹Hologres支持的賬號(hào)和權(quán)限管理函數(shù)。
類(lèi)型 | 函數(shù) | 功能 |
賬號(hào)管理函數(shù) | 將郵箱形式或RAM形式的阿里云賬號(hào)轉(zhuǎn)換為阿里云賬號(hào)ID。 | |
將阿里云賬號(hào)ID轉(zhuǎn)換為郵箱形式或RAM形式的阿里云賬號(hào)。 | ||
授權(quán)函數(shù) | 用于在專(zhuān)家權(quán)限模型下,將源表給用戶授予的權(quán)限復(fù)制到目標(biāo)表,目標(biāo)表保持與源表一致的權(quán)限。 | |
權(quán)限查詢函數(shù) | 確認(rèn)當(dāng)前用戶或指定用戶是否有指定表的任意列的特定權(quán)限。 | |
確認(rèn)當(dāng)前用戶是否有指定列的特定權(quán)限。 | ||
確認(rèn)當(dāng)前用戶或指定用戶是否有指定數(shù)據(jù)庫(kù)的特定權(quán)限。 | ||
確認(rèn)當(dāng)前用戶或指定用戶是否有外部數(shù)據(jù)包裝器的特定權(quán)限。 | ||
確認(rèn)當(dāng)前用戶或指定用戶是否有指定函數(shù)的特定權(quán)限。 | ||
確認(rèn)當(dāng)前用戶或指定用戶是否有指定語(yǔ)言的特定權(quán)限。 | ||
確認(rèn)當(dāng)前用戶或指定用戶是否有指定的Schema的特定權(quán)限。 | ||
確認(rèn)當(dāng)前用戶或指定用戶是否有指定外部服務(wù)器的特定權(quán)限。 | ||
確認(rèn)當(dāng)前用戶或指定用戶是否有指定表的特定權(quán)限。 | ||
確認(rèn)當(dāng)前用戶或指定用戶是否有指定表空間的特定權(quán)限。 | ||
確認(rèn)當(dāng)前用戶或指定用戶是否有特定類(lèi)型(?如表、?視圖、?序列等)?的特定權(quán)限。 |
賬號(hào)管理函數(shù)
USER_DISPLAY_NAME
描述:將阿里云賬號(hào)ID轉(zhuǎn)換為郵箱形式或RAM形式的阿里云賬號(hào)。
SELECT USER_DISPLAY_NAME (user_name);
參數(shù)說(shuō)明
user_name:必填,阿里云賬號(hào)ID。通常為數(shù)字形式,例如
13532241323xxx
或RAM用戶p4_23402030200xxx
。返回值說(shuō)明
返回值為郵箱形式或RAM形式的阿里云賬號(hào),例如
xx@aliyun.com
,RAM$mainaccount:subuser
或RAM$public
。示例
--將指定賬號(hào)轉(zhuǎn)換為郵箱形式或RAM形式的阿里云賬號(hào) SELECT USER_DISPLAY_NAME ('13532241323xxx');
HG_DISPLAY_NAME_TO _ID
描述:將郵箱形式或RAM形式的阿里云賬號(hào)轉(zhuǎn)換為阿里云賬號(hào)ID。
SELECT HG_DISPLAY_NAME_TO _ID (aliyun_id);
參數(shù)說(shuō)明
aliyun_id:必填,阿里云賬號(hào)。通常為郵箱形式或RAM形式,例如
xx@aliyun.com
,RAM$mainaccount:subuser
或RAM$public
。返回值說(shuō)明
返回值為阿里云賬號(hào)ID,通常為數(shù)字形式,例如
13532241323xxx
或p4_23402030200xxx
。示例
SELECT HG_DISPLAY_NAME_TO _ID ('RAM$main:subuser');
授權(quán)函數(shù)
APPLY_PRIVILEGES
描述:用于在專(zhuān)家權(quán)限模型下,將源表給用戶授予的權(quán)限復(fù)制到目標(biāo)表,目標(biāo)表保持與源表一致的權(quán)限。
-- 將源表的權(quán)限復(fù)制給目標(biāo)表,并且不回收目標(biāo)表的權(quán)限,即不刪除目標(biāo)表之前具有的權(quán)限規(guī)則 CALL APPLY_PRIVILEGES('<old_table>','<new_table>', false); -- 將源表的權(quán)限復(fù)制給目標(biāo)表,并且回收目標(biāo)表的權(quán)限,即刪除目標(biāo)表之前具有的權(quán)限規(guī)則 CALL APPLY_PRIVILEGES('<old_table>','<new_table>');
說(shuō)明專(zhuān)家權(quán)限模型下,當(dāng)使用
CREATE TABLE LIKE
、INSERT OVERWRITE
、自動(dòng)分區(qū)等創(chuàng)建新表時(shí),新表的權(quán)限還需要重新再授予給用戶,通過(guò)APPLY_PRIVILEGES
函數(shù)可以復(fù)制源表的所有用戶權(quán)限至新表,簡(jiǎn)化授權(quán)操作。使用限制
僅Hologres V1.1.48及以上版本支持
APPLY_PRIVILEGES
函數(shù),如果您的實(shí)例是V1.1.48以下版本,請(qǐng)您使用自助升級(jí)或加入Hologres釘釘交流群反饋,詳情請(qǐng)參見(jiàn)如何獲取更多的在線支持?。需要數(shù)據(jù)庫(kù)開(kāi)啟專(zhuān)家權(quán)限模型,如果您開(kāi)啟的是SPM或者SLPM請(qǐng)轉(zhuǎn)換為專(zhuān)家權(quán)限模型,詳情請(qǐng)參見(jiàn)權(quán)限模型轉(zhuǎn)換。
調(diào)用函數(shù)需要具有目標(biāo)表的GRANT、REVOKE權(quán)限。
APPLY_PRIVILEGES
的目標(biāo)表是分區(qū)表時(shí),只對(duì)父表復(fù)制權(quán)限,不影響子表訪問(wèn)控制權(quán)限。
參數(shù)說(shuō)明
old_table:必填,源表名稱(chēng),即被復(fù)制權(quán)限的表名稱(chēng)。
new_table:必填,目標(biāo)表名稱(chēng),即獲得權(quán)限的表名稱(chēng)。
示例
-- 將test_table1 ACL授權(quán)信息、owner信息應(yīng)用到test_table2上, false代表不對(duì)test_table2之前具有的權(quán)限規(guī)則進(jìn)行刪除 CALL APPLY_PRIVILEGES('test_table1','test_table2', false); -- 將test_table1 ACL授權(quán)信息、owner信息應(yīng)用到test_table2上,對(duì)test_table2之前具有的權(quán)限規(guī)則進(jìn)行刪除,保持兩表的權(quán)限完全一致 CALL APPLY_PRIVILEGES('test_table1','test_table2');
權(quán)限查詢函數(shù)
示例數(shù)據(jù)
權(quán)限查詢函數(shù)相關(guān)的示例均基于test
示例數(shù)據(jù)。以下是創(chuàng)建表test
并添加數(shù)據(jù)的命令示例。
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
描述:確認(rèn)當(dāng)前用戶或指定用戶是否有指定表的任意列的特定權(quán)限。
HAS_ANY_COLUMN_PRIVILEGE([user, ]table, privilege)
參數(shù)說(shuō)明
user:可選,賬號(hào)名稱(chēng)或賬號(hào)ID。
table:必填,表名稱(chēng)。
privilege:必填,權(quán)限類(lèi)型,也可以用逗號(hào)分隔列出的多個(gè)權(quán)限類(lèi)型。取值為:SELECT、INSERT、UPDATE、REFERENCES。
返回值說(shuō)明
返回BOOLEAN類(lèi)型,若當(dāng)前用戶或指定用戶有訪問(wèn)表任何列的權(quán)限,則返回true(t);反之返回false(f)。
示例
SELECT HAS_ANY_COLUMN_PRIVILEGE('139699392458****', 'test' , 'SELECT,INSERT,UPDATE,REFERENCES');
返回結(jié)果如下。
has_any_column_privilege -------------------------- t
HAS_COLUMN_PRIVILEGE
描述:確認(rèn)當(dāng)前用戶是否有指定列的特定權(quán)限。
HAS_COLUMN_PRIVILEGE(table, column, privilege)
參數(shù)說(shuō)明
table:必填,表名稱(chēng)。
column:必填,列名稱(chēng)。
privilege:必填,權(quán)限類(lèi)型,也可以用逗號(hào)分隔列出的多個(gè)權(quán)限類(lèi)型。取值為:SELECT、INSERT、UPDATE、REFERENCES。
返回值說(shuō)明
返回BOOLEAN類(lèi)型,若當(dāng)前用戶有訪問(wèn)列的權(quán)限,則返回true(t);反之返回false(f)。
示例
SELECT HAS_COLUMN_PRIVILEGE('test' , 'a', 'SELECT,INSERT,UPDATE,REFERENCES');
返回結(jié)果如下。
has_column_privilege ---------------------- t
HAS_DATABASE_PRIVILEGE
描述:確認(rèn)當(dāng)前用戶或指定用戶是否有指定數(shù)據(jù)庫(kù)的特定權(quán)限。
HAS_DATABASE_PRIVILEGE([user, ]database, privilege)
參數(shù)說(shuō)明
user:可選,賬號(hào)名稱(chēng)或賬號(hào)ID。
database:必填,數(shù)據(jù)庫(kù)名稱(chēng)。
privilege:必填,權(quán)限類(lèi)型,也可以用逗號(hào)分隔列出的多個(gè)權(quán)限類(lèi)型。取值如下:CREATE、TEMPORARY、TEMP。
返回值說(shuō)明
返回BOOLEAN類(lèi)型,若當(dāng)前用戶或指定用戶有指定數(shù)據(jù)庫(kù)的權(quán)限,則返回true(t);反之返回false(f)。
示例
SELECT HAS_DATABASE_PRIVILEGE('glz', 'CREATE,TEMPORARY,TEMP');---替換為自己創(chuàng)建的數(shù)據(jù)庫(kù)名稱(chēng)
返回結(jié)果如下。
has_database_privilege ------------------------ t
HAS_FOREIGN_DATA_WRAPPER_PRIVILEGE
描述:確認(rèn)當(dāng)前用戶或指定用戶是否有外部數(shù)據(jù)包裝器的特定權(quán)限。
HAS_FOREIGN_DATA_WRAPPER_PRIVILEGE([user, ]fdw, privilege)
參數(shù)說(shuō)明
user:可選,賬號(hào)名稱(chēng)或賬號(hào)ID。
fdw:必填,外部數(shù)據(jù)封裝器名字或ID。
privilege:必填,權(quán)限類(lèi)型,也可以用逗號(hào)分隔列出的多個(gè)權(quán)限類(lèi)型。取值為:USAGE。
返回值說(shuō)明
返回BOOLEAN類(lèi)型,若當(dāng)前用戶或指定用戶有外部數(shù)據(jù)包裝器的權(quán)限,則返回true(t);反之返回false(f)。
示例
SELECT HAS_FOREIGN_DATA_WRAPPER_PRIVILEGE('dlf_fdw', 'USAGE');--將dlf_fdw替換為自己已創(chuàng)建外部數(shù)據(jù)封裝器。
返回結(jié)果如下。
has_foreign_data_wrapper_privilege ------------------------------------ t
HAS_FUNCTION_PRIVILEGE
描述:確認(rèn)當(dāng)前用戶或指定用戶是否有指定函數(shù)的特定權(quán)限。
has_function_privilege([user, ]function, privilege)
參數(shù)說(shuō)明
user:可選,賬號(hào)名稱(chēng)或賬號(hào)ID。
function:必填,函數(shù)名稱(chēng)。
privilege:必填,權(quán)限類(lèi)型,也可以用逗號(hào)分隔列出的多個(gè)權(quán)限類(lèi)型。取值為:EXECUTE。
返回值說(shuō)明
返回BOOLEAN類(lèi)型,若當(dāng)前用戶或指定用戶有指定函數(shù)的操作權(quán)限,則返回true(t);反之返回false(f)。
示例
SELECT has_function_privilege('now()', 'EXECUTE');
返回結(jié)果如下。
has_function_privilege ------------------------ t
HAS_LANGUAGE_PRIVILEGE
描述:確認(rèn)當(dāng)前用戶或指定用戶是否有指定語(yǔ)言的特定權(quán)限。
HAS_LANGUAGE_PRIVILEGE([user, ]language, privilege)
參數(shù)說(shuō)明
user:可選,賬號(hào)名稱(chēng)或賬號(hào)ID。
language:必填,語(yǔ)言名稱(chēng)。
privilege:必填,權(quán)限類(lèi)型,也可以用逗號(hào)分隔列出的多個(gè)權(quán)限類(lèi)型。取值為:USAGE。
返回值說(shuō)明
返回BOOLEAN類(lèi)型,若當(dāng)前用戶或指定用戶有語(yǔ)言權(quán)限,則返回true(t);反之返回false(f)。
示例
SELECT HAS_LANGUAGE_PRIVILEGE('plpgsql', 'USAGE');
返回結(jié)果如下。
has_language_privilege ------------------------ t
HAS_SCHEMA_PRIVILEGE
描述:確認(rèn)當(dāng)前用戶或指定用戶是否有指定的Schema的特定權(quán)限。
HAS_SCHEMA_PRIVILEGE([user, ]schema, privilege)
參數(shù)說(shuō)明
user:可選,賬號(hào)名稱(chēng)或賬號(hào)ID。
schema:必填,Schema名稱(chēng)。
privilege:必填,權(quán)限類(lèi)型,也可以用逗號(hào)分隔列出的多個(gè)權(quán)限類(lèi)型。取值為:CREATE、USAGE。
返回值說(shuō)明
返回BOOLEAN類(lèi)型,若當(dāng)前用戶或指定用戶有指定的Schema權(quán)限,則返回true(t);反之返回false(f)。
示例
SELECT HAS_SCHEMA_PRIVILEGE('public', 'CREATE,USAGE');
返回結(jié)果如下。
has_schema_privilege ---------------------- t
HAS_SERVER_PRIVILEGE
描述:確認(rèn)當(dāng)前用戶或指定用戶是否有指定外部服務(wù)器的特定權(quán)限。
HAS_SERVER_PRIVILEGE([user, ]server, privilege)
參數(shù)說(shuō)明
user:可選,賬號(hào)名稱(chēng)或賬號(hào)ID。
server:必填,外部服務(wù)器名稱(chēng)。
privilege:必填,權(quán)限類(lèi)型,也可以用逗號(hào)分隔列出的多個(gè)權(quán)限類(lèi)型。取值為:USAGE。
返回值說(shuō)明
返回BOOLEAN類(lèi)型,若當(dāng)前用戶或指定用戶有外部服務(wù)器的權(quán)限,則返回true(t);反之返回false(f)。
示例
SELECT HAS_SERVER_PRIVILEGE('meta_warehouse_server', 'USAGE');
返回結(jié)果如下。
has_server_privilege ---------------------- t
HAS_TABLE_PRIVILEGE
描述:確認(rèn)當(dāng)前用戶或指定用戶是否有指定表的特定權(quán)限。
HAS_TABLE_PRIVILEGE([user, ]table, privilege)
參數(shù)說(shuō)明
user:可選,賬號(hào)名稱(chēng)或賬號(hào)ID。
table:必填,表名稱(chēng)。
privilege:必填,權(quán)限類(lèi)型,也可以用逗號(hào)分隔列出的多個(gè)權(quán)限類(lèi)型。取值為:SELECT、INSERT、UPDATE、DELETE、TRUNCATE。
返回值說(shuō)明
返回BOOLEAN類(lèi)型,若當(dāng)前用戶或指定用戶有指定表的操作權(quán)限,則返回true(t);反之返回false(f)。
示例
SELECT HAS_TABLE_PRIVILEGE('test', 'SELECT,INSERT');
返回結(jié)果如下。
has_table_privilege --------------------- t
HAS_TABLESPACE_PRIVILEGE
描述:確認(rèn)當(dāng)前用戶或指定用戶是否有指定表空間的特定權(quán)限。
HAS_TABLESPACE_PRIVILEGE([user, ]tablespace, privilege)
參數(shù)說(shuō)明
user:可選,賬號(hào)名稱(chēng)或賬號(hào)ID。
tablespace:必填,表空間名稱(chēng)。
privilege:必填,權(quán)限類(lèi)型,也可以用逗號(hào)分隔列出的多個(gè)權(quán)限類(lèi)型。取值為:CREATE。
返回值說(shuō)明
返回BOOLEAN類(lèi)型,若當(dāng)前用戶或指定用戶有表空間權(quán)限,則返回true(t);反之返回false(f)。
示例
SELECT HAS_TABLESPACE_PRIVILEGE('pg_default', 'CREATE');
返回結(jié)果如下。
has_table_privilege --------------------- t
HAS_TYPE_PRIVILEGE
描述:確認(rèn)當(dāng)前用戶或指定用戶是否有特定類(lèi)型(?如表、?視圖、?序列等)?的特定權(quán)限。
HAS_TYPE_PRIVILEGE([user, ]type, privilege)
參數(shù)說(shuō)明
user:可選,賬號(hào)名稱(chēng)或賬號(hào)ID。
type:必填,類(lèi)型名稱(chēng)。
privilege:必填,權(quán)限類(lèi)型,也可以用逗號(hào)分隔列出的多個(gè)權(quán)限類(lèi)型。
返回值說(shuō)明
返回BOOLEAN類(lèi)型,若當(dāng)前用戶或指定用戶有特定類(lèi)型(?如表、?視圖、?序列等)?的權(quán)限,則返回true(t);反之返回false(f)。
示例
SELECT HAS_TYPE_PRIVILEGE('test', 'USAGE');
返回結(jié)果如下。
has_type_privilege -------------------- t