日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

專家權限模型

Hologres兼容PostgreSQL,采用與標準PostgreSQL語句相同的授權體系(簡稱專家模式)。本文為您介紹Hologres如何使用專家權限模型對用戶授權及撤銷授權。

專家權限模型授權

在Hologres實例連接開發工具后,可以使用SQL語句通過專家權限模型授權,使該用戶具有實例的相關權限。

  1. 創建用戶。

    一個賬號必須先被創建成為Hologres的用戶,才能訪問Hologres并進行開發。

    創建用戶的語句格式如下:

    --創建具有登錄Hologres實例權限的用戶,如果是為RAM用戶授權,賬號格式請使用RAM用戶的表達格式。
    CREATE USER "云賬號ID/云郵箱"; 
    --創建用戶并授予Superuser權限。
    CREATE USER "云賬號ID/云郵箱" SUPERUSER;

    您可以參照如下示例創建用戶,其中更多關于阿里云賬號和RAM用戶的格式說明,請參見賬號概述

    --使用阿里云賬號ID創建用戶。
    CREATE USER "11822780xxx";
    --授予RAM用戶Superuser權限。
    CREATE USER "p4_1822780xxx" SUPERUSER; 

    更多關于創建角色的說明,請參見CREATE ROLE

  2. 授予權限。

    將賬號創建為Hologres的用戶后,您需要授予用戶一定的權限,該用戶才能在權限范圍內使用Hologres。在專家權限模型下可以控制用戶在數據庫、表、視圖、列級別的權限。Hologres中常用的授權操作如下表所示。

    說明

    目前專家模式只能對現有實例對象進行授權,對授權后創建的內容不生效。例如,用戶A對用戶B授予了public schema中所有表的查看權限。當用戶A創建一張新表,則用戶B不具有對這張表的查看權限,需要重新授權。

    權限描述

    語法示例

    是否必須

    創建具有登錄Hologres實例權限的用戶

    CREATE USER "云賬號/云郵箱";

    創建用戶并授予用戶Superuser的權限

    CREATE USER "云賬號/云郵箱" SUPERUSER ;

    可選

    授予在Schema下創建表的權限

    GRANT CREATE ON SCHEMA schema_name  TO "云賬號/云郵箱";

    可選

    授予Schema訪問權限

    GRANT USAGE ON SCHEMA schema_name  TO "云賬號/云郵箱";

    必須

    說明

    必須授予Schema的訪問權限才能有表的查詢權限。

    授予所有用戶public schema中所有表的查看、寫入、及修改權限

    GRANT SELECT,INSERT,UPDATE ON ALL TABLES IN SCHEMA public to PUBLIC;

    可選

    授予用戶某個表的SELECT權限

    GRANT SELECT ON TABLE <tablename> TO "云賬號/云郵箱";

    可選

    授予用戶某個表的SELECT權限,并允許該用戶授予此權限給其他用戶

    GRANT SELECT ON TABLE <tablename> TO "云賬號/云郵箱" WITH GRANT OPTION;

    可選

    授予用戶public schema中所有表的SELECT權限

    GRANT SELECT ON ALL TABLES IN SCHEMA public TO "云賬號/云郵箱";

    可選

    設置當前授權人在publicSchema下創建的未來表對所有人可讀。

    ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO PUBLIC;

    可選

    修改普通用戶為Superuser

    ALTER USER "云賬號/云郵箱" SUPERUSER;

    可選

    修改Superuser為普通用戶

    ALTER USER "云賬號/云郵箱" NOSUPERUSER;

    可選

    授予其他用戶表的Owner權限

    ALTER TABLE <tablename> OWNER TO "云賬號/云郵箱";

    可選

    創建沒有登錄Hologres實例權限的角色

    CREATE ROLE "云賬號/云郵箱";

    可選

    授予某個用戶某個角色的權限

    GRANT <rolename> TO "云賬號/云郵箱" ;

    可選

    授予某個用戶某個表的某些列的查詢權限

    GRANT SELECT (<column1>,<column2>,<column3>,...) ON TABLE <tablename> TO "云賬號/云郵箱" ;

    可選

    授予某個用戶某個視圖的查詢權限

    說明
    • 專家權限模型下訪問視圖需要授予視圖的查詢權限。

    • SPM/SLPM權限模型下訪問視圖需要有viewer及以上用戶組的權限。

    --專家權限模型給某個用戶授予view的查詢權限 
    GRANT SELECT ON <viewname> TO "云賬號/云郵箱" ;

    可選

    在專家模型下,您可以參照以下示例給一個新用戶授予某張表的查詢權限。

    CREATE USER "云賬號/云郵箱";
    GRANT USAGE ON SCHEMA <schema_name>  TO "云賬號/云郵箱";
    GRANT SELECT ON TABLE <tablename> TO "云賬號/云郵箱";

    CREATE ROLE用于創建沒有登錄Hologres實例權限的角色,例如代表一類具體用戶的用戶組或虛擬角色等。更多關于權限的授予的說明,請參見GRANT

  3. 刪除表。

    只有Superuser或表Owner才可以刪除表。您可以使用如下幾種方法授予某個用戶或多個用戶刪除表的權限:

    • 替換新用戶為表的Owner。

      ALTER TABLE TABLENAME OWNER TO "云賬號/云郵箱";
    • 授予新用戶Superuser權限。

      ALTER USER "云賬號/云郵箱" SUPERUSER;
    • 添加多個用戶至用戶組并授予表Owner權限。

      CREATE USER "云賬號ID/云郵箱";
      CREATE ROLE <rolename>;
      GRANT <rolename> TO "云賬號/云郵箱";
      ALTER TABLE <tablename> OWNER TO <rolename>;

未來表授權

由于專家模式授權不包含對未來表的授權,因此需要使用ALTER DEFAULT PRIVILEGES語句對未來表進行授權。具體操作步驟如下:

說明
  • 該命令語句不影響已有的邏輯對象。

  • 該命令語句只能設置TABLE、SCHEMA、FUNCTION、SEQUENCE或TYPE的默認權限。

  1. 授權。

    • 默認執行授權語句的人,在某個Schema下新建的表對所有人或指定人進行查詢。示例語句如下。

      • 執行授權的人在public schema下,新建的表可以被子賬號p4_123xxx查詢。

        ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO "p4_123xxx";
      • 執行授權的人在test schema下,新建的表可以被子賬號p4_123xxx查詢。

        ALTER DEFAULT PRIVILEGES IN SCHEMA test GRANT SELECT ON TABLES TO "p4_123xxx";
      • 執行授權的人在public schema下,新建的表可以被所有人查詢。

        ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO PUBLIC;
    • 默認授權后,其他人新建表時可被指定所有人或指定人進行查詢。示例語句如下。

      • 授權后,p4_id1新建的表可以被public schema下的所有用戶訪問。

        ALTER DEFAULT PRIVILEGES FOR ROLE "p4_id1" IN SCHEMA public GRANT SELECT ON TABLES TO PUBLIC;
      • 授權后,p4_id1新建的表可以被public schema下的子賬號p4_id2訪問。

        ALTER DEFAULT PRIVILEGES FOR ROLE "p4_id1" IN SCHEMA public GRANT SELECT ON TABLES TO "p4_id2";
      • 授權后,p4_id1新建的表可以被test schema下的所有用戶訪問。

        ALTER DEFAULT PRIVILEGES FOR ROLE "p4_id1" IN SCHEMA test GRANT SELECT ON TABLES TO PUBLIC;
    • 撤銷設置的默認授權,有的場景您需要撤銷您設置的默認授權,示例語句如下。

      --撤銷執行授權的人在public schema下未來新建的表可以被子賬號p4_123xxx查詢的默認授權
      ALTER DEFAULT PRIVILEGES IN SCHEMA public REVOKE SELECT ON TABLES FROM "p4_123xxx";
      
      --撤銷執行授權的人在test schema下未來新建的表可以被子賬號p4_123xxx查詢的默認授權
      ALTER DEFAULT PRIVILEGES IN SCHEMA test REVOKE SELECT ON TABLES FROM "p4_123xxx";
      
      --撤銷執行授權的人在public schema下未來新建的表可以被所有人查詢的默認授權
      ALTER DEFAULT PRIVILEGES IN SCHEMA public REVOKE SELECT ON TABLES FROM PUBLIC;
  2. 查看默認權限是否設置成功。

    • 使用\ddp命令在Psql客戶端查看ALTER DEFAULT PRIVILEGES是否設置成功。

    • 使用如下SQL命令在Hologres中直接查詢。

      SELECT pg_catalog.pg_get_userbyid(d.defaclrole) AS "Owner",
        n.nspname AS "Schema",
        CASE d.defaclobjtype WHEN 'r' THEN 'table' WHEN 'S' THEN 'sequence' WHEN 'f' THEN 'function' WHEN 'T' THEN 'type' WHEN 'n' THEN 'schema' END AS "Type",
        pg_catalog.array_to_string(d.defaclacl, E'\n') AS "Access privileges"
      FROM pg_catalog.pg_default_acl d
           LEFT JOIN pg_catalog.pg_namespace n ON n.oid = d.defaclnamespace
      ORDER BY 1, 2, 3;

    創建新表時,Hologres會使用當前用戶和模式去匹配系統表pg_catalog.pg_default_acl。如果檢查到匹配項ALTER DEFAULT PRIVILEGES,則為用戶添加匹配項規則。當前用戶說明如下:

    • 如果當前用戶是User,則創建表時使用User進行匹配。

    • 如果用戶User創建表之前執行了SET SESSION ROLE GROUP1;語句,此時當前用戶就變為GROUP1,則創建表時使用GROUP1進行匹配。

    匹配規則只在創建表時執行,在創建表之后執行ALTER TABLE SET OWNER TO語句修改表Owner,不會觸發對應匹配項規則。

專家模式撤銷授權

使用REVOKE語句撤銷用戶權限的示例如下,更多關于權限的撤銷操作,請參見REVOKE

REVOKE SELECT ON TABLE tablename FROM "云賬號ID/云郵箱" ; --如果是RAM用戶,賬號格式請使用RAM用戶的表達格式。

查看權限

通過以下SQL命令查看用戶的角色及權限。

SELECT ROLNAME FROM pg_roles;
SELECT user_display_name(ROLNAME) FROM pg_roles;

刪除用戶

若您的實例已經連接開發工具,您可以使用SQL語句進行刪除子賬號,分為如下兩種情況。

  • 刪除普通用戶

    如果是刪除普通用戶,并且該賬號沒有創建其他對象(如表、視圖、extension等),可以執行以下命令語句或者直接在HoloWeb刪除用戶。

    drop user "云賬號ID/云郵箱";
  • 刪除Superuser等管理員

    若是要刪除Superuser、Admin等管理員,但是該賬號創建過表、視圖、extension等實例內對象,并且是這些對象的管理員(尤其是專家權限模型下),若是直接刪除用戶會報錯,需要先將該賬號下的對象進行轉移,執行以下命令語句。

    -- 將A賬號下的對象轉給B
    reassign owned by "A云賬號ID" to "B云賬號ID";     
    -- 刪除A賬號
    drop user "A云賬號ID";

您可以使用以下方式刪除實例中的RAM用戶:

DROP USER "云賬號ID/云郵箱";
重要

RAM用戶被刪除后,將不能連接實例并訪問實例內的任何對象,請您謹慎操作。

標準的PostgreSQL對于權限有著非常嚴格的劃分,對此我們提供最佳實踐供您根據業務需求選擇和參考,詳情請參見基于PostgreSQL標準權限模型授權