チュートリアル: RBAC でのロールの作成とクエリ - Amazon Redshift

チュートリアル: RBAC でのロールの作成とクエリ

RBAC では、スーパーユーザーのアクセスが必要となるコマンドを実行するための、アクセス許可を持つロールを作成できます。これらの許可を含むロールで承認されているのであれば、ユーザーはこの種類のコマンドを実行できます。

このチュートリアルでは、作成するデータベースでアクセス許可を管理するのにロールベースのアクセスコントロール (RBAC) を使用できます。次に、データベースに接続し、2 つの異なるロールからデータベースにクエリを実行して RBAC の機能をテストします。

データベースをクエリするために作成して使用する 2 つのロールは sales_rosales_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: スキーマをセットアップする

このステップでは、データベース管理者としてデータベースに接続します。次に、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: 読み取り専用ユーザーを作成する

このステップでは、読み取り専用ロールとその読み取り専用ロールのセールスアナリストユーザーを作成します。セールスアナリストがコミッションが最も高かったイベントを検索するという割り当てられたタスクを実行するには、セールススキーマのテーブルへの読み取り専用アクセスのみが必要です。

  1. dbadmin ユーザーとしてデータベースに接続します。

  2. sales_ro ロールを作成するには、次の例を使用します。

    CREATE ROLE sales_ro;
  3. セールスアナリストユーザーを作成するには、次の例を使用します。

    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. セールスアナリストユーザーに sales_ro ロールを付与するには、次の例を使用します。

    GRANT ROLE sales_ro TO salesanalyst;

ステップ 4: 読み取り専用ユーザーとしてデータをクエリする

このステップでは、セールスアナリストユーザーがセールススキーマからデータをクエリします。次に、セールスアナリストユーザーはテーブルの更新とマーケティングスキーマのテーブルの読み取りを試みます。

  1. セールスアナリストユーザーとしてデータベースに接続します。

  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 のイベント名を更新するには、次の例を実行します。この例では、セールスアナリストユーザーはセールススキーマのイベントテーブルに対する 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. マーケティングスキーマでイベントテーブルからすべてを選択するには、次の例を使用します。この例では、セールスアナリストユーザーはセールススキーマのイベントテーブルに対する SELECT アクセス許可しか持っていないため、「アクセス許可が拒否されました」というエラーが発生します。マーケティングスキーマのイベントテーブルからデータを選択するには、マーケティングスキーマのイベントテーブルに対する SELECT アクセス許可を sales_ro ロールに付与する必要があります。

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

ステップ 5: 読み取り/書き込みユーザーを作成する

このステップでは、セールススキーマのデータ処理のための抽出、変換、ロード (ETL) パイプラインの構築を担当するセールスエンジニアに読み取り専用アクセスが与えられますが、タスクを実行するための読み取り/書き込みアクセスが後に付与されます。

  1. dbadmin ユーザーとしてデータベースに接続します。

  2. セールススキーマで sales_rw ロールを作成するには、次の例を使用します。

    CREATE ROLE sales_rw;
  3. セールスエンジニアユーザーを作成するには、次の例を使用します。

    CREATE USER salesengineer PASSWORD 'Test12345';
  4. sales_ro ロールを割り当てることで、sales_rw ロールにセールススキーマのオブジェクトの使用と選択のアクセス許可を付与するには、次の例を使用します。Amazon Redshift でロールがアクセス許可を継承する方法の詳細については、「ロール階層」を参照してください。

    GRANT ROLE sales_ro TO ROLE sales_rw;
  5. セールスエンジニアユーザーに sales_rw ロールを付与するには、次の例を使用します。

    GRANT ROLE sales_rw TO salesengineer;

ステップ 6: 継承された読み取り専用ロールのあるユーザーとしてデータをクエリする

このステップでは、セールスエンジニアユーザーが読み取りアクセス許可が付与される前にイベントテーブルを更新しようとします。

  1. セールスエンジニアユーザーとしてデータベースに接続します。

  2. セールスエンジニアユーザーは、セールススキーマのイベントテーブルからデータを正常に読み取ることができます。セールススキーマでイベントテーブルから 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. マーケティングスキーマでイベントテーブルからすべてを選択するには、次の例を使用します。セールスエンジニアユーザーにはマーケティングスキーマのテーブルに対するアクセス許可がないため、このクエリは結果としてアクセス許可拒否エラーになります。マーケティングスキーマのイベントテーブルからデータを選択するには、マーケティングスキーマのイベントテーブルに対する SELECT アクセス許可を sales_rw ロールに付与する必要があります。

    SELECT * FROM marketing.events; ERROR: permission denied for schema marketing
  4. eventid 1 のイベント名を更新するには、次の例を実行します。この例では、セールスエンジニアユーザーにはセールススキーマのイベントテーブルに対する選択アクセス許可しかないため、アクセス許可拒否エラーが発生します。イベントテーブルを更新するには、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: 読み取り/書き込みユーザーとしてデータをクエリする

このステップでは、各自のロールに挿入アクセス許可と更新アクセス許可が付与された後に、セールスエンジニアがテーブルを正常に更新します。次に、セールスエンジニアはイベントテーブルの分析とバキュームを試みますが、失敗します。

  1. セールスエンジニアユーザーとしてデータベースに接続します。

  2. eventid 1 のイベント名を更新するには、次の例を実行します。

    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. セールススキーマで更新されたイベントテーブルを分析するには、次の例を使用します。この例では、セールスエンジニアユーザーに必要なアクセス許可がなく、セールススキーマのイベントテーブルの所有者でもないため、アクセス許可拒否エラーが発生します。イベントテーブルを分析するには、GRANT コマンドを使用して ANALYZE のアクセス許可を sales_rw ロールに付与する必要があります。ANALYZE コマンドの詳細については、「ANALYZE」を参照してください。

    ANALYZE sales.events; ERROR: skipping "events" --- only table or database owner can analyze
  5. 更新されたイベントテーブルをバキュームするには、次の例を使用します。この例では、セールスエンジニアユーザーに必要なアクセス許可がなく、セールススキーマのイベントテーブルの所有者でもないため、アクセス許可拒否エラーが発生します。イベントテーブルをバキュームするには、GRANT コマンドを使用して VACUUM のアクセス許可を sales_rw ロールに付与する必要があります。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: 読み取り/書き込みユーザーとしてテーブルを切り捨てる

このステップでは、セールスエンジニアユーザーがセールススキーマのイベントテーブルを切り捨てようとしますが、dbadmin ユーザーから切り捨てアクセス許可が付与された場合にのみ成功します。

  1. セールスエンジニアユーザーとしてデータベースに接続します。

  2. セールススキーマのイベントテーブルからすべての行を削除するには、次の例を使用します。この例では、セールスエンジニアユーザーに必要なアクセス許可がなく、セールススキーマのイベントテーブルの所有者でもないため、エラーが発生します。イベントテーブルを切り捨てるには、GRANT コマンドを使用して TRUNCATE のアクセス許可を sales_rw ロールに付与する必要があります。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 を使用してセールスエンジニアユーザーとしてデータベースに接続します。

  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. セールスエンジニアユーザーとしてデータベースに接続します。

  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. セールスエンジニアユーザーとしてデータベースに接続します。

  2. 次の例では、セールスアナリストユーザーのユーザーメンバーシップを確認しようとしています。セールスエンジニアはセールスアナリストへのアクセスがないため、このクエリはエラーになります。このコマンドを正常に実行するには、セールスアナリストユーザーとしてデータベースに接続し、例を使用します。

    SELECT user_is_member_of('salesanalyst', 'sales_ro'); ERROR
  3. スーパーユーザーとしてデータベースに接続します。

  4. スーパーユーザーとして接続しているときにセールスアナリストユーザーのメンバーシップを確認するには、次の例を使用します。

    SELECT user_is_member_of('salesanalyst', 'sales_ro'); +-------------------+ | user_is_member_of | +-------------------+ | true | +-------------------+
  5. dbadmin ユーザーとしてデータベースに接続します。

  6. セールスエンジニアのメンバーシップを確認するには、次の例を使用します。

    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 の詳細については、「行レベルのセキュリティ」を参照してください。

このセクションでは、、メジャーリーグベースボールの catdesc 値を持つ cat テーブル内の行のみを表示する salesengineer アクセス許可をユーザーに付与する RLS ポリシーを作成します。次に、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. IGNORE RLS アクセス許可を sales_ro ロールに付与するには、次の例を使用します。これにより、salesanalyst ユーザーは sales_ro ロールのメンバーであるため、RLS ポリシーを無視するアクセス許可が付与されます。

    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. RLS ポリシーを cat テーブルから切り離すには、次の例を使用します。

    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 の詳細については、次のドキュメントを参照してください。