oracle 12c预置用户(如scott、hr、oe等)默认锁定,安全做法是保持locked状态并回收额外权限,而非删除;启用anonymous等账户可能暴露http接口,需重点监控account_status。

Oracle 12c 中的预置用户(如 SCOTT、HR、OE、PM 等)默认处于 LOCKED 状态,不启用就无风险;所谓“禁用”其实是多余操作——真正要做的,是确认它们没被意外解锁,且不赋予额外权限。
哪些预置用户需要关注
12c 默认安装后,以下用户存在但全部被锁定:
-
SCOTT(密码tiger,含EMP/DEPT表) -
HR(人力资源示例模式) -
OE、PM、IX、SH(各行业示例数据) -
ANONYMOUS、XDB、CTXSYS等功能性账户
其中 SCOTT 和 HR 最常被误解锁用于测试,是实际安全检查重点。其他如 ANONYMOUS 若启用,可能暴露 XML DB HTTP 接口,需特别留意。
检查是否已被解锁的命令
在 CDB$ROOT 或目标 PDB 中执行:
SELECT username, account_status, con_id
FROM dba_users
WHERE username IN ('SCOTT', 'HR', 'ANONYMOUS')
ORDER BY con_id;
重点关注 account_status 字段值:
-
LOCKED:安全,无需操作 -
OPEN或EXPIRED & LOCKED:已解锁或曾被改密,需干预 -
EXPIRED单独出现:密码过期但账户仍可登录(危险!)
注意:查询结果中 con_id = 1 表示该用户在 CDB$ROOT;若在 PDB 中查到,说明它被显式创建为本地用户(非标准行为,应排查来源)。
真正有效的“禁用”动作只有两个
不是执行 DROP USER(会破坏示例数据完整性,且部分用户如 XDB 是系统依赖),而是:
- 对已解锁的用户,立刻执行:
ALTER USER scott ACCOUNT LOCK; - 若该用户有非默认权限(比如被授予了
DBA或UNLIMITED TABLESPACE),必须回收:REVOKE DBA FROM scott;、ALTER USER scott QUOTA 0 ON users;
不要试图用 ALTER USER ... PASSWORD EXPIRE 替代 ACCOUNT LOCK——密码过期后仍可通过 ALTER USER ... IDENTIFIED BY 重置,而锁定状态无法绕过认证流程。
为什么不能删掉 SCOTT 或 HR
这些用户在 12c 中属于“示例模式”,其对象分布在 SYSTEM、SYSAUX 表空间,与数据字典有隐式依赖。手动 DROP USER ... CASCADE 可能导致:
-
ORA-00604/ORA-00942在后续升级或补丁应用时触发 - 某些 OEM 监控脚本报错(因硬编码查询
HR.EMP) -
DBMS_METADATA.GET_DDL对系统对象导出异常
Oracle 官方文档明确建议:保留但锁定。真正该清理的是你自己的测试用户,而不是这些预置账号。











