首页 > 数据库 >openGauss学习笔记-112 openGauss 数据库管理-管理用户及权限-行级访问控制

openGauss学习笔记-112 openGauss 数据库管理-管理用户及权限-行级访问控制

时间:2023-11-02 20:32:19浏览次数:33  
标签:行级 -- alice 用户 112 openGauss peter data

openGauss学习笔记-112 openGauss 数据库管理-管理用户及权限-行级访问控制

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

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

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

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

--创建用户alice, bob, peter
openGauss=# CREATE ROLE alice PASSWORD 'xxxxxxxxx';
openGauss=# CREATE ROLE bob PASSWORD 'xxxxxxxxx';
openGauss=# CREATE ROLE 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)

img 须知:

PG_STATISTIC系统表和PG_STATISTIC_EXT系统表存储了统计对象的一些敏感信息,如高频值MCV。进行三权分立后系统管理员仍可以通过访问这两张系统表,得到统计信息里的这些信息。

标签:行级,--,alice,用户,112,openGauss,peter,data
From: https://blog.51cto.com/shuchaoyang/8154665

相关文章

  • 1112.迷宫
    dfs模板#include<iostream>#include<cstring>usingnamespacestd;constintN=105;charg[N][N];intk,n;boolvis[N][N];intsx,sy,ex,ey;intdx[]={-1,1,0,0};intdy[]={0,0,-1,1};voiddfs(intx,inty){vis[x][y]=1;......
  • openGauss学习笔记-111 openGauss 数据库管理-管理用户及权限-用户权限设置
    openGauss学习笔记-111openGauss数据库管理-管理用户及权限-用户权限设置111.1给用户直接授予某对象的权限给用户直接授予某对象的权限,请使用GRANT。将Schema中的表或者视图对象授权给其他用户或角色时,需要将表或视图所属Schema的USAGE权限同时授予该用户或角色。否则用户或......
  • openGauss学习笔记-110 openGauss 数据库管理-管理用户及权限-Schema
    openGauss学习笔记-110openGauss数据库管理-管理用户及权限-SchemaSchema又称作模式。通过管理Schema,允许多个用户使用同一数据库而不相互干扰,可以将数据库对象组织成易于管理的逻辑组,同时便于将第三方应用添加到相应的Schema下而不引起冲突。每个数据库包含一个或多个Schema。......
  • 2023-2024-1 20211211 第四章读书笔记
    第四章读书笔记一、知识点归纳(思维导图)二、收获总结并行线程的主要挑战有:线程同步、死锁、资源竞争、上下文切换开销等问题。线程级别的并行是指在多核处理器上同时执行多个线程,每个线程独立执行不同的任务。指令级别的并行是指在单个核心的处理器上同时执行多条指令。并发......
  • 20211129《信息安全系统设计与实现》第四章学习笔记
    一、任务内容自学教材第4章,提交学习笔记(10分)1.知识点归纳以及自己最有收获的内容,选择至少2个知识点利用chatgpt等工具进行苏格拉底挑战,并提交过程截图,提示过程参考下面内容(4分)“我在学***X知识点,请你以苏格拉底的方式对我进行提问,一次一个问题”核心是要求GPT:“请你以苏格拉......
  • 2023-2024-1 20211108_20211120_20211103_20211125 实验一:开发环境的熟悉 小组实验过
    实验课小组成员20211108俞振阳、20211120刘钟徽、20211103白皓宇、20211125苗靖章实验一-1-交叉编译环境-(使用自己笔记本电脑)实验题目要求实验三人一组可以使用自己的笔记本,也可以使用实验室台式机,使用实验室机器的不用做本题安装老师提供的software目录中的VMware-works......
  • openGauss学习笔记-108 openGauss 数据库管理-管理用户及权限-用户
    openGauss学习笔记-108openGauss数据库管理-管理用户及权限-用户使用CREATEUSER和ALTERUSER可以创建和管理数据库用户。openGauss包含一个或多个已命名数据库。用户和角色在整个openGauss范围内是共享的,但是其数据并不共享。即用户可以连接任何数据库,但当连接成功后,任何用户都......
  • 1129.热浪
    最短路模板题#include<stdio.h>#include<stdlib.h>#include<queue>#include<algorithm>#include<vector>#include<cstring>#defineR(x)x=read()usingnamespacestd;typedefpair<int,int>PII;constintN=251......
  • 1128. 信使
    这道题要求的就是最短路中的最大值注意:Floyd算法中第一重循环是[1,n]而不是[1,n),因为1~n中任何一个点都有可能是中转点。#include<iostream>#include<algorithm>#include<cstring>usingnamespacestd;constintN=105;intn,m,f[N][N],ans;intmain(){......
  • openGauss学习笔记-107 openGauss 数据库管理-管理用户及权限-三权分立
    openGauss学习笔记-107openGauss数据库管理-管理用户及权限-三权分立默认权限机制和管理员两节的描述基于的是openGauss创建之初的默认情况。从前面的介绍可以看出,默认情况下拥有SYSADMIN属性的系统管理员,具备系统最高权限。在实际业务管理中,为了避免系统管理员拥有过度集中的......