暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

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

原创 胖头鱼的鱼缸 2026-06-09
122

数据库管理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 除授权转载并标明出处外,均为“非法”抄袭

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

老规矩,知道写了些啥。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论