最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
Oracle 19c中如何为应用账户配置最小化权限原则?
时间:2026-07-14 10:03:03 编辑:袖梨 来源:一聚教程网
Oracle 19c生产环境最小权限落地核心是“明确要什么”,需从应用真实SQL反推所需对象与V$视图,强制指定表空间/配额,禁用宽泛角色,用精简角色封装权限,并通过审计抓取实际访问行为。
直接给应用账号 dba 或 select any table 是最常见也最危险的 shortcut。真正在 oracle 19c 生产环境落地最小权限,核心不是“少授什么”,而是“明确要什么”——从应用实际 sql 行为反推所需对象和视图,再逐层收紧。
应用账号必须显式指定表空间与配额
Oracle 19c 不允许创建用户时不指定 DEFAULT TABLESPACE 和 TEMPORARY TABLESPACE,漏掉任一就会报 ORA-00959 或 ORA-01955。这不是可选项,是强制约束。
- 必须用完整语法创建:
CREATE USER app_user IDENTIFIED BY "Secr3t!" DEFAULT TABLESPACE users TEMPORARY TABLESPACE temp QUOTA 10M ON users; - 不要依赖默认值——CDB/PDB 级别的默认表空间可能不一致,尤其在多租户环境下
-
QUOTA必须设(哪怕 0M),否则用户无法创建任何临时段(比如排序、哈希连接),应用查询会突然报ORA-01536
只授 SELECT 权限还不够:V$ 视图访问常被忽略
很多应用看似只查业务表,但底层 ORM(如 Hibernate)、连接池(如 HikariCP)或框架健康检查会隐式访问 V$SESSION、V$SQL 等动态性能视图。没授权就直接报 ORA-00942: table or view does not exist,且错误里不会明说缺哪个视图。
- 先抓真实 SQL:用
ALTER SYSTEM FLUSH SHARED_POOL;后跑一遍应用典型链路,再查V$SQL中由该用户执行的语句 - 常见必须授权的视图(按需授予,不堆砌):
GRANT SELECT ON V_$SESSION TO app_user;GRANT SELECT ON V_$SQL TO app_user;GRANT SELECT ON V_$INSTANCE TO app_user; - 注意命名:必须用
V_$XXX(带下划线),不是V$XXX;后者是同义词,需要额外SELECT CATALOG ROLE权限
用角色封装权限,但避免 CONNECT/RESOURCE 这类过宽角色
CONNECT 在 19c 已降级为仅含 CREATE SESSION,看似安全,但很多旧脚本仍把它当“基础套餐”一起授出;RESOURCE 则包含 UNLIMITED TABLESPACE 和 CREATE TRIGGER 等高危权限,完全违背最小化原则。
- 自己建精简角色更可控:
CREATE ROLE app_read_role;GRANT CREATE SESSION TO app_read_role;GRANT SELECT ON app_schema.orders TO app_read_role;GRANT SELECT ON V_$SESSION TO app_read_role; - 授角色时加
WITH ADMIN OPTION?禁止。这等于把授权权交出去,失控风险极高 - 角色不能跨 PDB 自动继承——如果应用连的是特定 PDB,角色必须在该 PDB 内创建并授权
密码同步不用改应用配置:复用哈希值
测试库和生产库密码一致,但不想重启应用或暴露明文密码?Oracle 支持直接写入密码哈希值,绕过密码校验流程。
- 在测试库查哈希:
SELECT password FROM dba_users WHERE username = 'APP_USER';(注意:仅 12c 以前版本返回PASSWORD字段;19c 需查DBA_USERS.AUTHENTICATION_TYPE和SPARE4) - 19c 正确做法是查
DBA_USERS.SPARE4(SHA-1 哈希)或使用DBMS_METADATA.GET_DDL提取用户 DDL - 生产库执行:
ALTER USER app_user IDENTIFIED BY VALUES 'S:xxxxxxxxxxxxxxxx...';(填入SPARE4值) - 关键限制:源库和目标库 Oracle 版本、字符集、密码复杂度策略必须一致,否则哈希不可复用
真正卡住最小权限落地的,往往不是语法不会写,而是不知道应用到底在后台查了哪些东西。与其靠经验猜,不如在测试环境开 AUDIT SELECT ON v_$session BY app_user; 抓一次真实行为——比读文档靠谱得多。
相关文章
- 繁花漫画正版直达链接在哪 07-14
- 神探杰克鼠进口货物支线任务攻略 07-14
- 掌上衡水app如何查看资讯 07-14
- claude-skills 是什么?355 个 Claude Code 技能包合集介绍(2026更新版) 07-14
- 《深海迷航2:异星水域》快速解锁蝌蚪号攻略-详细步骤解析 07-14
- 蚂蚁庄园小课堂2026年1月16日最新题目答案 07-14