全部產品
Search
文件中心

Hologres:帳號和許可權管理函數

更新時間:Nov 16, 2024

本文介紹Hologres支援的帳號和許可權管理函數。

類型

函數

功能

帳號管理函數

HG_DISPLAY_NAME_TO_ID

將郵箱形式或RAM形式的阿里雲帳號轉換為阿里雲帳號ID。

USER_DISPLAY_NAME

將阿里雲帳號ID轉換為郵箱形式或RAM形式的阿里雲帳號。

授權函數

APPLY_PRIVILEGES

用於在專家許可權模型下,將源表給使用者授與權限複製到目標表,目標表保持與源表一致的許可權。

許可權查詢函數

HAS_ANY_COLUMN_PRIVILEGE

確認目前使用者或指定使用者是否有指定表的任意列的特定許可權。

HAS_COLUMN_PRIVILEGE

確認目前使用者是否有指定列的特定許可權。

HAS_DATABASE_PRIVILEGE

確認目前使用者或指定使用者是否有指定資料庫的特定許可權。

HAS_FOREIGN_DATA_WRAPPER_PRIVILEGE

確認目前使用者或指定使用者是否有外部資料封裝器的特定許可權。

HAS_FUNCTION_PRIVILEGE

確認目前使用者或指定使用者是否有指定函數的特定許可權。

HAS_LANGUAGE_PRIVILEGE

確認目前使用者或指定使用者是否有指定語言的特定許可權。

HAS_SCHEMA_PRIVILEGE

確認目前使用者或指定使用者是否有指定的Schema的特定許可權。

HAS_SERVER_PRIVILEGE

確認目前使用者或指定使用者是否有指定外部伺服器的特定許可權。

HAS_TABLE_PRIVILEGE

確認目前使用者或指定使用者是否有指定表的特定許可權。

HAS_TABLESPACE_PRIVILEGE

確認目前使用者或指定使用者是否有指定資料表空間的特定許可權。

HAS_TYPE_PRIVILEGE

確認目前使用者或指定使用者是否有特定類型(‌如表、‌視圖、‌序列等)‌的特定許可權。

帳號管理函數

USER_DISPLAY_NAME

  • 描述:將阿里雲帳號ID轉換為郵箱形式或RAM形式的阿里雲帳號。

    SELECT USER_DISPLAY_NAME (user_name);
  • 參數說明

    user_name:必填,阿里雲帳號ID。通常為數字形式,例如13532241323xxx或RAM使用者p4_23402030200xxx

  • 傳回值說明

    傳回值為郵箱形式或RAM形式的阿里雲帳號,例如xx@aliyun.comRAM$mainaccount:subuserRAM$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.comRAM$mainaccount:subuserRAM$public

  • 傳回值說明

    傳回值為阿里雲帳號ID,通常為數字形式,例如13532241323xxxp4_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 LIKEINSERT 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