作者:胖头鱼的鱼缸(尹海文) 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 中(可查看 Oracle AI DB 23.26.2新特性一览 ),引入了一个面向AI Agent使用数据库的新功能 Deep Data Security ,很好的解决了AI时代数据安全隔离的问题。
Oracle Deep Data Security(Deep Sec) 是Oracle AI Database 26ai引入的 声明式数据安全框架 ,用于在数据库层面实现行级、列级和单元格级的访问控制。
与传统VPD(Virtual Private Database/DBMS_RLS)相比,Deep Sec是 声明式 的——你只需声明"谁能看到什么",数据库自动执行,无需编写和维护PL/SQL函数,极大的降低了数据库安全相关维护难度,更加便于AI Agent使用数据库。
-- 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;
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
。
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的身份信息。
-- 为每个商家创建 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名称)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规则,无法绕过。
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 行
|
|
|
|
|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
┌─────────────────────────────────────────┐ │ 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/ ,如需转载,请注明出处,否则将追究法律责任。