GaussDB数据库表创建行访问控制策略
目录
1、CREATE ROW LEVEL SECURITY POLICY语法
2、ALTER ROW LEVEL SECURITY POLICY语法
3、ROW LEVEL SECURITY策略与适配SQL语法关系
1)创建行访问控制策略,实现“学生自己只能查看自己的课程成绩”
2)修改行访问策略,实现“学生只能在8:00-18:00查看自己的成绩”
一、前言
数据的安全性和隐私性变得越来越重要。行访问控制策略是数据库管理中的一种重要技术,可以保护数据的机密性和完整性。GaussDB是一款高性能、高可用性的数据库管理系统,提供了丰富的安全功能,其中包括行访问控制策略。
本文将介绍GaussDB数据库表创建行访问控制策略的基本概念和操作方法,并通过实例演示其过程。通过介绍,读者可以了解GaussDB数据库表创建行访问控制策略的重要性和具体实现方法,为保障数据安全提供参考。
二、GaussDB中的行访问控制
一般默认情况下,表是没有行级安全策略限制的,要想使表具有行级安全性,要么在初始时就通过“CREATE ROW LEVEL SECURITY POLICY”创建、要么就在后期通过“ALTER ROW LEVEL SECURITY POLICY”修改。
在GaussDB中,行访问控制影响数据表的读取操作(例如:SELECT、UPDATE、DELETE等),暂不影响数据表的写入操作(例如:INSERT、MERGE INTO等)。
1、CREATE ROW LEVEL SECURITY POLICY语法
对表创建行访问控制策略。
1)语法:
CREATE [ ROW LEVEL SECURITY ] POLICY policy_name ON table_name [ AS { PERMISSIVE | RESTRICTIVE } ] [ FOR { ALL | SELECT | UPDATE | DELETE } ] [ TO { role_name | PUBLIC | CURRENT_USER | SESSION_USER } [, ...] ] USING ( using_expression )
2)参数:
- policy_name:行访问控制策略名称,同一个数据表上行访问控制策略名称不能相同。
- table_name:行访问控制策略的表名。
- PERMISSIVE:指定行访问控制策略为宽容性策略,条件用OR表达式拼接。
- RESTRICTIVE:指定行访问控制策略为限制性策略,条件用AND表达式拼接。
- role_name:行访问控制影响的数据库用户。(主要包含:CURRENT_USER、SESSION_USER等。当未指定时,默认为PUBLIC,表示影响所有数据库用户。可以指定多个受影响的数据库用户。系统管理员不受行访问控制特性影响)
- using_expression:行访问控制的表达式(返回boolean值)。
2、ALTER ROW LEVEL SECURITY POLICY语法
对已存在的行访问控制策略(包括行访问控制策略的名称,行访问控制指定的用户,行访问控制的策略表达式)进行修改。
1)语法:
--修改已存在行访问控制策略的名称 ALTER [ ROW LEVEL SECURITY ] POLICY policy_name ON table_name RENAME TO new_policy_name; --修改已存在行访问控制策略的指定用户、策略表达式 ALTER [ ROW LEVEL SECURITY ] POLICY policy_name ON table_name [ TO { role_name | PUBLIC } [, ...] ] [ USING ( using_expression ) ];
2)参数:
- policy_name:行访问控制策略名称。
- table_name:行访问控制策略的表名。
- new_policy_name:新的行访问控制策略名称。
- role_name:行访问控制策略应用的数据库用户,可以指定多个用户,PUBLIC表示应用到所有用户。
- using_expression:行访问控制策略,形式类似于where子句中的布尔型表达式。
3、ROW LEVEL SECURITY策略与适配SQL语法关系
Command | SELECT/ALL policy | UPDATE/ALL policy | DELETE/ALL policy |
SELECT | Existing row | No | No |
SELECT FOR UPDATE/SHARE | Existing row | Existing row | No |
UPDATE | No | Existing row | No |
UPDATE RETURNING | Existing row | Existing row | No |
DELETE | No | No | Existing row |
DELETE RETURNING | Existing row | No | Existing row |
三、GaussDB中的行访问控制策略示例
1、实现GaussDB行访问控制的一般步骤
在GaussDB中,行访问控制是数据库安全的重要组成部分。通过启用行级访问控制,可以限制数据库中的用户对特定数据的访问权限。以下是实现GaussDB行访问控制的一般步骤。
请注意,具体实现方法可能因GaussDB版本和配置环境而有所不同。因此,在实际操作中,建议参考GaussDB官方文档。
2、行访问控制策略的创建与修改(示例)
1)创建行访问控制策略,实现“学生自己只能查看自己的课程成绩”。
--创建用户zhangsan、lisi (Password must contain at least three kinds of characters) CREATE USER zhangsan PASSWORD 'zhangsan@123'; CREATE USER lisi PASSWORD 'lisi@123'; --创建数据表test_3。 CREATE TABLE test_3( id int ,name varchar(20) ,course varchar(20) ,score int ); --向数据表插入数据 INSERT INTO test_3 VALUES(1, 'zhangsan', '语文',90); INSERT INTO test_3 VALUES(2, 'zhangsan', '数学',95); INSERT INTO test_3 VALUES(3, 'zhangsan', '英语',85); INSERT INTO test_3 VALUES(4, 'lisi', '语文',85); INSERT INTO test_3 VALUES(5, 'lisi', '数学',90); INSERT INTO test_3 VALUES(6, 'lisi', '英语',95); --将表test_3的读取权限赋予zhangsan、lisi。 GRANT SELECT ON test_3 TO zhangsan,lisi; --打开行访问控制策略开关。 ALTER TABLE test_3 ENABLE ROW LEVEL SECURITY; --创建行访问控制策略,当前用户只能查看用户自己的数据。 CREATE ROW LEVEL SECURITY POLICY test_3_r ON test_3 USING(name = CURRENT_USER);
--查看表test_3相关信息。通过元命令 “\d+ test_3” 或者通过系统表“PG_RLSPOLICY” GaussDB=# \d+ test_3 Table "public.test_3" Column | Type | Modifiers | Storage | Stats target | Description --------+-----------------------+-----------+----------+--------------+------------- id | integer | | plain | | name | character varying(20) | | extended | | course | character varying(20) | | extended | | score | integer | | plain | | Row Level Security Policies: POLICY "test_3_r" FOR ALL TO public USING (((name)::name = "current_user"())) Has OIDs: no Options: orientation=row, compression=no, enable_rowsecurity=true
--切换用户zhangsan进行SELECT操作 [omm@node1 root]$ gsql -d postgres -U zhangsan -p 26000 -ar GaussDB=> SELECT * FROM test_3; id | name | course | score ----+----------+--------+------- 1 | zhangsan | 语文 | 90 2 | zhangsan | 数学 | 95 3 | zhangsan | 英语 | 85 (3 rows)
--切换用户lisi进行SELECT操作 [omm@node1 root]$ gsql -d postgres -U lisi -p 26000 -ar GaussDB=> SELECT * FROM test_3; id | name | course | score ----+------+--------+------- 4 | lisi | 语文 | 85 5 | lisi | 数学 | 90 6 | lisi | 英语 | 95 (3 rows)
2)修改行访问策略,实现“学生只能在8:00-18:00查看自己的成绩”
ALTER ROW LEVEL SECURITY POLICY test_3_r ON test_3 USING (name = CURRENT_USER AND current_time >= TIME '08:00:00' AND current_time <= TIME '18:00:00');
--查看表test_3相关信息。通过元命令 “\d+ test_3” 或者通过系统表“PG_RLSPOLICY”
GaussDB=# \d+ test_3 Table "public.test_3" Column | Type | Modifiers | Storage | Stats target | Description --------+-----------------------+-----------+----------+--------------+------------- id | integer | | plain | | name | character varying(20) | | extended | | course | character varying(20) | | extended | | score | integer | | plain | | Row Level Security Policies: POLICY "test_3_r" FOR ALL TO public USING (((((name)::name = "current_user"()) AND (('now'::text)::time with time zone >= ('08:00:00'::time without time zone)::time with time zone)) AND (('now'::text)::time with time zone <= ('18:00:00'::time without time zone)::time with time zone))) Has OIDs: no Options: orientation=row, compression=no, enable_rowsecurity=true
四、注意事项
- 不支持外表、本地临时表、视图定义行访问控制策略。
- 同一张表可以创建多个行访问控制策略。
- 系统管理员不受行访问控制影响。
- 不支持对添加了行级访问控制策略的表字段进行修改数据类型操作。
- 行访问控制策略可以应用到指定的操作(SELECT、UPDATE、DELETE、ALL),ALL表示会影响SELECT、UPDATE、DELETE三种操作,默认为ALL。
- 需要打开该表的行访问控制开关(ALTER TABLE ... ENABLE ROW LEVEL SECURITY),否则不生效。
- 行访问控制策略名称是针对表的,同一个数据表上不能有同名的行访问控制策略;对不同的数据表,可以有同名的行访问控制策略。
五、小结
通过本文的介绍,读者可以了解到GaussDB数据库表创建行访问控制策略的重要性和具体实现方法。行访问控制策略是一种有效的数据保护技术,可以防止未经授权的访问和恶意攻击,提高数据的安全性和可靠性。 在实际应用中,根据不同的业务需求和安全要求,可以灵活运用GaussDB提供的行访问控制策略功能,制定相应的安全策略,以保障数据的安全性和隐私性。
——结束

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
如何正确使用 Bean Validation 进行数据校验
一、背景 在前后端开发过程中,数据校验是一项必须且常见的事,从展示层、业务逻辑层到持久层几乎每层都需要数据校验。如果在每一层中手工实现验证逻辑,既耗时又容易出错。 为了避免重复这些验证,通常的做法是将验证逻辑直接捆绑到领域模型中,通过元数据(默认是注解)去描述模型, 生成校验代码,从而使校验从业务逻辑中剥离,提升开发效率,使开发者更专注业务逻辑本身。 在 Spring 中,目前支持两种不同的验证方法:Spring Validation 和 JSR-303 Bean Validation,即@Validated(org . springframework.validation.annotation.Validated)和 @Valid(javax.validation.Valid)。两者都可以通过定义模型的约束来进行数据校验,虽然两者使用类似,在很多场景下也可以相互替换,但实际上却完全不同,这些差别长久以来对我们日常使用产生了较大疑惑,本文主要梳理其中的差别、介绍 Validation 的使用及其实现原理,帮助大家在实践过程中更好使用 Validation 功能。 二、Bean Vali...
- 下一篇
3 分钟了解 NVIDIA 新出的 H200
英伟达在 2023 年全球超算大会上发布了备受瞩目的新一代 AI 芯片——H200 Tensor Core GPU。相较于上一代产品 H100,H200 在性能上实现了近一倍的提升,内存容量翻倍,带宽也显著增加。 据英伟达称,H200 被冠以当世之最的芯片的称号。不过,根据发布的信息来看,H200 Tensor Core GPU 并没有让人感到意外。在 2023 年 8 月 30 日,英伟达就发布了搭载 HBM3e 技术的 GH200 Grace Hopper 的消息,而 HBM3e 也是 H200 芯片的升级重点。 HBM3E——H200升级重点 NVIDIA H200 是首款提供 HBM3e 的 GPU,HBM3e 是更快、更大的内存,可加速生成式 AI 和大型语言模型,同时推进 HPC 工作负载的科学计算。借助 HBM3e,NVIDIA H200 的显存带宽可以达到 4.8TB/秒,并提供 141GB 的内存。相较于 H100,H200 在吞吐量、能效比和内存带宽等方面均有所提升。 HBM3E 到底是什么技术,让 H200 有了如此大的提升?接下来我们就来详细了解下 HBM3E。...
相关文章
文章评论
共有0条评论来说两句吧...