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

2023-12-19 16:04

本文主要是介绍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/512821

相关文章

使用 sql-research-assistant进行 SQL 数据库研究的实战指南(代码实现演示)

《使用sql-research-assistant进行SQL数据库研究的实战指南(代码实现演示)》本文介绍了sql-research-assistant工具,该工具基于LangChain框架,集... 目录技术背景介绍核心原理解析代码实现演示安装和配置项目集成LangSmith 配置(可选)启动服务应用场景

Python创建Excel的4种方式小结

《Python创建Excel的4种方式小结》这篇文章主要为大家详细介绍了Python中创建Excel的4种常见方式,文中的示例代码简洁易懂,具有一定的参考价值,感兴趣的小伙伴可以学习一下... 目录库的安装代码1——pandas代码2——openpyxl代码3——xlsxwriterwww.cppcns.c

使用Navicat工具比对两个数据库所有表结构的差异案例详解

《使用Navicat工具比对两个数据库所有表结构的差异案例详解》:本文主要介绍如何使用Navicat工具对比两个数据库test_old和test_new,并生成相应的DDLSQL语句,以便将te... 目录概要案例一、如图两个数据库test_old和test_new进行比较:二、开始比较总结概要公司存在多

MySQL数据库函数之JSON_EXTRACT示例代码

《MySQL数据库函数之JSON_EXTRACT示例代码》:本文主要介绍MySQL数据库函数之JSON_EXTRACT的相关资料,JSON_EXTRACT()函数用于从JSON文档中提取值,支持对... 目录前言基本语法路径表达式示例示例 1: 提取简单值示例 2: 提取嵌套值示例 3: 提取数组中的值注意

查询SQL Server数据库服务器IP地址的多种有效方法

《查询SQLServer数据库服务器IP地址的多种有效方法》作为数据库管理员或开发人员,了解如何查询SQLServer数据库服务器的IP地址是一项重要技能,本文将介绍几种简单而有效的方法,帮助你轻松... 目录使用T-SQL查询方法1:使用系统函数方法2:使用系统视图使用SQL Server Configu

本地搭建DeepSeek-R1、WebUI的完整过程及访问

《本地搭建DeepSeek-R1、WebUI的完整过程及访问》:本文主要介绍本地搭建DeepSeek-R1、WebUI的完整过程及访问的相关资料,DeepSeek-R1是一个开源的人工智能平台,主... 目录背景       搭建准备基础概念搭建过程访问对话测试总结背景       最近几年,人工智能技术

Ollama整合open-webui的步骤及访问

《Ollama整合open-webui的步骤及访问》:本文主要介绍如何通过源码方式安装OpenWebUI,并详细说明了安装步骤、环境要求以及第一次使用时的账号注册和模型选择过程,需要的朋友可以参考... 目录安装环境要求步骤访问选择PjrIUE模型开始对话总结 安装官方安装地址:https://docs.

使用Python在Excel中创建和取消数据分组

《使用Python在Excel中创建和取消数据分组》Excel中的分组是一种通过添加层级结构将相邻行或列组织在一起的功能,当分组完成后,用户可以通过折叠或展开数据组来简化数据视图,这篇博客将介绍如何使... 目录引言使用工具python在Excel中创建行和列分组Python在Excel中创建嵌套分组Pyt

SQL Server数据库迁移到MySQL的完整指南

《SQLServer数据库迁移到MySQL的完整指南》在企业应用开发中,数据库迁移是一个常见的需求,随着业务的发展,企业可能会从SQLServer转向MySQL,原因可能是成本、性能、跨平台兼容性等... 目录一、迁移前的准备工作1.1 确定迁移范围1.2 评估兼容性1.3 备份数据二、迁移工具的选择2.1

Python中连接不同数据库的方法总结

《Python中连接不同数据库的方法总结》在数据驱动的现代应用开发中,Python凭借其丰富的库和强大的生态系统,成为连接各种数据库的理想编程语言,下面我们就来看看如何使用Python实现连接常用的几... 目录一、连接mysql数据库二、连接PostgreSQL数据库三、连接SQLite数据库四、连接Mo