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等)。
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_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数据库表创建行访问控制策略
目录 一、前言 二、GaussDB中的行访问控制 1、CREATE ROW LEVEL SECURITY POLICY语法 2、ALTER ROW LEVEL SECURITY POLICY语法 3、ROW LEVEL SECURITY策略与适配SQL语法关系 三、GaussDB中的行访问控制策略示例 1、实现GaussDB行访问控制的一般步骤 2、行访问控制策略…...

提升设备巡检效率的关键:易点易动设备管理系统的应用
随着互联网技术的发展,智慧设备管理已成为各行各业提升运营效率的重要选择。相比传统的手动巡检方式,采用设备管理系统可以实现物联网技术给企业带来更高效的运营方式。其中,易点易动作为一款成熟的设备管理系统,其广泛应用于提升设备巡检效率这一领域发挥了很好的作用。 采用易…...

【C++】STL 容器 - list 双向链表容器 ① ( 容器特点 | 容器操作时间复杂度 | 构造函数 )
文章目录 一、 list 双向链表容器简介1、容器特点2、容器操作时间复杂度3、遍历访问5、头文件 二、 list 双向链表容器 构造函数1、默认无参构造函数2、创建包含 n 个相同元素的 list 双向链表3、使用初始化列表构造 list 双向链表4、使用另外一个 list 容器 构造 list 双向链表…...

[C/C++]数据结构 希尔排序
🥦前言: 希尔排序也称 “缩小增量排序”,它也是一种插入类排序的方法,在学习希尔排序之前我们首先了解一下直接插入排序. 一: 🚩直接插入排序 1.1 🌟排序思路 直接插入排序的基本原理是将一条记录插入到已排好的有序表中&#x…...

SQL进阶:子查询
一般情况下,我们都是直接对表进行查询,但有时候,想要的数据可能通过一次select 获取不到,需要嵌套select,这样就形成了子查询。 子查询可以位于查询语句的任意位置,主要的注意点在于用于不同的位置,和不同的关键字一起使用时,需要注意返回的列的数量和行的数量。 位于…...

5、IDEA集成Git
IDEA集成Git 1. 配置Git忽略文件2. 定位Git程序3. 初始化本地库、添加暂存区、提交到本地库4. 切换版本5. 创建分支和切换分支6. 合并分支7. 解决冲突 1. 配置Git忽略文件 问题1:为什么要忽略他们? 与项目的实际功能无关,不参与服务器上部署…...
oracle数据库sqlplus登录卡顿
问题描述 新安装了一套oracle 11.2.0.1 版本的数据库服务器,出现了在服务器本地通过sqlplus / as sysdba登录的时候很快,但是通过监听登录的时候就非常的慢,卡顿,大概需要1分钟多的时间才能登进数据库。 之前安装了好几套oracle …...

【C#】Visual Studio 2022 远程调试配置教程
在某些特殊的情况下,开发机和调试机可能不是同一台设备,此时就需要远程调试了。 开发机配置 首先需要确保两台机器在同一局域网下。 创建共享文件夹 随便找个地方新建一个文件夹,用来放编译结果。例如我这里是 D:\DebuggingWorkspace\。 …...

LSTM的记忆能力实验
长短期记忆网络(Long Short-Term Memory Network,LSTM)是一种可以有效缓解长程依赖问题的循环神经网络.LSTM 的特点是引入了一个新的内部状态(Internal State) 和门控机制(Gating Mechanism)&am…...

Unity之ShaderGraph如何实现瓶装水效果
前言 有一个场景在做效果时,有一个水瓶放到桌子上的设定,但是模型只做了个水瓶,里面是空的,所以我就想办法,如何做出来瓶中装睡的效果,最好是能跟随瓶子有液体流动的效果。 如下图所示: 水面实现 水面效果 液体颜色设置 因为液体有边缘颜色和内里面颜色,所以要分开…...

【python与机器学习3】感知机和门电路:与门,或门,非门等
目录 1 电子和程序里的与门,非门,或门,与非门 ,或非门,异或门 1.1 基础电路 1.2 所有的电路情况 1.3 电路的符号 1.4 各种电路对应的实际电路图 2 各种具体的电路 2.1 与门(and gate) 2…...

关键字:extends关键字
在 Java 中,extends 是一个关键字,用于表示继承关系。当一个类使用 extends 关键字时,它表示该类是一个子类,并且继承了父类的属性和方法。 以下是 extends 关键字的解析: 语法: 描述: ChildC…...

KEPServerEX 6 之【外篇-1】PTC-ThingWorx服务端软件安装 Tomcat10本地安装
本文目标: 安装 Java 和 Apache Tomcat ,为ThingWorx安装做基础。 ----------------------------------------------------------------------- 安装重点 --------------------------------------------------------------------- 1. 安装 Java 11 / JDK 11 添加系…...

(Mac上)使用Python进行matplotlib 画图时,中文显示不出来
【问题描述】 ①报错确缺失字体: ②使用matplotlib画图,中文字体显示不出来 【问题思考】 在网上搜了好多,关于使用python进行matplotlib画图字体显示不出来的,但是我试用了下,对我来说都没有。有些仅使用于windows系…...

万能刷题小程序源码系统:功能强大+试题管理+题库分类+用户列表 附带完整的搭建教程
随着互联网技术的不断进步,线上学习已成为越来越多人的选择。刷题作为提高学习效果的重要方式,一直受到广大学生的喜爱。然而,市面上的刷题软件虽然繁多,但功能各异,质量参差不齐,使得很多用户在选择时感到…...
5.2 显示窗口的内容(二)
三,显示器几何形状管理 只有显示管理器被允许更改显示器的几何形状。窗口管理器也是显示管理器。 3.1 当显示器显示其自身内容时 当显示器显示其自身内容时,适用以下属性: 显示属性描述SCREEN_PROPERTY_PROTECTION_ENABLE表示显示目标窗口是否需要内容保护。只要显示器上…...

SpringCloud 整合 Canal+RabbitMQ+Redis 实现数据监听
1Canal介绍 Canal 指的是阿里巴巴开源的数据同步工具,用于数据库的实时增量数据订阅和消费。它可以针对 MySQL、MariaDB、Percona、阿里云RDS、Gtid模式下的异构数据同步等情况进行实时增量数据同步。 当前的 canal 支持源端 MySQL 版本包括 5.1.x , 5.5.x , 5.6.…...

一体机定制_工控触控一体机安卓主板方案
工控一体机是一种集成化的硬件方案,采用了联发科MT8768八核芯片和12nm制程工艺。该芯片拥有2.0GHz的主频和IMG PowerVR GE8320图形处理GPU,具备强大的视频处理能力,并且兼容大部分的视频格式和解码能力。工控一体机搭载了Android 9.0操作系统…...

Android10.0 人脸解锁流程分析
人脸解锁概述 人脸解锁即用户通过注视设备的正面方便地解锁手机或平板。Android 10 为支持人脸解锁的设备在人脸认证期间添加了一个新的可以安全处理相机帧、保持隐私与安全的人脸认证栈的支持,也为安全合规地启用集成交易的应用(网上银行或其他服务&am…...
P8598 [蓝桥杯 2013 省 AB] 错误票据
题目背景 某涉密单位下发了某种票据,并要在年终全部收回。 题目描述 每张票据有唯一的 ID 号,全年所有票据的 ID 号是连续的,但 ID 的开始数码是随机选定的。因为工作人员疏忽,在录入 ID 号的时候发生了一处错误,造…...

(十)学生端搭建
本次旨在将之前的已完成的部分功能进行拼装到学生端,同时完善学生端的构建。本次工作主要包括: 1.学生端整体界面布局 2.模拟考场与部分个人画像流程的串联 3.整体学生端逻辑 一、学生端 在主界面可以选择自己的用户角色 选择学生则进入学生登录界面…...

Docker 运行 Kafka 带 SASL 认证教程
Docker 运行 Kafka 带 SASL 认证教程 Docker 运行 Kafka 带 SASL 认证教程一、说明二、环境准备三、编写 Docker Compose 和 jaas文件docker-compose.yml代码说明:server_jaas.conf 四、启动服务五、验证服务六、连接kafka服务七、总结 Docker 运行 Kafka 带 SASL 认…...
【git】把本地更改提交远程新分支feature_g
创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...

NLP学习路线图(二十三):长短期记忆网络(LSTM)
在自然语言处理(NLP)领域,我们时刻面临着处理序列数据的核心挑战。无论是理解句子的结构、分析文本的情感,还是实现语言的翻译,都需要模型能够捕捉词语之间依时序产生的复杂依赖关系。传统的神经网络结构在处理这种序列依赖时显得力不从心,而循环神经网络(RNN) 曾被视为…...
今日科技热点速览
🔥 今日科技热点速览 🎮 任天堂Switch 2 正式发售 任天堂新一代游戏主机 Switch 2 今日正式上线发售,主打更强图形性能与沉浸式体验,支持多模态交互,受到全球玩家热捧 。 🤖 人工智能持续突破 DeepSeek-R1&…...
[Java恶补day16] 238.除自身以外数组的乘积
给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法,且在 O(n) 时间复杂度…...

网络编程(UDP编程)
思维导图 UDP基础编程(单播) 1.流程图 服务器:短信的接收方 创建套接字 (socket)-----------------------------------------》有手机指定网络信息-----------------------------------------------》有号码绑定套接字 (bind)--------------…...

JVM虚拟机:内存结构、垃圾回收、性能优化
1、JVM虚拟机的简介 Java 虚拟机(Java Virtual Machine 简称:JVM)是运行所有 Java 程序的抽象计算机,是 Java 语言的运行环境,实现了 Java 程序的跨平台特性。JVM 屏蔽了与具体操作系统平台相关的信息,使得 Java 程序只需生成在 JVM 上运行的目标代码(字节码),就可以…...
Webpack性能优化:构建速度与体积优化策略
一、构建速度优化 1、升级Webpack和Node.js 优化效果:Webpack 4比Webpack 3构建时间降低60%-98%。原因: V8引擎优化(for of替代forEach、Map/Set替代Object)。默认使用更快的md4哈希算法。AST直接从Loa…...

【MATLAB代码】基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),附源代码|订阅专栏后可直接查看
文章所述的代码实现了基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),针对传感器观测数据中存在的脉冲型异常噪声问题,通过非线性加权机制提升滤波器的抗干扰能力。代码通过对比传统KF与MCC-KF在含异常值场景下的表现,验证了后者在状态估计鲁棒性方面的显著优…...