首页 > 其他分享 >KingbaseES行级安全策略

KingbaseES行级安全策略

时间:2024-03-29 18:47:45浏览次数:32  
标签:test1 行级 name u1 安全策略 u2 usertest KingbaseES select

什么是行级安全策略(RLS)?
行安全策略就是对不同用户,不同行数据的可见性,和可修改性。是表权限的一种扩展。

默认情况下表没有任何安全策略限制。这样用户根据自身对表持有的权限来操作表数据,对于查询或更新来说其中所有的行都是平等的。
当在一个表上启用行安全性时,所有对该表的操作都必须被一条行安全性策略所允许。如果为一个表启用了行级安全策略但是没有适用的策略存在,将假定为一种 “默认否定”策略,这样任何行都不可见也不可更新。
但是对全表进行操作的命令,比如 TRUNCATE 和 REFERENCES 不受影响。

行安全性策略可以针对特定的命令、角色或者两者。一条策略可以被指定为适用于ALL命令,或者查询(SELECT)、 插入(INSERT)、更新(UPDATE)或者删除(DELETE)。
同一个策略可分配多个角色,并且通常的角色成员关系和继承规则也适用。但是表的所有者,超级用户 (postgres) 以及加上了 BYPASSRLS 属性的角色不受安全性的限制。
只有表的所有者才具有启用 / 禁用行级安全性,给表添加策略的权限。

策略的相关命令
CREATE POLICY :创建策略
ALTER POLICY :修改策略
DROP POLICY :删除策略
ALTER TABLE xxx ENABLE/disable ROW LEVEL SECURITY :用于行级安全性的启用 / 禁用。

示例
初始化数据

CREATE TABLE usertest (id text, name text);
insert into usertest values(1,'u1');
insert into usertest values(2,'u2');
insert into usertest values(3,'u3');

将DML权限赋给用户u1,u2;
grant select,insert,update ON public.usertest to u1,u2;

create policy u1_select ON usertest for select to u1 using(name=current_user);

策略创建后默认是禁用的,需要通过alter table来开启表的行级安全功能

test1=# \d usertest
        数据表 "public.usertest"
 栏位 | 类型 | 校对规则 | 可空的 | 预设 
------+------+----------+--------+------
 id   | text |          |        | 
 name | text |          |        | 
策略(行安全性禁用):
    POLICY "u1_select" FOR SELECT
      TO u1
      USING ((name = CURRENT_USER))

alter table usertest enable row level security;

test1=# \d usertest
        数据表 "public.usertest"
 栏位 | 类型 | 校对规则 | 可空的 | 预设 
------+------+----------+--------+------
 id   | text |          |        | 
 name | text |          |        | 
策略:
    POLICY "u1_select" FOR SELECT
      TO u1
      USING ((name = CURRENT_USER))

开启安全策略后,使用u1/u2用户连接数据库,验证用户可访问数据情况:

test=# \c test1 system
您现在已经连接到数据库 "test1",用户 "system".
test1=# select * from usertest; 
 id | name 
----+------
 1  | u1
 2  | u2
 3  | u3
(3 行记录)

test1=# \c - u1;
您现在已经连接到数据库 "test1",用户 "u1".
test1=> select * from usertest;
 id | name 
----+------
 1  | u1
(1 行记录)

test1=> \c - u2;
您现在已经连接到数据库 "test1",用户 "u2".
test1=> select * from usertest ;
 id | name 
----+------
(0 行记录)

u1用户只能查询到name=u1的数据,u2用户无法查询到任何数据。符合预期说明策略已正常生效了。

test1=> \c - system
您现在已经连接到数据库 "test1",用户 "system".
test1=# alter user u2 bypassrls;
ALTER ROLE
test1=# \c - u2;
您现在已经连接到数据库 "test",用户 "u2".
test1=> select * from usertest ;
 id | name
----+------
 1  | u1
 2  | u2
 3  | u3
(3 行记录)

给u2用户赋予bypassrls权限,u2用户可以绕过表的rls策略。

标签:test1,行级,name,u1,安全策略,u2,usertest,KingbaseES,select
From: https://www.cnblogs.com/kingbase/p/17930969.html

相关文章

  • KingbaseES Reindex concurrently过程
    前言KES中我们经常遇到表膨胀情况,然而索引也会膨胀,随着业务DML语句的增长,稍不留神索引就会膨胀的很严重,膨胀后的索引只有VACUUMFULL才会真正释放磁盘空间,对于新构建的索引往往比更新的旧索引提供更好的访问性能。所以,我们需要重建膨胀的索引。REINDEX命令需要ACCESSEXCLUSIVE......
  • KingbaseES 索引unusable的使用
    前言KingbaseES中,索引不可用原则介绍oracle数据库中,如果索引不可用(unusable),在进行DML操作时,会触发报错:索引不可用。在KES中如果设置索引不可用,插入数据不会报错,因为当索引被置为不可用状态后,如果要重新启动索引需要rebuild索引,此时会在新索引中重新组织表tuple数据。insert......
  • KingbaseES V8R6集群运维案例之---备库register故障
    案例说明:据现场实施人员说,备库执行了clone,启动数据库服务,执行'repmgrstandbyregister'后,无法将备库register到集群。适用版本:KingbaseESV8R6一、问题现象如下图所示,执行'repmgrstandbyregister',register失败:二、问题分析1、repmgrstandbyregister分析如下图所示:......
  • KingbaseES 避免wal日志占用大量磁盘空间
    背景wal日志一直增长很快,查看归档目录也在执行归档,归档无异常,是归档执行太慢的原因吗?还是wal日志生成的太快了的原因呢?现场环境wal日志的磁盘空间比较小。分析首先我们分析可否加速归档速度呢,因为如果能加快归档速度就可以缓解wal日志所在磁盘空间紧张的问题,答案是不可以。arc......
  • KingbaseES 普通用户逻辑导入时权限不足错误
    逻辑导入时权限报错:ERROR:mustbememberofrole"system"实验:1、在超级用户system下新建用户与schema:createuseruser1;createschemas1;修改user1的默认权限:test=#alterdefaultprivilegesinschemas1grantallontablestouser1;ALTERDEFAULTPRIVILEGESt......
  • KingbaseES V8R3集群运维案例之---集群启动“DATA_SIZE_DIFF 16 (MB)”故障
    案例说明:为保证集群数据的一致性安全,在主备库的数据相差“DATA_SIZE_DIFF>=16M"以上时,该备库不能参与主备切换,并且通过kingbase_monitor.sh启动集群时,集群将无法启动;本案例对此种故障做了复现,并测试了解决方法。适用版本:KingbaseESV8R3适用版本:KingbaseESV8R3一、案例......
  • KingbaseES V8R3备份恢复案例之---backup_label does not exist in KINGBASE_DATA
    案例说明:在KingbaseESV8R3集群主库执行sys_rman的全备时,出现‘backup_labeldoesnotexistinKINGBASE_DATA’的故障,如下图所示:适用版本:KingbaseESV8R3一、问题现象如下所示,数据库执行sys_rman物理备份:[kingbase@node201bin]$./sys_rman-Usystem-W123456-dtes......
  • KingbaseES集群运维案例之-- V8R3与V8R6集群wal函数应用
    案例说明:KingbaseESV8R3和V8R6集群在通过函数获取wal日志的相关信息时,两个版本的函数名称不同,本案例做了函数应用的对比和总结。适用版本:KingbaseESV8R3/R6一、KingbaseESV8R3相关函数Tips:在V8R3的版本,事务日志名称为xlog。1、查询数据库支持的函数test=#selectpron......
  • kingbaseES V8R6集群运维案例之---配置priority防止failover切换案例
    案例说明:在一主多备的架构中,需要配置一台备库在主备切换时,不能选举为主库。对于repmgr主备切换主库的选择算法如下:Tips:Repmgr选举候选备节点会以以下顺序选举:LSN---->Priority---->Node_ID。系统会先选举一个LSN比较大者作为候选备节点;如LSN一样,会根据Priority优先级进行比......
  • KingbaseES V8R6集群运维案例之---级联备库upstream节点故障
    KingbaseESV8R6集群运维案例之---级联备库upstream节点故障案例说明:在KingbaseESV8R6集群,构建级联备库后,在其upstream的节点故障后,级联备库如何处理?适用版本:KingbaseESV8R6集群架构:案例一:一、配置集群的recovery参数(allnodes)Tips:关闭备库的aut-recovery机制......