GaussDB数据库表创建行访问控制策略

2023-12-21 12:01

本文主要是介绍GaussDB数据库表创建行访问控制策略,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

一、前言

二、GaussDB中的行访问控制

1、CREATE ROW LEVEL SECURITY POLICY语法

2、ALTER ROW LEVEL SECURITY POLICY语法

3、ROW LEVEL SECURITY策略与适配SQL语法关系

三、GaussDB中的行访问控制策略示例

1、实现GaussDB行访问控制的一般步骤

2、行访问控制策略的创建与修改(示例)

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等)。

1CREATE 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_3Table "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 ALLTO publicUSING (((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 -arGaussDB=> SELECT * FROM test_3;id |   name   | course | score 
----+----------+--------+-------1 | zhangsan | 语文   |    902 | zhangsan | 数学   |    953 | zhangsan | 英语   |    85
(3 rows)

--切换用户lisi进行SELECT操作
[omm@node1 root]$ gsql -d postgres -U lisi -p 26000 -arGaussDB=> SELECT * FROM test_3;id | name | course | score 
----+------+--------+-------4 | lisi | 语文   |    855 | lisi | 数学   |    906 | 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_3Table "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 ALLTO publicUSING (((((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提供的行访问控制策略功能,制定相应的安全策略,以保障数据的安全性和隐私性。

——结束

这篇关于GaussDB数据库表创建行访问控制策略的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/519920

相关文章

Python中使用uv创建环境及原理举例详解

《Python中使用uv创建环境及原理举例详解》uv是Astral团队开发的高性能Python工具,整合包管理、虚拟环境、Python版本控制等功能,:本文主要介绍Python中使用uv创建环境及... 目录一、uv工具简介核心特点:二、安装uv1. 通过pip安装2. 通过脚本安装验证安装:配置镜像源(可

Java中实现线程的创建和启动的方法

《Java中实现线程的创建和启动的方法》在Java中,实现线程的创建和启动是两个不同但紧密相关的概念,理解为什么要启动线程(调用start()方法)而非直接调用run()方法,是掌握多线程编程的关键,... 目录1. 线程的生命周期2. start() vs run() 的本质区别3. 为什么必须通过 st

如何搭建并配置HTTPD文件服务及访问权限控制

《如何搭建并配置HTTPD文件服务及访问权限控制》:本文主要介绍如何搭建并配置HTTPD文件服务及访问权限控制的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、安装HTTPD服务二、HTTPD服务目录结构三、配置修改四、服务启动五、基于用户访问权限控制六、

Macos创建python虚拟环境的详细步骤教学

《Macos创建python虚拟环境的详细步骤教学》在macOS上创建Python虚拟环境主要通过Python内置的venv模块实现,也可使用第三方工具如virtualenv,下面小编来和大家简单聊聊... 目录一、使用 python 内置 venv 模块(推荐)二、使用 virtualenv(兼容旧版 P

Druid连接池实现自定义数据库密码加解密功能

《Druid连接池实现自定义数据库密码加解密功能》在现代应用开发中,数据安全是至关重要的,本文将介绍如何在​​Druid​​连接池中实现自定义的数据库密码加解密功能,有需要的小伙伴可以参考一下... 目录1. 环境准备2. 密码加密算法的选择3. 自定义 ​​DruidDataSource​​ 的密码解密3

Maven项目中集成数据库文档生成工具的操作步骤

《Maven项目中集成数据库文档生成工具的操作步骤》在Maven项目中,可以通过集成数据库文档生成工具来自动生成数据库文档,本文为大家整理了使用screw-maven-plugin(推荐)的完... 目录1. 添加插件配置到 pom.XML2. 配置数据库信息3. 执行生成命令4. 高级配置选项5. 注意事

Linux lvm实例之如何创建一个专用于MySQL数据存储的LVM卷组

《Linuxlvm实例之如何创建一个专用于MySQL数据存储的LVM卷组》:本文主要介绍使用Linux创建一个专用于MySQL数据存储的LVM卷组的实例,具有很好的参考价值,希望对大家有所帮助,... 目录在Centos 7上创建卷China编程组并配置mysql数据目录1. 检查现有磁盘2. 创建物理卷3. 创

在Java中基于Geotools对PostGIS数据库的空间查询实践教程

《在Java中基于Geotools对PostGIS数据库的空间查询实践教程》本文将深入探讨这一实践,从连接配置到复杂空间查询操作,包括点查询、区域范围查询以及空间关系判断等,全方位展示如何在Java环... 目录前言一、相关技术背景介绍1、评价对象AOI2、数据处理流程二、对AOI空间范围查询实践1、空间查

Python+PyQt5实现MySQL数据库备份神器

《Python+PyQt5实现MySQL数据库备份神器》在数据库管理工作中,定期备份是确保数据安全的重要措施,本文将介绍如何使用Python+PyQt5开发一个高颜值,多功能的MySQL数据库备份工具... 目录概述功能特性核心功能矩阵特色功能界面展示主界面设计动态效果演示使用教程环境准备操作流程代码深度解

MySQL数据库实现批量表分区完整示例

《MySQL数据库实现批量表分区完整示例》通俗地讲表分区是将一大表,根据条件分割成若干个小表,:本文主要介绍MySQL数据库实现批量表分区的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考... 目录一、表分区条件二、常规表和分区表的区别三、表分区的创建四、将既有表转换分区表脚本五、批量转换表为分区