惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

G
Google Developers Blog
Spread Privacy
Spread Privacy
V
Visual Studio Blog
爱范儿
爱范儿
Apple Machine Learning Research
Apple Machine Learning Research
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
GbyAI
GbyAI
Google DeepMind News
Google DeepMind News
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
V
V2EX
J
Java Code Geeks
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Blog — PlanetScale
Blog — PlanetScale
N
Netflix TechBlog - Medium
B
Blog RSS Feed
博客园 - 【当耐特】
有赞技术团队
有赞技术团队
The Register - Security
The Register - Security
Latest news
Latest news
The Cloudflare Blog
Project Zero
Project Zero
月光博客
月光博客
U
Unit 42
Vercel News
Vercel News
Attack and Defense Labs
Attack and Defense Labs
Know Your Adversary
Know Your Adversary
V
Vulnerabilities – Threatpost
F
Full Disclosure
Schneier on Security
Schneier on Security
Google Online Security Blog
Google Online Security Blog
MyScale Blog
MyScale Blog
L
Lohrmann on Cybersecurity
C
CERT Recently Published Vulnerability Notes
博客园 - 叶小钗
腾讯CDC
博客园 - 三生石上(FineUI控件)
T
The Blog of Author Tim Ferriss
D
Darknet – Hacking Tools, Hacker News & Cyber Security
博客园 - Franky
S
Security Affairs
Hacker News: Ask HN
Hacker News: Ask HN
Security Latest
Security Latest
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
MongoDB | Blog
MongoDB | Blog
D
DataBreaches.Net
SecWiki News
SecWiki News
Recorded Future
Recorded Future
NISL@THU
NISL@THU
Hacker News - Newest:
Hacker News - Newest: "LLM"
Cloudbric
Cloudbric

博客园_首页

Plist 二进制格式 Milvus 和 PGVector,哪个更好? OpenClaw 已过时?在 VS Code 中运行 Hermes Agent! 第30篇文章:一个大三计科生的自白 Manim如何在数学公式中完美显示中文? Docker 部署 RocketMQ 5 并发编程核心概念辨析 C#事务处理最佳实践:别再让“主表存了、明细丢了”的破事发生 CLI 是什么?为什么大厂突然集体卷命令行? 【从0到1构建一个ClaudeAgent】协作-自主Agent UIImageView 设置图片不生效的原因排查 最小二乘问题详解20:无先验约束下的增量式SFM自由网平差 痞子衡嵌入式:大话双核i.MXRT1180之XIP应用里借助MU实现可靠Flash IAP的方法 AI Chat 封装, SemanticKerne.AiProvider.Unified 已发布 Windows下右键编辑js文件无法打开记事本——在注册表中使用环境变量 在后台服务中使用 Scoped 服务,为什么总是报错? H200 安装驱动并使用sglang启动模型 wireshark 抓包Trap上报告警内容 我用 AI 辅助开发了一系列小工具(2):图片压缩工具 [A Primer On MC and CC] 2.1 Memory Consistency 1 - 指令重排序和 SC 模型 Oracle数据库SCN推进技术详解与实践指南 玩转控件:封装个带图片的Label控件 Claude Code 4.7 真正该升级的不是模型,而是你的工作流 前端小白一句话,AI 帮我做了个颜值拉满的桌面媒体播放器。当代码不再是门槛,一句话编程就是现实。 5. WorkBuddy: 小龙虾的灵魂三件套,让你的小龙虾不只是工具 SQLite 分片方案实战:三种分片策略的深度对比 告别简陋 UI!一款基于 Fluent Design 和基于 WinUI 的开源免费、现代化的 Avalonia UI 控件库 关于二进制排列组合枚举的总结 AI开发-python-LangGraph框架(3-27-LangGraph从零实现大模型智能决策工作流) ElasticSearch主分片和副本分片概念详解 【002】HTTPS 粗解:证书、TLS 握手与对后端配置的影响 Hermes Agent 一周暴涨五万 Star,但我劝你别急着追 明明连接的是Redis的DB0,为什么能查到DB3的数据? 【从0到1构建一个ClaudeAgent】协作-Agent团队 熟悉电子元器件之后,电子小白下一步该怎么走? MAF快速入门(23)通过C#类定义Skills .NET 高级开发 | 手写一个对象映射框架 FastAPI数据库ORM怎么选?我肝了三个Demo后,终于不再纠结了 mysqldump 参数拾遗:在遗忘与铭记之间 C# .NET 周刊|2026年3月5期 Claude code入门 - 陈彦斌 一文学习入门 ThingsBoard 开源物联网平台 GitHub 热门项目 | 2026年04月16日 如何为GIT设置全局勾子,为每次提交追加信息 Number.isFinite和isFinite与isNaN()和Number.isNaN的区别 PortSwigger SQL注入LAB2 推荐一个测试人必备的Skills,从功能到性能全搞定(附详细实操和安装下载方式) 筑基期:掌握Odoo基础核心知识点02(Odoo XML 开发方式详解) GLM模型这么火,咱们用vllm也咧一个呗! 深入理解 AbortController:从底层原理到跨语言设计哲学 字符串学习笔记 多租户系统框架的基础模块设计和分析设计 Apache SeaTunnel Zeta 为什么能做到“又快又稳”? AI开发-python-LangGraph框架(3-26-LangGraph基本概念及第一个简单样例) Vue 3 组件通信,别只会用 Props 和 Emits 了,这几个狠活儿你得看看 ElasticSearch7.X版本配置密码 用Manim实现动态交点计算--从一个动点问题说起 团结引擎+Addressable+Instant Game打包抖音小游戏 function call 实战:让 LLM 自动判断 pod 异常、调用日志工具并完成故障分析 bubseek —— 让 Agent 的足迹,变成团队的洞察 通过 C# 读取并导出 PDF 书签 如何用 GitHub Actions 实现 Steam 自动化发布 【从0到1构建一个ClaudeAgent】并发-后台任务 .NET 高级开发 | 定制 ASP.NET Core 框架 电子小白:什么是运算放大器(运放) zero2Agent:面向大厂面试的 Agent 工程教程,从概念到生产的完整学习路线 堆上的ORW HC32F460 USB CDC通信异常:非对齐访问异常排查 20260413-Hyperbridge 攻击事件:发生在默克尔山上的验证绕过 那些喊着AI 要淘汰你的人,正在靠你的焦虑赚大钱! 深度学习进阶(八)Swin Transformer 最小二乘问题详解19:带先验约束的增量式SFM优化与实现 SnapTranslate 3.0 正式发布:全局划词翻译 + 完整英语学习闭环,一站式搞定查词、记词、复习 工作的意义、工作的困难认知再思考 .NET + AI 进阶实战:基于类的技能开发 - 打造可治理的 Agent 能力模块 【从0到1构建一个ClaudeAgent】规划与协调-技能 上周热点回顾(4.6-4.12) 电子小白的工具三件套:面包板、杜邦线、万能板 单表五亿数据的查询优化 | Mysql、StarRocks 2. WorkBuddy:从“我是谁”到“帮我干活” C# 如何减少代码运行时间:7 个实战技巧 基于HelixToolkit.SharpDX 渲染3D模型 - 笺上知微 从零开始的双臂具身VLA起源及现阶段发展综述 - SkyXZ 记对 xonsh shell 的使用, 脚本编写, 迁移及调优 - pluvium27 受够了Vibe Coding的失控?换个起点,让AI事半功倍 从开始配置漏洞环境到漏洞复现流程 - 難しい 关于10年工作经验的程序员对OpenClaw的实战经验分享以及看法 - 虚无境 Any metadata 的内存布局 C# .NET 周刊|2026年3月2期 - InCerry 我帮你测过了,测试圈排名第二的 Skill 依然很牛逼 Skill Discovery | 无监督技能发现的经典工作总结 - MoonOut 上下文工程是什么?过时了么?一文讲明白! - 一枫说码 开了 TUN 模式还是直连?90% 的人都踩过这个坑 AScript扩展多种脚本语言 - rockey627 AI 学习笔记:Agent 的记忆机制 你能被装进一个文件里吗?——7 万人把同事"蒸馏"成了 AI - 我没有三颗心脏 Claude Code 通关手册(七):给 AI 装上技能包——Skills 完全指南 - 暮色之狐 在浏览器中快速编辑代码:VSCode Web 集成实践 - Newbe36524 蒸馏自己 skill?基于 Deepseek 的蒸馏器,丐版蒸馏方式,简单便捷 - To_Carpe_Diem Spring AI Aliababa和AgentScope,哪个更好? - 苏三说技术
Oracle Deep Data Security (Deep Sec) 初体验
AlfredZhao · 2026-05-13 · via 博客园_首页

关于数据安全,之前介绍过的 Oracle RAS 虽然强大,但规则定义还是太复杂,如今 Oracle 推出的 Deep Data Security (Deep Sec) 重新定义了AI智能体时代的数据安全玩法,不但继承了RAS的核心功能,而且其提供的直接使用声明式SQL来配置的方法,也让AI时代的数据安全从此变得既简单又可控。

01 | 前提条件:Oracle AI Database 需升级到23.26.2

因为 Deep Sec 是在 23.26.2 引入的新功能,所以软件版本要求 Oracle AI Database (23.26.2 or later),目前这个RU已经可以在MOS下载到了。

笔者目前的测试环境还是23.26.1,所以需要下载应用这个补丁:

  • Patch 39093711: DATABASE RELEASE UPDATE 23.26.2.0.0

注意:readme中建议用于应用补丁的opatch建议在12.2.0.1.49或以上,执行下面命令查询opatch版本,如果你的opatch版本也不符合要求,可以通过搜索 6880880 下载最新的opatch版本。

$ $ORACLE_HOME/OPatch/opatch version

笔者的opatch版本不满足需求,所以选择下载最新的opatch版本:

OPatch比较小,下载后的文件名为:

  • p6880880_230000_Linux-x86-64.zip

然后我们更新opatch,再用新的opatch应用23.26.2的补丁,直接按照readme操作即可。考虑到如今AI时代下,数据库的使用者自身未必都有DBA经验,也未必能找到DBA帮忙,且这种基础环境的操作还是不太建议全权交给AI(因为不同版本补丁是可能有细微差异的,AI可能出错),最终需要真人来确认复核比较稳妥,所以这里列下笔者操作的关键命令参考,完整细节还是参考readme仔细核对:

首先,备份之前的OPatch,解压新的OPatch,确认已成功替换新的opatch版本,操作如下:

[oracle@alfred-aibs-db ~]$ cd $ORACLE_HOME
[oracle@alfred-aibs-db dbhome_1]$ mv OPatch OPatch_bak
[oracle@alfred-aibs-db dbhome_1]$ unzip /u01/media/p6880880_230000_Linux-x86-64.zip 
[oracle@alfred-aibs-db dbhome_1]$ $ORACLE_HOME/OPatch/opatch version
OPatch Version: 12.2.0.1.51

OPatch succeeded.

确认opatch版本已经是目前最新的 OPatch Version: 12.2.0.1.51。

然后使用这个opatch来应用补丁,按照补丁包中的readme说明操作即可,有些参数readme可能忘记标明了,手工根据实际情况,补上即可,笔者环境执行相关命令如下:

unzip p39093711_230000_Linux-x86-64.zip
cd 39093711
$ORACLE_HOME/OPatch/opatch prereq CheckMinimumOPatchVersion -ph /u01/media/39093711
$ORACLE_HOME/OPatch/opatch prereq CheckConflictAgainstOHWithDetail -phBaseDir /u01/media/39093711

确认这些预检查都正常验证通过:

笔者这里单实例,需要停止数据库和监听:

If this is not an Oracle RAC environment, shut down all instances and listeners associated with the Oracle home that you are updating. For more information, see Oracle AI Database Administrator's Guide.

[oracle@alfred-aibs-db 39093711]$ lsnrctl stop
[oracle@alfred-aibs-db 39093711]$ sqlplus / as sysdba
SQL> shutdown immediate;

确认正常关闭后,然后应用补丁:

$ cd /u01/media/39093711
$ $ORACLE_HOME/OPatch/opatch apply

碰到交互式确认的地方,选择y即可,基本都是问你是否确认执行,是否已关闭数据库并准备好打补丁了。

耐心等个几分钟,补丁就应用好了:

下一步继续按readme执行,启库,执行datapatch,这一过程又需要再等几分钟:

[oracle@alfred-aibs-db 39093711]$ sqlplus / as sysdba
SQL> startup
SQL> alter pluggable database all open;
SQL> quit
[oracle@alfred-aibs-db OPatch]$ ./datapatch -sanity_checks
[oracle@alfred-aibs-db OPatch]$ ./datapatch -verbose

执行完成后检查日志有无报错,可以跑下utlrp这个重新编译无效对象:

[oracle@alfred-aibs-db OPatch]$ export PATH=$PATH:$ORACLE_HOME/bin
[oracle@alfred-aibs-db OPatch]$ cd $ORACLE_HOME/rdbms/admin
[oracle@alfred-aibs-db admin]$ $ORACLE_HOME/perl/bin/perl $ORACLE_HOME/rdbms/admin/catcon.pl -n 1 -e -b utlrp -d $ORACLE_HOME/rdbms/admin utlrp.sql

确认已升级成功23.26.2:

最后启动下监听,恢复对外服务。

[oracle@alfred-aibs-db admin]$ lsnrctl start

02 | 测试验证Deep Sec的功能效果

本文测试验证当没有IAM集成的场景下,如何利用 Local End User 配置 Deep Sec 的功能,并验证效果:

参考官方文档link:

① 构造最小示例数据

-- 笔者本次测试用到的PDB:orclpdb1
ALTER SESSION SET CONTAINER = orclpdb1;

-- Create the HR user
-- 注:这里是创建一个“没有密码、无法直接登录”的模式(Schema)用户 HR
CREATE USER hr NO AUTHENTICATION
  DEFAULT TABLESPACE users
  QUOTA UNLIMITED ON users;
 
-- Create the employees table
CREATE TABLE hr.employees (
    employee_id   NUMBER PRIMARY KEY,
    first_name    VARCHAR2(50),
    last_name     VARCHAR2(50),
    email         VARCHAR2(128),
    manager       VARCHAR2(128),
    ssn           VARCHAR2(20),
    salary        NUMBER(10,2),
    phone         VARCHAR2(20)
);

-- 插入示例数据
INSERT INTO hr.employees VALUES
  (100, 'Victoria', 'Williams', 'vwilliams',
   NULL, '219-09-9999', 13000, '555-0100');
 
INSERT INTO hr.employees VALUES
  (200, 'Marvin', 'Anderson', 'manderson',
   'vwilliams', '457-55-5462', 12030, '555-0200');
 
INSERT INTO hr.employees VALUES
  (300, 'Chris', 'Evans', 'cevans',
   'vwilliams', '321-12-4567', 6900, '555-0300');
 
INSERT INTO hr.employees VALUES
  (400, 'Emma', 'Baker', 'ebaker',
   'manderson', '733-02-9821', 8200, '555-0400');
 
INSERT INTO hr.employees VALUES
  (500, 'Taylor', 'Mills', 'tmills',
   'manderson', '558-76-1243', 9000, '555-0500');
 
COMMIT;

示例数据准备好是这样,全表只有5行数据,以方便读者更直观的看到演示效果:

② 创建Local End Users

注意这里的 End User 不是传统意义上的数据库用户。

CREATE END USER "manderson" IDENTIFIED BY "Test_20260513";
CREATE END USER "ebaker" IDENTIFIED BY "Test_20260513";

虽然上面的SQL是在数据库中执行,但其本质区别是这种 End User 用户并没有自己的schema,没有任何的数据库对象实体。只是用于细粒度数据访问:

They receive fine-grained data access through data grants assigned to their data roles.

当一个 End User 登录到数据库,

ORA_END_USER_CONTEXT.username returns their user name.
The data grants in this chapter use predicates that compare this value against the email and manager columns of the hr.employees table. For the predicates to match, the local end-user names you create must match the values stored in those columns.

③ 配置Data Roles

注意这里创建的 Data Role 目前只赋予了连接会话的权限:

-- Create data roles that are managed locally in the database
CREATE DATA ROLE employee_role;
CREATE DATA ROLE manager_role;
 
-- Create a standard database role for connection privileges
CREATE ROLE db_role;
GRANT CREATE SESSION TO db_role;
 
-- Grant the connection privileges to the data role used for direct logon
GRANT db_role TO employee_role;
GRANT db_role TO manager_role;

将上面创建好的 Data Role 再赋给对应的终端用户:
终端用户 manderson 拥有两个 Data Role
终端用户 ebaker 拥有一个 Data Role

-- Grant data roles to Marvin (manager and employee)
GRANT DATA ROLE manager_role TO "manderson";
GRANT DATA ROLE employee_role TO "manderson";
 
-- Grant the employee data role to Emma
GRANT DATA ROLE employee_role TO "ebaker";

④ 配置Data Access Control

这个是重头戏,关于数据访问授权的详细规则具体如何设定全都在这部分,之前的RAS就是各种调用复杂的内部定义,如今在 Deep Sec 中只需要声明式的SQL即可实现,具体定义的内容也容易让人理解。

Define data grants to control which rows and columns each end user can access. In data grant predicates, ORA_END_USER_CONTEXT.username returns the end user's name from the current end-user security context.

创建一个数据授权(Data Grant),允许员工仅查看他们自己的记录。

CREATE DATA GRANT hr.employees_own_record
  AS SELECT
  ON hr.employees
  WHERE email = ORA_END_USER_CONTEXT.username
  TO employee_role;

创建一个数据授权,允许经理查看其直系下属的记录(但不包括 SSN 字段)。

CREATE DATA GRANT hr.manager_direct_reports
  AS SELECT (ALL COLUMNS EXCEPT ssn)
  ON hr.employees
  WHERE manager = ORA_END_USER_CONTEXT.username
  TO manager_role;

⑤ 测试验证Deep Sec的效果

分别使用不同的 END USER 登录,验证Deep Sec实现的细粒度数据访问效果。

我们主要关注,不同 END USER 登录,ORA_END_USER_CONTEXT.username 值的变化,以及同样查询 hr.employees 的记录差异:

相同的测试SQL如下,方便直接拷贝:

SELECT ORA_END_USER_CONTEXT.username FROM dual;

SET LINESIZE 120
SET TRIMSPOOL ON
SET PAGESIZE 50

COL FIRST_NAME FORMAT A10
COL LAST_NAME  FORMAT A10
COL EMAIL      FORMAT A20
COL MANAGER    FORMAT A15
COL SSN        FORMAT A11
COL SALARY     FORMAT 99999.9
COL PHONE      FORMAT A12

SELECT * FROM hr.employees;

场景1:使用 manderson 终端用户登录测试:

sqlplus '"manderson"'/Test_20260513@//localhost:1521/ORCLPDB1

从场景1的结果可以看到, manderson 终端用户登录进来后,ORA_END_USER_CONTEXT.username 值是 manderson,查询员工表,能看到自己的记录,同时能看到所有下属的记录,但无法看到下属的SSN字段值。

场景2:使用 ebaker 终端用户登录测试:

sqlplus '"ebaker"'/Test_20260513@//localhost:1521/ORCLPDB1

从场景2的结果可以看到, ebaker 终端用户登录进来后,ORA_END_USER_CONTEXT.username 值是 ebaker,查询员工表,只能看到自己的记录。

符合我们之前的定义规则。

03 | 快速部署Deep Sec的方法

上面为了让用户能看清楚每一步都做了什么,是分步骤演示执行的。

如果用户已经了解Deep Sec的机制,想快速通过集成SQL脚本,一键部署或清理测试环境,官方也有提供示例脚本,可以直接使用或者根据自己实际情况修改。

A.1 Scripts for Direct Logon with Local End Users

至此,Oracle Deep Data Security (Deep Sec) 初体验已完成,后续有时间再具体看下如何将 Deep Sec 和 AI应用结合起来使用。