胖头鱼的技术专栏-431 AI Agent时代的数据安全方案:Oracle Deep Sec介绍(20260609)
数据库管理431期 2026-06-09
胖头鱼的技术专栏-431 AI Agent时代的数据安全方案:Oracle Deep Sec介绍(20260609)
作者:胖头鱼的鱼缸(尹海文)
Oracle ACE Pro: Database
PostgreSQL ACE
10年+数据库行业经验
拥有OCM 11g/12c/19c、MySQL 8.0 OCP、Exadata、CDP等认证
墨天轮MVP,ITPUB认证专家
圈内拥有“总监”称号,非著名社恐(社交恐怖分子)
全网同名:胖头鱼的鱼缸
ITPUB:yhw1809
除授权转载并标明出处外,均为“非法”抄袭

之前我制作的基于Oracle AI Database 26ai的记忆系统,现在已经全面更名为AI Agent Infra with OracleDB,是一套面向AI Agent的基础设施架构,为AI Agent提供记忆、知识、Agent 管理、Skill 分发、身份认证、加密存储、上下文分支等完整能力。。
核心设计理念是:将AI Agent运行所需的一切基础设施——记忆、知识、身份、技能、安全、分支——统一收敛于一个数据库内核之中,利用Oracle 26ai的引用分区、JSON关系二元性视图、属性图、向量搜索等原生能力,在数据库层实现基础设施的完整闭环,而非依赖外部微服务拼装。
社区版开源仓库地址为:https://github.com/Haiwen-Yin/AI-Agent-Infra-with-OracleDB-Community-Edition
在构建这个系统的过程中,我发现一个安全相关的问题,无论是基于Oracle还是PostgreSQL的版本,使用统一的数据库用户访问数据库时,即便SKILL.md规范写的如何严格,要求不能直接连接数据库,必须使用API,但由LLM驱动的AI Agent仍然可以依然可以绕过这些直接访问数据库,从而带来数据泄露和非授权数据操作的风险,这是本地存储数据库用户信息这种设计必然带来的问题。
在大多数数据库中都有行级安全功能,以Oracle为例常用的就是VPD(Virtual Private Database),但这需要创建大量的数据库用户,还需要编写并维护对应的PL/SQL函数,来控制每个用户可以看到的数据,维护难度很大。
在Oracle AI Database 26ai最新的版本23.26.2中(可查看数据库管理-第423期 Oracle AI DB 23.26.2新特性一览(20260504)),引入了一个面向AI Agent使用数据库的新功能Deep Data Security,很好的解决了AI时代数据安全隔离的问题。
什么是 Deep Data Security?
Oracle Deep Data Security(Deep Sec) 是Oracle AI Database 26ai引入的声明式数据安全框架,用于在数据库层面实现行级、列级和单元格级的访问控制。
与传统VPD(Virtual Private Database/DBMS_RLS)相比,Deep Sec是声明式的——你只需声明"谁能看到什么",数据库自动执行,无需编写和维护PL/SQL函数,极大的降低了数据库安全相关维护难度,更加便于AI Agent使用数据库。
核心概念
0. 用户创建与授权/测试数据创建
-- sysdba用户创建生产用户
create tablespace users datafile size 500m;
CREATE USER shop_admin IDENTIFIED BY oracle DEFAULT TABLESPACE USERS QUOTA UNLIMITED ON USERS;
GRANT CREATE SESSION, CREATE TABLE, CREATE SEQUENCE, CREATE PROCEDURE TO shop_admin;
GRANT CREATE END USER TO shop_admin;
GRANT CREATE END USER CONTEXT TO shop_admin;
GRANT CREATE ANY END USER CONTEXT TO shop_admin;
GRANT CREATE END USER SECURITY CONTEXT TO shop_admin;
GRANT CREATE DATA GRANT TO shop_admin;
GRANT CREATE ANY DATA GRANT TO shop_admin;
GRANT ADMINISTER ANY DATA GRANT TO shop_admin;
GRANT CREATE DATA ROLE TO shop_admin;
GRANT DROP DATA ROLE TO shop_admin;
GRANT GRANT ANY DATA ROLE TO shop_admin;
GRANT SET USE DATA GRANTS ONLY TO shop_admin;
GRANT ALTER END USER TO shop_admin;
GRANT DROP END USER TO shop_admin;
GRANT CREATE ANY CONTEXT TO shop_admin;
CREATE ROLE deep_sec_session_role;
GRANT CREATE SESSION TO deep_sec_session_role;
GRANT deep_sec_session_role TO shop_admin WITH ADMIN OPTION;
-- 使用shop_admin用户创建测试表并插入测试数据
CREATE TABLE merchants (
merchant_id VARCHAR2(32) PRIMARY KEY,
merchant_name VARCHAR2(100) NOT NULL,
category VARCHAR2(50)
);
CREATE TABLE orders (
order_id VARCHAR2(32) PRIMARY KEY,
merchant_id VARCHAR2(32) NOT NULL,
customer_name VARCHAR2(100),
product_name VARCHAR2(200),
amount NUMBER(10,2),
status VARCHAR2(20) DEFAULT 'PENDING',
created_at TIMESTAMP DEFAULT SYSTIMESTAMP
);
INSERT INTO merchants VALUES ('M_BEAUTY', '美妆小铺', '美妆');
INSERT INTO merchants VALUES ('M_ELEC', '数码商城', '数码');
INSERT INTO merchants VALUES ('M_FOOD', '吃货天堂', '美食');
INSERT INTO orders SELECT 'ORD_B_' || LEVEL, 'M_BEAUTY', '顾客' || LEVEL, '口红套装' || LEVEL, LEVEL * 99.9, 'PAID', SYSTIMESTAMP - LEVEL FROM DUAL CONNECT BY LEVEL <= 5;
INSERT INTO orders SELECT 'ORD_E_' || LEVEL, 'M_ELEC', '顾客' || LEVEL, '蓝牙耳机' || LEVEL, LEVEL * 299.9, 'SHIPPED', SYSTIMESTAMP - LEVEL FROM DUAL CONNECT BY LEVEL <= 5;
INSERT INTO orders SELECT 'ORD_F_' || LEVEL, 'M_FOOD', '顾客' || LEVEL, '零食礼包' || LEVEL, LEVEL * 49.9, 'DELIVERED', SYSTIMESTAMP - LEVEL FROM DUAL CONNECT BY LEVEL <= 5;
COMMIT;

1. Data Role(数据角色)
Data Role 是 Deep Sec 的权限载体,类似于数据库角色,但专门用于 Data Grant 授权。
CREATE DATA ROLE shop_admin_role;
CREATE DATA ROLE shop_merchant_role;
GRANT deep_sec_session_role TO shop_admin_role;
GRANT deep_sec_session_role TO shop_merchant_role;


这里需要注意的是给DATA ROLE授权,需要先授权给ROLE,再将ROLE授权给DATA ROLE。
2. Data Grant(数据授权)
Data Grant 是一条声明式的访问规则,指定"哪个 Data Role 可以看到哪些行/列"。
-- 管理员:看到所有商家和订单
CREATE DATA GRANT admin_full_access
AS SELECT, INSERT, UPDATE, DELETE
ON merchants
WHERE 1 = 1
TO shop_admin_role;
CREATE DATA GRANT admin_orders_full
AS SELECT, INSERT, UPDATE, DELETE
ON orders
WHERE 1 = 1
TO shop_admin_role;
-- 商家:只能看到自己店铺的数据
-- End User 名称 = 商家 ID(如 M_BEAUTY),Data Grant 谓词直接匹配
CREATE DATA GRANT merchant_own_shop
AS SELECT, UPDATE
ON merchants
WHERE merchant_id = ORA_END_USER_CONTEXT.username
TO shop_merchant_role;
CREATE DATA GRANT merchant_own_orders
AS SELECT, INSERT, UPDATE
ON orders
WHERE merchant_id = ORA_END_USER_CONTEXT.username
TO shop_merchant_role;

关键谓词变量:ORA_END_USER_CONTEXT —— 这是End User登录时自动填充的上下文对象,包含End User的身份信息。
3. End User(终端用户)
-- 为每个商家创建 End User(名称 = merchant_id,直接匹配 Data Grant 谓词)
CREATE END USER M_BEAUTY IDENTIFIED BY "beauty123";
GRANT DATA ROLE shop_merchant_role TO "M_BEAUTY";
CREATE END USER M_ELEC IDENTIFIED BY "elec123";
GRANT DATA ROLE shop_merchant_role TO "M_ELEC";
CREATE END USER M_FOOD IDENTIFIED BY "food123";
GRANT DATA ROLE shop_merchant_role TO "M_FOOD";
-- 管理员 End User(同时拥有 admin 角色)
CREATE END USER SHOP_ADMIN_EU IDENTIFIED BY "admin123";
GRANT DATA ROLE shop_admin_role TO "SHOP_ADMIN_EU";
End User是Deep Sec的核心身份模型。每个End User:
- 是一个数据库用户,可以直接登录
- 拥有
ORA_END_USER_CONTEXT(自动填充End User名称) - 被授予一个或多个Data Role
- 查询时,Data Grant谓词自动过滤结果
4. MAC(强制访问控制)
BEGIN
EXECUTE IMMEDIATE 'SET USE DATA GRANTS ONLY ON SHOP_ADMIN.merchants ENABLED';
EXECUTE IMMEDIATE 'SET USE DATA GRANTS ONLY ON SHOP_ADMIN.orders ENABLED';
END;
/

启用MAC后,所有访问路径(直查、视图、PL/SQL)都必须遵守Data Grant规则,无法绕过。
5. 权限控制演示
CONNECT M_BEAUTY/beauty123@127.0.0.1:1521/deep_sec
ALTER SESSION SET CURRENT_SCHEMA = SHOP_ADMIN;
SELECT * FROM merchants; -- 只返回 M_BEAUTY
SELECT * FROM orders; -- 只返回 5 行(美妆订单)
CONNECT M_ELEC/elec123@127.0.0.1:1521/deep_sec
ALTER SESSION SET CURRENT_SCHEMA = SHOP_ADMIN;
SELECT * FROM merchants; -- 只返回 M_ELEC
SELECT * FROM orders; -- 只返回 5 行(数码订单)
CONNECT SHOP_ADMIN_EU/admin123@127.0.0.1:1521/deep_sec
ALTER SESSION SET CURRENT_SCHEMA = SHOP_ADMIN;
SELECT * FROM merchants; -- 只返回全部 3 行
SELECT * FROM orders; -- 返回全部 15 行


Deep Sec vs VPD 对比
| 特性 | VPD (DBMS_RLS) | Deep Sec |
|---|---|---|
| 风格 | 过程式(写 PL/SQL 函数) | 声明式(写 WHERE 谓词) |
| 安全模型 | 可选(NULL 上下文返回 1=1) | 零信任(无上下文 = 无数据) |
| 绕过风险 | 可通过视图绕过 | MAC 阻止视图绕过 |
| 列级控制 | 需要额外函数 | 原生支持 |
| 维护成本 | 高(PL/SQL 函数调试困难) | 低(SQL 谓词直观) |
工作原理示意
┌─────────────────────────────────────────┐
│ Oracle Database 26ai │
│ │
End User A ──登录──→ │ ORA_END_USER_CONTEXT.username = 'A' │
│ ↓ │
│ Data Grant: WHERE owner = 'A' │
│ ↓ │
│ SELECT * FROM orders │
│ → 自动添加 WHERE owner = 'A' │
│ → 只返回 A 的订单 │
│ │
End User B ──登录──→ │ ORA_END_USER_CONTEXT.username = 'B' │
│ ↓ │
│ Data Grant: WHERE owner = 'A' │
│ ↓ │
│ SELECT * FROM orders │
│ → 自动添加 WHERE owner = 'B' │
│ → 只返回 B 的订单 │
│ │
AIADMIN ──登录──→ │ Schema Owner,不受 Data Grant 限制 │
│ → 返回所有订单 │
└─────────────────────────────────────────┘
核心优势:应用层无需任何过滤逻辑,数据库层面保证每个End User只能看到自己的数据。即使应用有bug,数据也不会泄露。
总结
本期演示了Oracle AI Database 26ai最新版本23.26.2新增功能Deep Data Security,为AI Agent带来了全新好用的数据安全隔离。
老规矩,知道写了些啥。
更多推荐


所有评论(0)