View a markdown version of this page

教學課程:使用 RBAC 建立角色並進行查詢 - Amazon Redshift

Amazon Redshift 將不再支援在 2026 年 6 月 30 日之後使用 Python UDFs。我們將開始分階段強制執行。如需 Python 生命週期結束和遷移選項的詳細資訊,請參閱 2025 年 6 月 30 日發佈的部落格文章。

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

教學課程:使用 RBAC 建立角色並進行查詢

透過 RBAC,您可以建立具有許可的角色,使其可執行過去需要超級使用者許可的命令。使用者只要獲得包含這些許可的角色授權,就可以執行這些命令。

在本教學課程中,您會使用角色型存取控制 (RBAC) 來管理您在資料庫中建立的許可。然後您會連線到資料庫,並透過兩個不同的角色查詢資料庫,以測試 RBAC 的功能。

您建立並用來查詢資料庫的兩個角色為 sales_ro 和 sales_rw。您以具有 sales_ro 角色的使用者身分建立 sales_ro 角色並查詢資料。sales_ro 使用者只能使用 SELECT 命令,而無法使用 UPDATE 命令。然後,您以具有 sales_rw 角色的使用者身分建立 sales_rw 角色並查詢資料。sales_rw 使用者可使用 SELECT 命令和 UPDATE 命令。

此外,您可以建立角色來限制對某些命令的存取,並將角色指派給超級使用者或使用者。

工作

先決條件

步驟 1:建立管理員使用者

若要針對本教學課程進行設定,請建立資料庫管理員角色,並在此步驟中將其附加至資料庫管理員使用者。您必須以超級使用者或角色管理員的身分建立資料庫管理員。

在 Amazon Redshift 查詢編輯器 v2 中執行所有查詢。

  1. 若要建立管理員角色 db_admin,請使用下列範例。

    CREATE ROLE db_admin;
  2. 若要建立名為 dbadmin 的資料庫使用者,請使用下列範例。

    CREATE USER dbadmin PASSWORD 'Test12345';
  3. 若要將名為 sys:dba 的系統定義角色授予 db_admin 角色,請使用下列範例。獲得授予的 sys:dba 角色後,dbadmin 使用者就可以建立結構描述和資料表。如需詳細資訊,請參閱Amazon Redshift 系統定義角色。

步驟 2:設定結構描述

在此步驟中,您會以資料庫管理員的身分連線至資料庫。然後您會建立兩個結構描述,並在其中新增資料。

  1. 使用查詢編輯器 v2 以 dbadmin 使用者身分連線至 dev 資料庫。如需連線至資料庫的詳細資訊,請參閱使用查詢編輯器 v2。

  2. 若要建立銷售和行銷資料庫結構描述,請使用下列範例。

    CREATE SCHEMA sales; CREATE SCHEMA marketing;
  3. 若要在銷售結構描述的資料表中建立和插入值,請使用下列範例。

    CREATE TABLE sales.cat( catid smallint, catgroup varchar(10), catname varchar(10), catdesc varchar(50) ); INSERT INTO sales.cat(SELECT * FROM category); CREATE TABLE sales.dates( dateid smallint, caldate date, day char(3), week smallint, month char(5), qtr char(5), year smallint, holiday boolean ); INSERT INTO sales.dates(SELECT * FROM date); CREATE TABLE sales.events( eventid integer, venueid smallint, catid smallint, dateid smallint, eventname varchar(200), starttime timestamp ); INSERT INTO sales.events(SELECT * FROM event); CREATE TABLE sales.sale( salesid integer, listid integer, sellerid integer, buyerid integer, eventid integer, dateid smallint, qtysold smallint, pricepaid decimal(8,2), commission decimal(8,2), saletime timestamp ); INSERT INTO sales.sale(SELECT * FROM sales);
  4. 若要在行銷結構描述的資料表中建立和插入值,請使用下列範例。

    CREATE TABLE marketing.cat( catid smallint, catgroup varchar(10), catname varchar(10), catdesc varchar(50) ); INSERT INTO marketing.cat(SELECT * FROM category); CREATE TABLE marketing.dates( dateid smallint, caldate date, day char(3), week smallint, month char(5), qtr char(5), year smallint, holiday boolean ); INSERT INTO marketing.dates(SELECT * FROM date); CREATE TABLE marketing.events( eventid integer, venueid smallint, catid smallint, dateid smallint, eventname varchar(200), starttime timestamp ); INSERT INTO marketing.events(SELECT * FROM event); CREATE TABLE marketing.sale( marketingid integer, listid integer, sellerid integer, buyerid integer, eventid integer, dateid smallint, qtysold smallint, pricepaid decimal(8,2), commission decimal(8,2), saletime timestamp ); INSERT INTO marketing.sale(SELECT * FROM marketing);

步驟 3:建立唯讀使用者

在此步驟中,您會建立唯讀角色並為該唯讀角色建立 salesanalyst 使用者。銷售分析師只需要以唯讀方式存取銷售結構描述中的資料表,即可完成尋找產生最高佣金事件的指派任務。

  1. 以 dbadmin 使用者身分連線至資料庫。

  2. 若要建立 sales_ro 角色,請使用下列範例。

    CREATE ROLE sales_ro;
  3. 若要建立 salesanalyst 使用者,請使用下列範例。

    CREATE USER salesanalyst PASSWORD 'Test12345';
  4. 若要對 sales_ro 角色授予使用和選取銷售結構描述之物件的權限,請使用下列範例。

    GRANT USAGE ON SCHEMA sales TO ROLE sales_ro; GRANT SELECT ON ALL TABLES IN SCHEMA sales TO ROLE sales_ro;
  5. 若要對 salesanalyst 使用者授予 sales_ro 角色,請使用下列範例。

    GRANT ROLE sales_ro TO salesanalyst;

步驟 4:以唯讀使用者身分查詢資料

在此步驟中,salesanalyst 使用者會查詢銷售結構描述中的資料。然後 salesanalyst 使用者會嘗試更新行銷結構描述中的資料表和讀取資料表。

  1. 以 salesanalyst 使用者身分連線至資料庫。

  2. 若要尋找佣金最高的 10 筆銷售,請使用下列範例。

    SET SEARCH_PATH TO sales; SELECT DISTINCT events.dateid, sale.commission, cat.catname FROM sale, events, dates, cat WHERE events.dateid=dates.dateid AND events.dateid=sale.dateid AND events.catid = cat.catid ORDER BY 2 DESC LIMIT 10; +--------+------------+----------+ | dateid | commission | catname | +--------+------------+----------+ | 1880 | 1893.6 | Pop | | 1880 | 1893.6 | Opera | | 1880 | 1893.6 | Plays | | 1880 | 1893.6 | Musicals | | 1861 | 1500 | Plays | | 2003 | 1500 | Pop | | 1861 | 1500 | Opera | | 2003 | 1500 | Plays | | 1861 | 1500 | Musicals | | 1861 | 1500 | Pop | +--------+------------+----------+
  3. 若要從銷售結構描述中的事件資料表選取 10 個事件,請使用下列範例。

    SELECT * FROM sales.events LIMIT 10; +---------+---------+-------+--------+--------------------+---------------------+ | eventid | venueid | catid | dateid | eventname | starttime | +---------+---------+-------+--------+--------------------+---------------------+ | 4836 | 73 | 9 | 1871 | Soulfest | 2008-02-14 19:30:00 | | 5739 | 41 | 9 | 1871 | Fab Faux | 2008-02-14 19:30:00 | | 627 | 229 | 6 | 1872 | High Society | 2008-02-15 14:00:00 | | 2563 | 246 | 7 | 1872 | Hamlet | 2008-02-15 20:00:00 | | 7703 | 78 | 9 | 1872 | Feist | 2008-02-15 14:00:00 | | 7903 | 90 | 9 | 1872 | Little Big Town | 2008-02-15 19:30:00 | | 7925 | 101 | 9 | 1872 | Spoon | 2008-02-15 19:00:00 | | 8113 | 17 | 9 | 1872 | Santana | 2008-02-15 15:00:00 | | 463 | 303 | 8 | 1873 | Tristan und Isolde | 2008-02-16 19:00:00 | | 613 | 236 | 6 | 1873 | Pal Joey | 2008-02-16 15:00:00 | +---------+---------+-------+--------+--------------------+---------------------+
  4. 若要嘗試更新 eventid 1 的 eventname,請執行下列範例。此範例將導致許可遭拒錯誤,因為 salesanalyst 使用者對銷售結構描述中的事件資料表只擁有 SELECT 許可。若要更新事件資料表,您必須對 sales_ro 角色授予 UPDATE 許可。如需授予更新資料表之許可的詳細資訊,請參閱 GRANT 的 UPDATE 參數。如需 UPDATE 命令的詳細資訊,請參閱 UPDATE。

    UPDATE sales.events SET eventname = 'Comment event' WHERE eventid = 1; ERROR: permission denied for relation events
  5. 若要嘗試從行銷結構描述的事件資料表中選取所有內容,請使用下列範例。此範例將導致許可遭拒錯誤,因為 salesanalyst 使用者對銷售結構描述中的事件資料表只具有 SELECT 許可。若要從行銷結構描述的事件資料表中選取資料,您必須對 sales_ro 角色授予行銷結構描述中事件資料表的 SELECT 許可。

    SELECT * FROM marketing.events; ERROR: permission denied for schema marketing

步驟 5:建立讀寫使用者

在此步驟中,負責在銷售結構描述中建置擷取、轉換和載入 (ETL) 管道以進行資料處理的銷售工程師將擁有唯讀存取權,但稍後會授予讀取和寫入存取權讓他們能夠執行任務。

  1. 以 dbadmin 使用者身分連線至資料庫。

  2. 若要在銷售結構描述中建立 sales_rw 角色,請使用下列範例。

    CREATE ROLE sales_rw;
  3. 若要建立 salesengineer 使用者,請使用下列範例。

    CREATE USER salesengineer PASSWORD 'Test12345';
  4. 若要藉由指派 sales_ro 角色的方式,對 sales_rw 角色授予使用和選取銷售結構描述之物件的權限,請使用下列範例。如需了解在 Amazon Redshift 中,角色如何繼承許可的詳細資訊,請參閱 角色階層。

    GRANT ROLE sales_ro TO ROLE sales_rw;
  5. 若要對 salesengineer 使用者授予 sales_rw 角色,請使用下列範例。

    GRANT ROLE sales_rw TO salesengineer;

步驟 6:以具有繼承唯讀角色的使用者身分查詢資料

在此步驟中,salesengineer 使用者會在獲得讀取許可之前,嘗試更新事件資料表。

  1. 以 salesengineer 使用者身分連線至資料庫。

  2. salesengineer 使用者可以從銷售結構描述的事件資料表成功讀取資料。若要從銷售結構描述中的事件資料表選取 eventid 1 的事件,請使用下列範例。

    SELECT * FROM sales.events where eventid=1; +---------+---------+-------+--------+-----------------+---------------------+ | eventid | venueid | catid | dateid | eventname | starttime | +---------+---------+-------+--------+-----------------+---------------------+ | 1 | 305 | 8 | 1851 | Gotterdammerung | 2008-01-25 14:30:00 | +---------+---------+-------+--------+-----------------+---------------------+
  3. 若要嘗試從行銷結構描述的事件資料表中選取所有內容,請使用下列範例。salesengineer 使用者未具備行銷結構描述中資料表的許可,因此這個查詢會導致許可遭拒錯誤。若要從行銷結構描述的事件資料表中選取資料,您必須對 sales_rw 角色授予行銷結構描述中事件資料表的 SELECT 許可。

    SELECT * FROM marketing.events; ERROR: permission denied for schema marketing
  4. 若要嘗試更新 eventid 1 的 eventname,請執行下列範例。此範例將導致許可遭拒錯誤,因為 salesengineer 使用者對銷售結構描述中的事件資料表只擁有選取許可。若要更新事件資料表,您必須對 sales_rw 角色授予 UPDATE 許可。

    UPDATE sales.events SET eventname = 'Comment event' WHERE eventid = 1; ERROR: permission denied for relation events

步驟 7:對讀寫角色授予更新和插入許可

在此步驟中,您會對 sales_rw 角色授予更新和插入許可。

  1. 以 dbadmin 使用者身分連線至資料庫。

  2. 若要對 sales_rw 角色授予 UPDATE、INSERT 和 DELETE 許可,請使用下列範例。

    GRANT UPDATE, INSERT, ON ALL TABLES IN SCHEMA sales TO role sales_rw;

步驟 8:以讀寫使用者身分查詢資料

在此步驟中,salesengineer 會在其角色獲得插入和更新許可後,成功更新資料表。接下來,salesengineer 會嘗試分析和清空事件資料表,但是會失敗。

  1. 以 salesengineer 使用者身分連線至資料庫。

  2. 若要更新 eventid 1 的 eventname,請執行下列範例。

    UPDATE sales.events SET eventname = 'Comment event' WHERE eventid = 1;
  3. 若要檢視先前查詢中所做的變更,請使用下列範例從銷售結構描述中的事件資料表選取 eventid 1 的事件。

    SELECT * FROM sales.events WHERE eventid=1; +---------+---------+-------+--------+---------------+---------------------+ | eventid | venueid | catid | dateid | eventname | starttime | +---------+---------+-------+--------+---------------+---------------------+ | 1 | 305 | 8 | 1851 | Comment event | 2008-01-25 14:30:00 | +---------+---------+-------+--------+---------------+---------------------+
  4. 若要分析銷售結構描述中更新的事件資料表,請使用下列範例。此範例將導致許可遭拒錯誤,因為 salesengineer 使用者未具備必要的許可,也不是銷售結構描述中事件資料表的擁有者。若要分析事件資料表,您必須使用 GRANT 命令,對 sales_rw 角色授予 ANALYZE 許可。如需 ANALYZE 命令的詳細資訊,請參閱 ANALYZE。

    ANALYZE sales.events; ERROR: skipping "events" --- only table or database owner can analyze
  5. 若要清空更新的事件資料表,請使用下列範例。此範例將導致許可遭拒錯誤,因為 salesengineer 使用者未具備必要的許可,也不是銷售結構描述中事件資料表的擁有者。若要清空事件資料表,您必須使用 GRANT 命令,對 sales_rw 角色授予 VACUUM 許可。如需 VACUUM 命令的詳細資訊,請參閱 VACUUM。

    VACUUM sales.events; ERROR: skipping "events" --- only table or database owner can vacuum it

步驟 9:以管理員使用者身分分析和清空資料庫中的資料表

在此步驟中,dbadmin 使用者會分析和清空所有資料表。使用者對此資料庫具有管理員許可,因此能夠執行這些命令。

  1. 以 dbadmin 使用者身分連線至資料庫。

  2. 若要分析銷售結構描述中的事件資料表,請使用下列範例。

    ANALYZE sales.events;
  3. 若要清空銷售結構描述中的事件資料表,請使用下列範例。

    VACUUM sales.events;
  4. 若要分析行銷結構描述中的事件資料表,請使用下列範例。

    ANALYZE marketing.events;
  5. 若要清空行銷結構描述中的事件資料表,請使用下列範例。

    VACUUM marketing.events;

步驟 10:以讀寫使用者身分截斷資料表

在此步驟中,salesengineer 使用者會嘗試截斷銷售結構描述中的事件資料表,但只有在 dbadmin 使用者對其授予截斷許可時才會成功。

  1. 以 salesengineer 使用者身分連線至資料庫。

  2. 若要嘗試從銷售結構描述的事件資料表中刪除所有列,請使用下列範例。此範例將導致錯誤,因為 salesengineer 使用者未具備必要的許可,也不是銷售結構描述中事件資料表的擁有者。若要截斷事件資料表,您必須使用 GRANT 命令,對 sales_rw 角色授予 TRUNCATE 許可。如需 TRUNCATE 命令的相關資訊,請參閱 TRUNCATE。

    TRUNCATE sales.events; ERROR: must be owner of relation events
  3. 以 dbadmin 使用者身分連線至資料庫。

  4. 若要對 sales_rw 角色授予截斷資料表權限,請使用下列範例。

    GRANT TRUNCATE TABLE TO role sales_rw;
  5. 使用查詢編輯器 v2 以 salesengineer 使用者身分連線至資料庫。

  6. 若要從銷售結構描述中的事件資料表讀取前 10 個事件,請使用下列範例。

    SELECT * FROM sales.events ORDER BY eventid LIMIT 10; +---------+---------+-------+--------+-----------------------------+---------------------+ | eventid | venueid | catid | dateid | eventname | starttime | +---------+---------+-------+--------+-----------------------------+---------------------+ | 1 | 305 | 8 | 1851 | Comment event | 2008-01-25 14:30:00 | | 2 | 306 | 8 | 2114 | Boris Godunov | 2008-10-15 20:00:00 | | 3 | 302 | 8 | 1935 | Salome | 2008-04-19 14:30:00 | | 4 | 309 | 8 | 2090 | La Cenerentola (Cinderella) | 2008-09-21 14:30:00 | | 5 | 302 | 8 | 1982 | Il Trovatore | 2008-06-05 19:00:00 | | 6 | 308 | 8 | 2109 | L Elisir d Amore | 2008-10-10 19:30:00 | | 7 | 309 | 8 | 1891 | Doctor Atomic | 2008-03-06 14:00:00 | | 8 | 302 | 8 | 1832 | The Magic Flute | 2008-01-06 20:00:00 | | 9 | 308 | 8 | 2087 | The Fly | 2008-09-18 19:30:00 | | 10 | 305 | 8 | 2079 | Rigoletto | 2008-09-10 15:00:00 | +---------+---------+-------+--------+-----------------------------+---------------------+
  7. 若要截斷銷售結構描述中的事件資料表,請使用下列範例。

    TRUNCATE sales.events;
  8. 若要從銷售結構描述中更新的事件資料表讀取資料,請使用下列範例。

    SELECT * FROM sales.events ORDER BY eventid LIMIT 10; +---------+---------+-------+--------+-----------------------------+---------------------+ | eventid | venueid | catid | dateid | eventname | starttime | +---------+---------+-------+--------+-----------------------------+---------------------+

建立行銷結構描述的唯讀和讀寫角色 (選用)

在此步驟中,您會建立行銷結構描述的唯讀和讀寫角色。

  1. 以 dbadmin 使用者身分連線至資料庫。

  2. 若要建立行銷結構描述的唯讀和讀寫角色,請使用下列範例。

    CREATE ROLE marketing_ro; CREATE ROLE marketing_rw; GRANT USAGE ON SCHEMA marketing TO ROLE marketing_ro, ROLE marketing_rw; GRANT SELECT ON ALL TABLES IN SCHEMA marketing TO ROLE marketing_ro; GRANT ROLE marketing_ro TO ROLE marketing_rw; GRANT INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA marketing TO ROLE marketing_rw; CREATE USER marketinganalyst PASSWORD 'Test12345'; CREATE USER marketingengineer PASSWORD 'Test12345'; GRANT ROLE marketing_ro TO marketinganalyst; GRANT ROLE marketing_rw TO marketingengineer;

RBAC 的系統函式 (選用)

Amazon Redshift 有兩個函式,可提供有關其他群組或角色的使用者成員資格和角色成員資格的系統資訊:role_is_member_of 和 user_is_member_of。這些函式可供超級使用者和一般使用者使用。超級使用者可以查看所有角色成員資格。一般使用者只能查看本身可存取之角色的成員資格。

使用 role_is_member_of 函式

  1. 以 salesengineer 使用者身分連線至資料庫。

  2. 若要查看 sales_rw 角色是否為 sales_ro 角色的成員,請使用下列範例。

    SELECT role_is_member_of('sales_rw', 'sales_ro'); +-------------------+ | role_is_member_of | +-------------------+ | true | +-------------------+
  3. 若要查看 sales_ro 角色是否為 sales_rw 角色的成員,請使用下列範例。

    SELECT role_is_member_of('sales_ro', 'sales_rw'); +-------------------+ | role_is_member_of | +-------------------+ | false | +-------------------+

使用 user_is_member_of 函式

  1. 以 salesengineer 使用者身分連線至資料庫。

  2. 下列範例會嘗試查看 salesanalyst 使用者的使用者成員資格。此查詢會導致錯誤,因為 salesengineer 無法存取 salesanalyst。若要成功執行此命令,請以 salesanalyst 使用者身分連線至資料庫,然後使用此範例。

    SELECT user_is_member_of('salesanalyst', 'sales_ro'); ERROR
  3. 以超級使用者身分連線至資料庫。

  4. 若要在以超級使用者身分連線時查看 salesanalyst 使用者的成員資格,請使用下列範例。

    SELECT user_is_member_of('salesanalyst', 'sales_ro'); +-------------------+ | user_is_member_of | +-------------------+ | true | +-------------------+
  5. 以 dbadmin 使用者身分連線至資料庫。

  6. 若要查看 salesengineer 使用者的成員資格,請使用下列範例。

    SELECT user_is_member_of('salesengineer', 'sales_ro'); +-------------------+ | user_is_member_of | +-------------------+ | true | +-------------------+ SELECT user_is_member_of('salesengineer', 'marketing_ro'); +-------------------+ | user_is_member_of | +-------------------+ | false | +-------------------+ SELECT user_is_member_of('marketinganalyst', 'sales_ro'); +-------------------+ | user_is_member_of | +-------------------+ | false | +-------------------+

RBAC 的系統檢視 (選用)

若要透過角色檢視角色、將角色指派給使用者、角色階層和資料庫物件的權限,請使用 Amazon Redshift 的系統檢視。這些檢視可供超級使用者和一般使用者使用。超級使用者可以查看所有角色詳細資訊。一般使用者只能查看本身可存取之角色的詳細資訊。

  1. 若要檢視叢集中明確授予角色的使用者清單,請使用下列範例。

    SELECT * FROM svv_user_grants;
  2. 若要檢視叢集中明確授予角色的角色清單,請使用下列範例。

    SELECT * FROM svv_role_grants;

如需完整的系統檢視清單,請參閱 SVV 中繼資料檢視。

搭配 RBAC 使用資料列層級安全 (選用)

若要對敏感資料進行精細的存取控制,請使用資料列層級安全 (RLS)。如需 RLS 的詳細資訊,請參閱 資料列層級安全性。

在本節中,您會建立 RLS 政策以提供許可給 salesengineer 使用者,使其只能檢視 cat 資料表中 catdesc 值為 Major League Baseball 的列。然後您會以 salesengineer 使用者身分查詢資料庫。

  1. 以 salesengineer 使用者身分連線至資料庫。

  2. 若要檢視 cat 資料表中的前 5 個項目,請使用下列範例。

    SELECT * FROM sales.cat ORDER BY catid ASC LIMIT 5; +-------+----------+---------+---------------------------------+ | catid | catgroup | catname | catdesc | +-------+----------+---------+---------------------------------+ | 1 | Sports | MLB | Major League Baseball | | 2 | Sports | NHL | National Hockey League | | 3 | Sports | NFL | National Football League | | 4 | Sports | NBA | National Basketball Association | | 5 | Sports | MLS | Major League Soccer | +-------+----------+---------+---------------------------------+
  3. 以 dbadmin 使用者身分連線至資料庫。

  4. 若要為 cat 資料表中的 catdesc 欄建立 RLS 政策,請使用下列範例。

    CREATE RLS POLICY policy_mlb_engineer WITH (catdesc VARCHAR(50)) USING (catdesc = 'Major League Baseball');
  5. 若要將 RLS 政策連接至 sales_rw 角色,請使用下列範例。

    ATTACH RLS POLICY policy_mlb_engineer ON sales.cat TO ROLE sales_rw;
  6. 若要更改資料表以開啟 RLS,請使用下列範例。

    ALTER TABLE sales.cat ROW LEVEL SECURITY ON;
  7. 以 salesengineer 使用者身分連線至資料庫。

  8. 若要長式檢視 cat 資料表中的前 5 個項目,請使用下列範例。請注意,只有在 catdesc 欄為 Major League Baseball 時,才會顯示項目。

    SELECT * FROM sales.cat ORDER BY catid ASC LIMIT 5; +-------+----------+---------+-----------------------+ | catid | catgroup | catname | catdesc | +-------+----------+---------+-----------------------+ | 1 | Sports | MLB | Major League Baseball | +-------+----------+---------+-----------------------+
  9. 以 salesanalyst 使用者身分連線至資料庫。

  10. 若要長式檢視 cat 資料表中的前 5 個項目,請使用下列範例。請注意,不會顯示任何項目,因為已套用預設拒絕所有政策。

    SELECT * FROM sales.cat ORDER BY catid ASC LIMIT 5; +-------+----------+---------+-----------------------+ | catid | catgroup | catname | catdesc | +-------+----------+---------+-----------------------+
  11. 以 dbadmin 使用者身分連線至資料庫。

  12. 若要對 sales_ro 角色授予 IGNORE RLS 許可,請使用下列範例。這樣就會對 salesanalyst 使用者授予忽略 RLS 政策的許可,因為其為 sales_ro 角色的成員。

    GRANT IGNORE RLS TO ROLE sales_ro;
  13. 以 salesanalyst 使用者身分連線至資料庫。

  14. 若要檢視 cat 資料表中的前 5 個項目,請使用下列範例。

    SELECT * FROM sales.cat ORDER BY catid ASC LIMIT 5; +-------+----------+---------+---------------------------------+ | catid | catgroup | catname | catdesc | +-------+----------+---------+---------------------------------+ | 1 | Sports | MLB | Major League Baseball | | 2 | Sports | NHL | National Hockey League | | 3 | Sports | NFL | National Football League | | 4 | Sports | NBA | National Basketball Association | | 5 | Sports | MLS | Major League Soccer | +-------+----------+---------+---------------------------------+
  15. 以 dbadmin 使用者身分連線至資料庫。

  16. 若要撤銷 sales_ro 角色的 IGNORE RLS 許可,請使用下列範例。

    REVOKE IGNORE RLS FROM ROLE sales_ro;
  17. 以 salesanalyst 使用者身分連線至資料庫。

  18. 若要長式檢視 cat 資料表中的前 5 個項目,請使用下列範例。請注意,不會顯示任何項目,因為已套用預設拒絕所有政策。

    SELECT * FROM sales.cat ORDER BY catid ASC LIMIT 5; +-------+----------+---------+-----------------------+ | catid | catgroup | catname | catdesc | +-------+----------+---------+-----------------------+
  19. 以 dbadmin 使用者身分連線至資料庫。

  20. 若要從 cat 資料表分離 RLS 政策,請使用下列範例。

    DETACH RLS POLICY policy_mlb_engineer ON cat FROM ROLE sales_rw;
  21. 以 salesanalyst 使用者身分連線至資料庫。

  22. 若要長式檢視 cat 資料表中的前 5 個項目,請使用下列範例。請注意,不會顯示任何項目,因為已套用預設拒絕所有政策。

    SELECT * FROM sales.cat ORDER BY catid ASC LIMIT 5; +-------+----------+---------+---------------------------------+ | catid | catgroup | catname | catdesc | +-------+----------+---------+---------------------------------+ | 1 | Sports | MLB | Major League Baseball | | 2 | Sports | NHL | National Hockey League | | 3 | Sports | NFL | National Football League | | 4 | Sports | NBA | National Basketball Association | | 5 | Sports | MLS | Major League Soccer | +-------+----------+---------+---------------------------------+
  23. 以 dbadmin 使用者身分連線至資料庫。

  24. 若捨棄 RLS 政策,請使用下列範例。

    DROP RLS POLICY policy_mlb_engineer;
  25. 若要移除 RLS,請使用下列範例。

    ALTER TABLE cat ROW LEVEL SECURITY OFF;

如需 RBAC 的詳細資訊,請參閱下列文件: