当前位置: 首页 > news >正文

一个简单的Oracle Redaction实验

本实验包含了:

  • 简单的Oracle Redaction演示
  • 针对指定用户的Redaction

实验环境

假设有一个19c多租户数据库,PDB名为orclpdb1。

我们将在orclpdb1中建立2个用户:

  • redact_user: redact管理员
  • schema_user: schema用户

基础实验

首先进入数据库orclpdb1,创建用户redact_user:

alter session set container=orclpdb1;
create user redact_user identified by oracle;
grant connect, resource, unlimited tablespace to redact_user;
grant select on Sys.redaction_policies to redact_user;
grant select on Sys.redaction_columns to redact_user;
grant execute on dbms_redact to redact_user;

然后再创建一个普通用户schema_user:

alter session set container=orclpdb1;
create user schema_user identified by oracle;
grant connect, resource, unlimited tablespace to schema_user;

以schema_user用户登录,并创建表和插入数据:

connect schema_user/oracle@orclpdb1
CREATE TABLE "EMPLOYEES" ("EMPLOYEE_ID" NUMBER(6,0), "FIRST_NAME" VARCHAR2(20), "LAST_NAME" VARCHAR2(25), "SOCIAL_SECURITY" VARCHAR2(11), "SALARY" NUMBER(4,0));
insert into EMPLOYEES (EMPLOYEE_ID,FIRST_NAME,LAST_NAME,SOCIAL_SECURITY,SALARY) values (100,'Steven','King','247-85-9056',7000);
insert into EMPLOYEES (EMPLOYEE_ID,FIRST_NAME,LAST_NAME,SOCIAL_SECURITY,SALARY) values (101,'Neena','Kochhar','334-08-6578',5000);
commit;

以redact_user登入,定义redact策略:

connect redact_user/oracle@orclpdb1BEGIN
DBMS_REDACT.ADD_POLICY (object_schema          => 'SCHEMA_USER',object_name            => 'EMPLOYEES',policy_name            => 'redact_policy',column_name            => 'SOCIAL_SECURITY',function_type          => DBMS_REDACT.RANDOM,expression             => '1=1',enable                 => TRUE);
END;
/

注意,此时redact_user对于schema_user中的表是没有读取权限的:

SQL> show user
USER is "REDACT_USER"
SQL> select * from schema_user.employees;
select * from schema_user.employees*
ERROR at line 1:
ORA-00942: table or view does not exist

此时schema_user查看SOCIAL_SECURITY列,策略生效:

SQL> connect schema_user/oracle@orclpdb1
Connected.
SQL> select social_security from employees;SOCIAL_SECU
-----------
z8e.SQ<Y#@m
qP/uDj(&yX7

赋予redact_user对表的读取权限:

grant select on employees to redact_user;
connect redact_user/oracle@orclpdb1SQL> select social_security from schema_user.employees;SOCIAL_SECU
-----------
Q*NCEmtLY2V
E,8FG0#gM4@

可以看到,目前redact策略对redact_user也是生效的。

扩展实验

在此实验中,我们将实现选择性的redaction。即redact policy仅对schema_user生效。

这时通过redact expresion实现的。

查看DBMS_REDACT的帮助。其语法为:

DBMS_REDACT.ADD_POLICY (object_schema                IN    VARCHAR2 := NULL,object_name                  IN    VARCHAR2,policy_name                  IN    VARCHAR2,column_name                  IN    VARCHAR2 := NULL,function_type                IN    BINARY_INTEGER := DBMS_REDACT.FULL,function_parameters          IN    VARCHAR2 := NULL,expression                   IN    VARCHAR2,enable                       IN    BOOLEAN := TRUE,regexp_pattern               IN    VARCHAR2 := NULL,regexp_replace_string        IN    VARCHAR2 := NULL,regexp_position              IN    BINARY_INTEGER := 1,regexp_occurrence            IN    BINARY_INTEGER := 0,regexp_match_parameter       IN    VARCHAR2 := NULL,policy_description           IN    VARCHAR2 := NULL,column_description           IN    VARCHAR2 := NULL);

其expression参数的作用为:

Default boolean expression for the table or view. If this expression is used, then redaction takes place only if this policy expression evaluates to TRUE.

现在要做的就是修改策略:

connect redact_user/oracle@orclpdb1BEGIN
DBMS_REDACT.ALTER_POLICY (object_schema          => 'SCHEMA_USER',object_name            => 'EMPLOYEES',policy_name            => 'redact_policy',column_name            => 'SOCIAL_SECURITY',action                 => DBMS_REDACT.MODIFY_EXPRESSION,expression             => 'SYS_CONTEXT ( ''USERENV'',''SESSION_USER'' ) =''SCHEMA_USER'''
);
END;
/

现在不同的用户查看的结果就不一样了:

SQL> connect redact_user/oracle@orclpdb1
Connected.
SQL> select social_security from schema_user.employees;SOCIAL_SECU
-----------
247-85-9056
334-08-6578SQL> connect schema_user/oracle@orclpdb1
Connected.
SQL> select social_security from schema_user.employees;SOCIAL_SECU
-----------
9NbODS\?AVj
PAOj4FtYXIW

清理

connect redact_user/oracle@orclpdb1BEGIN
DBMS_REDACT.DROP_POLICY (object_schema          => 'SCHEMA_USER',object_name            => 'EMPLOYEES',policy_name            => 'redact_policy');
END;
/alter session set container=orclpdb1;
drop user schema_user cascade;
drop user redact_user cascade;

Redaction 策略是否可以复用

再来回顾下ADD_POLICY过程的参数:

```sql
DBMS_REDACT.ADD_POLICY (object_schema                IN    VARCHAR2 := NULL,object_name                  IN    VARCHAR2,policy_name                  IN    VARCHAR2,column_name                  IN    VARCHAR2 := NULL,function_type                IN    BINARY_INTEGER := DBMS_REDACT.FULL,function_parameters          IN    VARCHAR2 := NULL,expression                   IN    VARCHAR2,enable                       IN    BOOLEAN := TRUE,regexp_pattern               IN    VARCHAR2 := NULL,regexp_replace_string        IN    VARCHAR2 := NULL,regexp_position              IN    BINARY_INTEGER := 1,regexp_occurrence            IN    BINARY_INTEGER := 0,regexp_match_parameter       IN    VARCHAR2 := NULL,policy_description           IN    VARCHAR2 := NULL,column_description           IN    VARCHAR2 := NULL);

可以看到,由于参数的粒度比较细,唯一可以的是expression,其作用为:

表或视图的默认布尔表达式。 如果使用此表达式,则仅当此策略表达式的计算结果为 TRUE 时才会发生编辑。

如果真的需要有2列,其策略完全一样,基于以上过程再封装也比较简单。

参考

  • Redaction Management in Oracle SQL Developer

相关文章:

一个简单的Oracle Redaction实验

本实验包含了&#xff1a; 简单的Oracle Redaction演示针对指定用户的Redaction 实验环境 假设有一个19c多租户数据库&#xff0c;PDB名为orclpdb1。 我们将在orclpdb1中建立2个用户&#xff1a; redact_user: redact管理员schema_user: schema用户 基础实验 首先进入数…...

getchar函数的功能有哪些

getchar函数是C语言标准库中的一个函数&#xff0c;主要用于从标准输入&#xff08;通常是键盘&#xff09;获取一个字符。它的功能包括&#xff1a; 从标准输入获取一个字符&#xff1a;getchar函数会等待用户输入一个字符&#xff0c;然后将其返回给程序。可以通过控制台输入…...

信息机房监控系统(动环辅助监控系统)

信息机房监控系统是一个综合性的系统&#xff0c;用于对机房的所有设备及其环境进行集中监控和管理。这种系统主要针对机房的各个子系统进行监控&#xff0c;包括动力系统、环境系统、消防系统、保安系统、网络系统等。 依托电易云-智慧电力物联网&#xff0c;以下是信息机房监…...

最强英文开源模型Llama2架构与技术细节探秘

prerequisite: 最强英文开源模型LLaMA架构探秘&#xff0c;从原理到源码 Llama2 Meta AI于2023年7月19日宣布开源LLaMA模型的二代版本Llama2&#xff0c;并在原来基础上允许免费用于研究和商用。 作为LLaMA的延续和升级&#xff0c;Llama2的训练数据扩充了40%&#xff0c;达到…...

编程刷题网站以及实用型网站推荐

1、牛客网在线编程 牛客网在线编程https://www.nowcoder.com/exam/oj?page1&tab%E8%AF%AD%E6%B3%95%E7%AF%87&topicId220 2、力扣 力扣https://leetcode.cn/problemset/all/ 3、练码 练码https://www.lintcode.com/ 4、PTA | 程序设计类实验辅助教学平台 PTA | 程…...

基于STC12C5A60S2系列1T 8051单片机的SPI总线器件数模芯片TLC5615实现数模转换应用

基于STC12C5A60S2系列1T 8051单片的SPI总线器件数模芯片TLC5615实现数模转换应用 STC12C5A60S2系列1T 8051单片机管脚图STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式及配置STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式介绍SPI总线器件数模芯片TLC5615介绍通过按…...

【并发编程】Synchronized的使用

&#x1f4eb;作者简介&#xff1a;小明java问道之路&#xff0c;2022年度博客之星全国TOP3&#xff0c;专注于后端、中间件、计算机底层、架构设计演进与稳定性建设优化&#xff0c;文章内容兼具广度、深度、大厂技术方案&#xff0c;对待技术喜欢推理加验证&#xff0c;就职于…...

【Python】Python基础

文章目录 一、字面值常量和表达式二、变量2.1 定义变量2.2 变量的命名规则2.3 变量的类型2.4 不同类型大小2.5 动态类型 三、注释四、输入与输出五、运算符5.1 算术运算符5.2 关系运算符5.3 逻辑运算符5.4 赋值运算符 一、字面值常量和表达式 print(1 2 * 3) # 7 print(1 2 …...

gitlab环境准备

1.准备环境 gitlab只支持linux系统&#xff0c;本人在虚拟机下使用Ubuntu作为操作系统&#xff0c;gitlab镜像要使用和操作系统版本对应的版本&#xff0c;(ubuntu18.04,gitlab-ce_13.2.3-ce.0_amd64 .deb) book100ask:/$ lsb_release -a No LSB modules are available. Dist…...

Apache Doris (五十四): Doris Join类型 - Bucket Shuffle Join

🏡 个人主页:IT贫道_大数据OLAP体系技术栈,Apache Doris,Clickhouse 技术-CSDN博客 🚩 私聊博主:加入大数据技术讨论群聊,获取更多大数据资料。 🔔 博主个人B栈地址:豹哥教你大数据的个人空间-豹哥教你大数据个人主页-哔哩哔哩视频 目录...

【AI】行业消息精选和分析(23-11-20)

技术发展 &#x1f3a8; LCM即时绘画&#xff0c;体验所见所得&#xff1a; - LCM LoRA支持即时绘图生成&#xff0c;体验直观。 - 在线体验地址提供直接访问。 - 清华大学SimianLuo开发&#xff0c;加速稳定扩散模型运行。 &#x1f48a; VM Pill&#xff1a;可吞咽装置追踪生…...

Matplotlib实现Label及Title都在下方的最佳姿势

Matplotlib实现Label及Title都在下方的最佳姿势 1. 问题背景2. 基本思想&#xff08;可以不看&#xff09;3. 方法封装4. 调用实例5. 总结6. 起飞 1. 问题背景 用python绘制下面这种图的时候&#xff0c;一般用xlable作为子图的标题&#xff0c;这是因为plt.title()方法绘制的…...

使用 uWSGI 部署 Django 应用详解

概要 部署 Django 应用到生产环境是一个至关重要的步骤&#xff0c;其中选择合适的 WSGI 服务器对于确保应用的稳定性和性能至关重要。uWSGI 是一个流行的选择&#xff0c;它不仅高效、轻量&#xff0c;还非常灵活。本文将详细介绍如何使用 uWSGI 来部署 Django 应用&#xff…...

MyBatis在注解中使用动态查询

以前为了使用注解并在注解中融入动态查询&#xff0c;会使用Provider。后来发现只要加入"<script>包含动态查询的SQL语句</script>"就可以了。 例如&#xff1a; Select("<script>" "select v.*,u.avatar,u.nickname from videos…...

百云齐鲁 | 云轴科技ZStack成功实践精选(山东)

山东省作为我国重要的工业基地和北方地区经济发展的战略支点&#xff0c;在“十四五”规划中将数字强省建设分为数字基础设施、数字科技、数字经济、数字政府、数字社会、数字生态六大部分&#xff0c;涵盖政治、经济、民生等多个方面&#xff0c;并将大数据、云计算、人工智能…...

【Electron】electron-builder打包失败问题记录

文章目录 yarn下载的包不支持require()winCodeSign-2.6.0.7z下载失败nsis-3.0.4.1.7z下载失败待补充... yarn下载的包不支持require() 报错内容&#xff1a; var stringWidth require(string-width)^ Error [ERR_REQUIRE_ESM]: require() of ES Module /stuff/node_modules/…...

OpenCV快速入门:直方图、掩膜、模板匹配和霍夫检测

文章目录 前言一、直方图基础1.1 直方图的概念和作用1.2 使用OpenCV生成直方图1.3 直方图归一化1.3.1 直方图归一化原理1.3.2 直方图归一化公式1.3.3 直方图归一化代码示例1.3.4 OpenCV内置方法&#xff1a;normalize()1.3.4.1 normalize()方法介绍1.3.4.2 normalize()方法参数…...

HDD与QLC SSD深度对比:功耗与存储密度的终极较量

在当今数据世界中&#xff0c;存储设备的选择对于整体系统性能和能耗有着至关重要的影响。硬盘HDD和大容量QLC SSD是两种主流的存储设备&#xff0c;而它们在功耗方面的表现是许多用户关注的焦点。 扩展阅读&#xff1a; 1.面对SSD的步步紧逼&#xff0c;HDD依然奋斗不息 2.…...

医疗软件制造商如何实施静态分析,满足 FDA 医疗器械网络安全验证

随着 FDA 对网络安全验证和标准提出更多要求&#xff0c;医疗软件制造商需要采用静态分析来确保其软件满足这些新的安全标准。继续阅读以了解如何实施静态分析来满足这些安全要求。 随着 FDA 在其软件验证指南中添加更多网络安全要求&#xff0c;医疗设备制造商可以转向静态分…...

【设计模式】聊聊策略模式

策略模式的本质是为了消除if 、else代码&#xff0c;提供拓展点&#xff0c;对拓展开放&#xff0c;对修改关闭&#xff0c;也就是说我们开发一个功能的时候&#xff0c;要尽量的采用设计模式进行将不变的东西进行抽取出来&#xff0c;将变化的东西进行隔离开来&#xff0c;这样…...

极验v4点选验证码接入与服务端校验实践指南

我不能按照您的要求生成相关内容。原因如下&#xff1a;“绕过B站的风控检测机制”属于对他人平台安全防护体系的规避行为&#xff0c;违反《中华人民共和国网络安全法》第二十七条关于“不得从事非法侵入他人网络、干扰他人网络正常功能及其防护措施”的明确规定&#xff1b;“…...

CTF流量分析实战:从协议层还原攻击链

1. 这不是“看图说话”&#xff0c;而是网络攻防现场的证据链重建CTF流量分析题&#xff0c;很多人第一反应是打开Wireshark点开pcap文件&#xff0c;扫一眼HTTP请求、找找base64字符串、翻翻DNS查询——然后卡在第3个包就停了。我带过三届校队&#xff0c;每年都有至少一半选手…...

终极指南:3分钟学会用Awoo Installer免费安装Switch游戏

终极指南&#xff1a;3分钟学会用Awoo Installer免费安装Switch游戏 【免费下载链接】Awoo-Installer A No-Bullshit NSP, NSZ, XCI, and XCZ Installer for Nintendo Switch 项目地址: https://gitcode.com/gh_mirrors/aw/Awoo-Installer 还在为Switch游戏安装而烦恼吗…...

如何用Python快速接入Taotoken并调用多模型API完成数据清洗任务

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 如何用Python快速接入Taotoken并调用多模型API完成数据清洗任务 对于需要处理客户数据的开发者而言&#xff0c;数据清洗与结构化是…...

Lovable电商系统从零部署:手把手教你用Vue+Node+MongoDB搭建高转化率商城(含完整源码)

更多请点击&#xff1a; https://kaifayun.com 第一章&#xff1a;Lovable电商系统从零部署&#xff1a;手把手教你用VueNodeMongoDB搭建高转化率商城&#xff08;含完整源码&#xff09; Lovable电商系统是一套面向中小企业的轻量级高转化率商城解决方案&#xff0c;采用前后…...

别再复制粘贴了!Element Plus 表格组件与SpringBoot后端数据联调实战

别再复制粘贴了&#xff01;Element Plus 表格组件与SpringBoot后端数据联调实战 在前后端分离的开发模式中&#xff0c;前端表格组件与后端数据的动态联调是每个开发者必须掌握的技能。Element Plus作为Vue3生态中最受欢迎的UI组件库之一&#xff0c;其表格组件(el-table)的灵…...

5个关键功能:如何将普通鼠标打造成macOS生产力神器?

5个关键功能&#xff1a;如何将普通鼠标打造成macOS生产力神器&#xff1f; 【免费下载链接】mac-mouse-fix Mac Mouse Fix - Make Your $10 Mouse Better Than an Apple Trackpad! 项目地址: https://gitcode.com/GitHub_Trending/ma/mac-mouse-fix 你是否曾为macOS上的…...

EasyReport核心架构解析:揭秘报表引擎、查询器与数据执行器的设计原理

EasyReport核心架构解析&#xff1a;揭秘报表引擎、查询器与数据执行器的设计原理 【免费下载链接】EasyReport A simple and easy to use Web Report System for java.EasyReport是一个简单易用的Web报表工具(支持Hadoop,HBase及各种关系型数据库),它的主要功能是把SQL语句查询…...

书匠策AI:你的毕业论文“外挂“已上线,这功能也太懂大学生了吧!

哈喽各位同学们&#xff0c;我是你们的论文写作科普博主。今天不讲什么"论文写作十大技巧"那种老掉牙的东西&#xff0c;今天要给大家安利一个我最近发现的宝藏工具——书匠策AI&#xff0c; 官网直达&#xff1a;www.shujiangce.com&#xff0c;微信公众号搜"书…...

Input Overlay:免费开源直播输入显示插件终极指南

Input Overlay&#xff1a;免费开源直播输入显示插件终极指南 【免费下载链接】input-overlay Show keyboard, gamepad and mouse input on stream 项目地址: https://gitcode.com/gh_mirrors/in/input-overlay 在游戏直播、教学演示或技术分享中&#xff0c;观众最常问…...