胖头鱼的技术专栏-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
除授权转载并标明出处外,均为“非法”抄袭

914fcc7ad57defa7868c3be1ca7fb4f5.jpg
之前我制作的基于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;

image.png

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;

image.png
image.png
这里需要注意的是给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;

image.png
关键谓词变量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;
/

image.png
启用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 行

image.png
image.png

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带来了全新好用的数据安全隔离。

老规矩,知道写了些啥。

Logo

这里是“一人公司”的成长家园。我们提供从产品曝光、技术变现到法律财税的全栈内容,并连接云服务、办公空间等稀缺资源,助你专注创造,无忧运营。

更多推荐