ITPub博客

首页 > 数据库 > Oracle > 胖头鱼的技术专栏-431 AI Agent时代的数据安全方案:Oracle Deep Sec介绍(20260609)

胖头鱼的技术专栏-431 AI Agent时代的数据安全方案:Oracle Deep Sec介绍(20260609)

原创 Oracle 作者:yhw1809 时间:2026-06-09 00:10:38 0 删除 编辑

胖头鱼的技术专栏-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 中(可查看 Oracle AI DB 23.26.2新特性一览 ),引入了一个面向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 orale DEFAULT TABLESPACE USERS QUOTA UNLIMITED ON USERS;
GRANT CREATE SESSION, CREATE TABLE, CREATE SEQUENCE, CREATE PROCEDURETO 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));
CREATETABLE 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 IDENTIFIE DBY "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 SESSIONS ET 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_ELE
CSELECT * 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带来了全新好用的数据安全隔离。

老规矩,知道写了些啥。


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/31466763/viewspace-3173315/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2017-06-07

  • 博文量
    383
  • 访问量
    402201