首页 > 其他分享 >openGauss 行级访问控制

openGauss 行级访问控制

时间:2024-04-30 10:55:40浏览次数:34  
标签:行级 访问控制 alice -- openGauss peter data

行级访问控制

行级访问控制特性将数据库访问控制精确到数据表行级别,使数据库达到行级访问控制的能力。不同用户执行相同的SQL查询操作,读取到的结果是不同的。

用户可以在数据表创建行访问控制(Row Level Security)策略,该策略是指针对特定数据库用户、特定SQL操作生效的表达式。当数据库用户对数据表访问时,若SQL满足数据表特定的Row Level Security策略,在查询优化阶段将满足条件的表达式,按照属性(PERMISSIVE | RESTRICTIVE)类型,通过AND或OR方式拼接,应用到执行计划上。

行级访问控制的目的是控制表中行级数据可见性,通过在数据表上预定义Filter,在查询优化阶段将满足条件的表达式应用到执行计划上,影响最终的执行结果。当前受影响的SQL语句包括SELECT,UPDATE,DELETE。

示例:某表中汇总了不同用户的数据,但是不同用户只能查看自身相关的数据信息,不能查看其他用户的数据信息。

--创建用户alice, bob, peter
openGauss=# CREATE USER alice PASSWORD 'xxxxxxxxx';
openGauss=# CREATE USER bob PASSWORD 'xxxxxxxxx';
openGauss=# CREATE USER peter PASSWORD 'xxxxxxxxx';

--创建表all_data,包含不同用户数据信息
openGauss=# CREATE TABLE all_data(id int, role varchar(100), data varchar(100));

--向数据表插入数据
openGauss=# INSERT INTO all_data VALUES(1, 'alice', 'alice data');
openGauss=# INSERT INTO all_data VALUES(2, 'bob', 'bob data');
openGauss=# INSERT INTO all_data VALUES(3, 'peter', 'peter data');

--将表all_data的读取权限赋予alice,bob和peter用户
openGauss=# GRANT SELECT ON all_data TO alice, bob, peter;

--打开行访问控制策略开关
openGauss=# ALTER TABLE all_data ENABLE ROW LEVEL SECURITY;

--创建行访问控制策略,当前用户只能查看用户自身的数据
openGauss=# CREATE ROW LEVEL SECURITY POLICY all_data_rls ON all_data USING(role = CURRENT_USER);

--查看表详细信息
openGauss=# \d+ all_data
                               Table "public.all_data"
 Column |          Type          | Modifiers | Storage  | Stats target | Description
--------+------------------------+-----------+----------+--------------+-------------
 id     | integer                |           | plain    |              |
 role   | character varying(100) |           | extended |              |
 data   | character varying(100) |           | extended |              |
Row Level Security Policies:
    POLICY "all_data_rls"
      USING (((role)::name = "current_user"()))
Has OIDs: no
Location Nodes: ALL DATANODES
Options: orientation=row, compression=no, enable_rowsecurity=true

--切换至用户alice,执行SQL"SELECT * FROM public.all_data"
openGauss=> SELECT * FROM public.all_data;
 id | role  |    data
----+-------+------------
  1 | alice | alice data
(1 row)

openGauss=> EXPLAIN(COSTS OFF) SELECT * FROM public.all_data;
                           QUERY PLAN
----------------------------------------------------------------
 Streaming (type: GATHER)
   Node/s: All datanodes
   ->  Seq Scan on all_data
         Filter: ((role)::name = 'alice'::name)
 Notice: This query is influenced by row level security feature
(5 rows)

--切换至用户peter,执行SQL"SELECT * FROM public.all_data"
openGauss=> SELECT * FROM public.all_data;
 id | role  |    data
----+-------+------------
  3 | peter | peter data
(1 row)

openGauss=> EXPLAIN(COSTS OFF) SELECT * FROM public.all_data;
                           QUERY PLAN
----------------------------------------------------------------
 Streaming (type: GATHER)
   Node/s: All datanodes
   ->  Seq Scan on all_data
         Filter: ((role)::name = 'peter'::name)
 Notice: This query is influenced by row level security feature
(5 rows)

须知:

PG_STATISTIC系统表和PG_STATISTIC_EXT系统表存储了统计对象的一些敏感信息,如高频值MCV。若创建行级访问控制后,将这两张系统表的查询权限授予普通用户,则普通用户仍然可以通过访问这两张系统表,得到统计对象里的这些信息。

详情查看:https://opengauss.org

详情查看:https://docs-opengauss.osinfra.cn

标签:行级,访问控制,alice,--,openGauss,peter,data
From: https://www.cnblogs.com/techbing/p/18167338

相关文章

  • openGauss 将磁盘表转换为MOT
    将磁盘表转换为MOT磁盘表直接转换为MOT尚不能实现,这意味着尚不存在将基于磁盘的表转换为MOT的ALTERTABLE语句。下面介绍如何手动将基于磁盘的表转换为MOT,如何使用gs_dump工具导出数据,以及如何使用gs_restore工具导入数据。前置条件检查检查待转换为MOT的磁盘表的模式是否包含......
  • openGauss 数据库基础概念介绍
    相关概念数据库数据库用于管理各类数据对象,与其他数据库隔离。创建数据对象时可以指定对应的表空间,如果不指定相应的表空间,相关的对象会默认保存在PG_DEFAULT空间中。数据库管理的对象可分布在多个表空间上。表空间在openGauss中,表空间是一个目录,可以存在多个,里面存储的是它所......
  • openGauss 统一审计策略概述
    统一审计策略概述背景信息传统审计会产生大量的审计日志,且不支持定制化的访问对象和访问来源配置,不方便数据库安全管理员对审计日志的分析。而统一审计策略支持绑定资源标签、配置数据来源输出审计日志,可以提升安全管理员对数据库监控的效率。详情查看:https://opengauss.org详......
  • openGauss 为MOT创建索引
    为MOT创建索引支持标准的openGauss创建和删除索引语句。例如:createindextext_index1ontest(x);创建一个用于TPC-C的ORDER表,并创建索引:createFOREIGNtablebmsql_oorder(o_w_idintegernotnull,o_d_idintegernotnull,o_id......
  • openGauss 授予用户权限
    授予用户权限以授予数据库用户对MOT存储引擎的访问权限为例。每个数据库用户仅执行一次,通常在初始配置阶段完成。说明:MOT通过外部数据封装器(ForeignDataWrapper,FDW)机制与openGauss数据库集成,所以需要授权用户权限。要使特定用户能够创建和访问MOT(DDL、DML、SELECT),以下语......
  • openGauss 术语表
    术语表缩略语定义描述2PL2阶段锁(2-PhaseLocking)ACID原子性(Atomicity),一致性(Consistency),隔离性(Isolation),持久性(Durability)AP分析处理(AnalyticalProcessing)Arm高级RISC机器(AdvancedRISCMachine),x86的替代硬件架构。CC并发控制(ConcurrencyControl)......
  • openGauss 设置账本数据库
    设置账本数据库账本数据库概述查看账本历史操作记录校验账本数据一致性归档账本数据库修复账本数据库详情查看:https://opengauss.org详情查看:https://docs-opengauss.osinfra.cn......
  • openGauss 审计概述
    审计概述背景信息数据库安全对数据库系统来说至关重要。openGauss将用户对数据库的所有操作写入审计日志。数据库安全管理员可以利用这些日志信息,重现导致数据库现状的一系列事件,找出非法操作的用户、时间和内容等。关于审计功能,用户需要了解以下几点内容:审计总开关audit_ena......
  • openGauss 使用MOT
    使用MOT本章介绍如何部署、使用和管理openGaussMOT。使用MOT的方法非常简单。MOT命令的语法与openGauss基于磁盘的表相同。只有MOT中的创建和删除表语句与openGauss中基于磁盘的表的语句不同。您可以参考本章了解如何入门、如何将基于磁盘的表转换为MOT、如何使用MOT的查询原生......
  • openGauss 设置帐号有效期
    设置帐号有效期注意事项创建新用户时,需要限制用户的操作期限(有效开始时间和有效结束时间)。不在有效操作期内的用户需要重新设定帐号的有效操作期。操作步骤以操作系统用户omm登录数据库主节点。使用如下命令连接数据库。gsql-dpostgres-p8000postgres为需要连接......