暂无图片
openGauss 如何针对行级访问进行控制?
我来答
分享
暂无图片 匿名用户
openGauss 如何针对行级访问进行控制?

openGauss 如何针对行级访问进行控制?

我来答
添加附件
收藏
分享
问题补充
1条回答
默认
最新
M
mtl

在实际业务中还存在另外一种场景,同一张数据表,只允许用户查看满足特定条件的行数据,此时就需要将访问控制精确到数据表的行级别,使得不同用户执行相同的SQL查询、更新或删除操作,读取到的结果是不同的。

用户可以在数据表上创建行级访问控制(row level security)策略,该策略是针对特定数据库用户、特定SQL操作生效的表达式。当数据库用户访问数据表时,满足策略条件的行对用户可见,不满足条件的行对用户不可见,从而实现针对用户的行级别的访问控制。
openGauss提供SQL语句CREATE/ALTER/DROP ROW LEVEL SECURITY进行行级访问权限策略的创建/修改/删除操作:

步骤1:创建信息表pat_info记录医院病人的个人信息:

openGauss=# select * from pat_info;

 patience | doctor | age

-----------+--------+-----

 peter      | mary   |  25

 bob        | mary   |  56

 julie       | tom     |  38

(3 rows)

步骤2:创建行级访问控制策略,使得医生只能查看属于自己的病人信息:

openGauss=# CREATE ROW LEVEL SECURITY POLICY rls_select ON pat_info FOR select USING(doctor=current_user);

CREATE ROW LEVEL SECURITY POLICY

步骤3:打开信息表pat_info上的行级访问控制开关
openGauss=# ALTER TABLE pat_info ENABLE ROW LEVEL SECURITY;
ALTER TABLE
步骤4:将信息表pat_info的查看权限赋予所有人
openGauss=# grant select on table pat_info to public;

GRANT

步骤5:Mary医生的查看结果:
openGauss=> select * from pat_info;
 patience | doctor | age
----------+--------+-----
 peter     | mary   |  25
 bob       | mary   |  56
(2 rows)
           Tom医生的查看结果:
openGauss=> select * from pat_info;
 patience | doctor | age
----------+--------+-----
 julie      | tom     |  38
(1 row)
暂无图片 评论
暂无图片 有用 0
回答交流
提交
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
暂无图片墨值悬赏