



























上篇介绍了AI时代下数据安全的重要性,本篇笔者将基于 Oracle 官方提供的 HR Demo,动手实践 Real Application Security(RAS)的全流程。帮助大家更直观的理解 RAS 的核心机制。
RAS(Real Application Security)是 Oracle 推出的安全框架,它允许你在数据库层面管理“应用用户”的权限,而不仅仅是“数据库用户”。
如果想了解更多RAS的说明和其在AI时代的必要性,可直接参考上篇文章《Oracle RAS:AI时代企业数据安全核心》。
Oracle 官方提供了一系列脚本,你可以按顺序运行来快速完成整个 Demo:
hrdemo_setup.sql
DB_EMP)employee、it_engineer、hr_representative)DAUSTIN、SMAVRIS)HR.EMPLOYEES 表上hrdemo.sql
hrdemo_session.sql
hrdemo.java
hrdemo_clean.sql
我们只需按照顺序运行这些脚本,就是一个完整的 RAS 上手实践。
笔者自己测试时发现一些小问题,会在具体地方贴出来供大家参考,避免重复踩坑。
$ORACLE_HOME/demo/schema下),然后切换成你的PDB下,执行其中的 HR 脚本 @hr_install.sql。
@pdb_service_name,并测试能连接到期望的PDB。此外,sys认证保留脚本中的密码认证模式,不要自作聪明的改成os认证模式,因为有些脚本会多次切换连接,比如当从sys切换到普通用户后,就无法再成功切回sys,连接会报错。直连模式是最简单的验证方式,用它能证明:
conn daustin/welcome1@alfred;employee + it_engineer

这个结果证明:即便 DAUSTIN 是通过直接登录数据库看到表,他的权限依旧受 RAS 策略控制,而不是数据库权限控制。
--IT
INSERT INTO employees VALUES
( 1001
, 'David'
, 'Austin'
, 'DAUSTIN'
, '1.590.555.0105'
, TO_DATE('01-01-2026', 'dd-MM-yyyy')
, 'IT_PROG'
, 4800
, NULL
, 103
, 60
);
--HR
INSERT INTO employees VALUES
( 1002
, 'Susan'
, 'Mavris'
, 'SMAVRIS'
, '1.515.555.0168'
, TO_DATE('01-01-2026', 'dd-MM-yyyy')
, 'HR_REP'
, 6500
, NULL
, 101
, 40
);
commit;
我们继续使用直连方式验证 RAS,这次换成SMAVRIS这个应用用户。
conn smavris/welcome1@alfred;employee + hr_representative
这个演示说明了:应用用户 SMAVRIS 拥有完整的表访问权限,并且 RAS 自动应用权限策略,而不是依赖她的数据库账号级权限来控制。
Tips:这里看到截图一定有小伙伴会觉得困惑,这个conn直连感觉上不就是数据库的用户吗?
其实不是的,上面使用的DAUSTIN、SMAVRIS都属于应用用户,并不是数据库传统用户,有疑惑可以看官方DEMO最开始RAS初始化脚本中,这两个用户的创建是通过sys.xs_principal.create_user来完成的。
在现实业务中,我们通常不会让业务用户直接登录数据库,而是让中间层应用维护一个连接池。RAS 提供了 Session API 来支持这种场景:
一个 RAS Session 表示业务用户在线的身份环境,它绑定真实的数据库连接,使后续 SQL 执行按照这个业务用户的安全策略执行。
hr_session)创建 RAS 会话示例中验证:
SMAVRIS(可通过 xs_sys_context('xs$session','username') 查询)hr_representative 角色后,只能看到自己的记录
这个步骤说明了:一个数据库连接可以托管多个业务用户权限上下文,而不会互相干扰。
除了 SQL 脚本,Oracle 官方还提供了 Java Demo,用于演示如何在真实应用层联动 RAS:
这意味着应用程序不需要托管一堆数据库用户账号,只要统一使用一个连接账号,通过 RAS Session 管理就能识别不同的用户身份和权限。
首先要跑这段java程序,至少需要 这两个 jar:
| Jar | 作用 |
|---|---|
ojdbc8.jar |
JDBC 驱动 |
xs.jar |
RAS Java API |
具体位置在:
为了方便拷贝到同一个ras目录下,然后执行:
javac -cp ".:ojdbc8.jar:xs.jar" hrdemo.java
编译成功得到 hrdemo.class 文件后,执行java程序,注意要指定正确的数据库信息
java -cp ".:ojdbc8.jar:xs.jar" hrdemo jdbc:oracle:thin:@//localhost:1522/alfred

Tips:目前整个demo演示已完成,最后可以根据实际所需来选择是否通过 hrdemo_clean.sql 恢复到RAS实验前的环境,这里不再赘述。
其实RAS按照这个DEMO执行是比较简单的,但是如果根据实际需求去修改脚本内容配置时,就会发现RAS这种命令行的配置方式,还是有些门槛的,比如DEMO中的第一个setup脚本,就包含了这5个部分,需要先捋清楚这些概念之间的关系,才能更好的对应上自己的需求进行个性化的修订。
-- 1. SETUP - User and Roles
-- 2. SETUP - Security class and ACL
-- 3. SETUP - Data security policy
-- 4. SETUP - Validate the objects we have set up.
-- 5. SETUP - Mid-Tier related configuration.
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。