教程:使用 RBAC 创建角色和进行查询 - Amazon Redshift
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

教程:使用 RBAC 创建角色和进行查询

使用 RBAC,您可以创建具有相应权限的角色,以运行通常需要超级用户权限的命令。只要用户通过包含这些权限的角色获得授权,即可以运行这些命令。

在本教程中,您将使用基于角色的访问控制(RBAC)来管理所创建数据库中的权限。然后,您将连接到数据库并从两个不同的角色查询数据库,以测试 RBAC 的功能。

您创建并用于查询数据库的两个角色是 sales_rosales_rw。您将创建 sales_ro 角色并以具有 sales_ro 角色的用户身份查询数据。sales_ro 用户只能使用 SELECT 命令,而不能使用 UPDATE 命令。然后,您将创建 sales_rw 角色并以具有 sales_rw 角色的用户身份查询数据。sales_rw 用户可以使用 SELECT 命令和 UPDATE 命令。

此外,您还可以创建角色来限制对某些命令的访问权限,并将角色分配给超级用户或普通用户。

任务

  • 先决条件

  • 步骤 1:创建管理员用户

  • 步骤 2:设置架构

  • 步骤 3:创建只读用户

  • 步骤 4:以只读用户身份查询数据

  • 步骤 5:创建读写用户

  • 步骤 6:以继承了只读角色的用户身份查询数据

  • 步骤 7:向读写角色授予更新和插入权限

  • 步骤 8:以读写用户身份查询数据

  • 步骤 9:以管理员用户身份分析和清理数据库中的表

  • 步骤 10:以读写用户身份截断表

先决条件

步骤 1:创建管理员用户

要为本教程进行设置,请在此步骤中创建数据库管理员角色并将其附加到数据库管理员用户。必须将数据库管理员创建为超级用户或角色管理员。

在 Amazon Redshift https://docs.amazonaws.cn/redshift/latest/mgmt/query-editor-v2-using.html 中运行所有查询。

  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 的事件名称,请运行以下示例。此示例将导致权限被拒绝错误,因为 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_rw 角色使用权限,并通过向其分配 sales_ro 角色来选择对销售架构对象的访问权限,请使用以下示例。有关 Amazon Redshift 中角色如何继承权限的更多信息,请参阅角色层次结构

    GRANT ROLE sales_ro TO ROLE sales_rw;
  5. 要将 sales_rw 角色分配给 salesengineer 用户,请使用以下示例。

    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 的事件名称,请运行以下示例。此示例将导致权限被拒绝错误,因为 salesengineer 用户仅对销售架构中的事件表具有 SELECT 权限。要更新事件表,必须向 sales_rw 角色授予 UPDATE 权限。

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

步骤 7:向读写角色授予更新和插入权限

在此步骤中,您向 sales_rw 角色授予 UPDATE 和 INSERT 权限。

  1. 以 dbadmin 用户身份连接到数据库。

  2. 要向 sales_rw 角色授予 UPDATE、INSERT 和 DELETE 权限,请使用以下示例。

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

步骤 8:以读写用户身份查询数据

在此步骤中,salesengineer 在其角色被授予 INSERT 和 UPDATE 权限后成功更新表。接下来,salesengineer 尝试分析和清理事件表,但未能成功。

  1. 以 salesengineer 用户身份连接到数据库。

  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. 要分析销售架构中更新的事件表,请使用以下示例。此示例将导致权限被拒绝错误,因为 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 用户授予 TRUNCATE 权限时才会成功。

  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 表中具有 Major League Baseball catdesc 值的行。然后,您以 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. 要将 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 的更多信息,请参阅以下文档: