Oracle 密码文件(orapwd)与 SYSDBA 认证
Oracle 密码文件(orapwd)与 SYSDBA 认证
适用版本:Oracle Database 11g / 12c / 19c / 23ai 文档版本:v1.0 / 2026-07
1. 概述
密码文件(Password File) 用于在数据库未启动时验证 SYSDBA/SYSOPER 用户[1]:
| 认证方式 | 数据库状态 | 使用场景 |
|---|---|---|
| OS 认证 | 不需数据库 | DBA 本地连接 |
| 密码文件认证 | 数据库未启动 | 远程 SYSDBA 连接 |
| 数据库认证 | 数据库 OPEN | 普通用户登录 |
2. 密码文件作用
2.1 使用场景
SYSDBA 远程连接:
1. 用户 sqlplus sys/pwd@orcl as sysdba
2. 监听器接收连接
3. 实例未启动?OS 认证不可用
4. 查询密码文件验证
5. 通过则放行
2.2 remote_login_passwordfile 参数
SHOW PARAMETER remote_login_passwordfile;
-- NONE: 不使用密码文件
-- EXCLUSIVE: 私有(默认)
-- SHARED: 共享(多个实例共用,RAC)
| 取值 | 行为 |
|---|---|
| NONE | 仅 OS 认证 |
| EXCLUSIVE | 密码文件私有,可修改 |
| SHARED | 多实例共用,不可修改 |
3. 创建密码文件
3.1 orapwd 命令
# 创建密码文件
orapwd file=$ORACLE_HOME/dbs/orapw$ORACLE_SID \
password=****** \
entries=10 \
format=12
# 参数说明:
# file: 文件路径
# Linux: $ORACLE_HOME/dbs/orapw<SID>
# Windows: %ORACLE_HOME%\database\PWD<SID>.ora
# password: ****** 密码
# entries: 允许的 SYSDBA/SYSOPER 用户数(推荐 ≥ 10)
# format: 12(推荐,支持多租户)
# 12: 12c 格式
# or legacy: 旧格式
3.2 重置 SYS 密码
# 方法 1:重新创建密码文件
orapwd file=$ORACLE_HOME/dbs/orapworcl password=****** entries=10 format=12 force=y
# 方法 2:数据库 OPEN 时
sqlplus / as sysdba
ALTER USER sys IDENTIFIED BY ******
4. 查看/管理密码文件
4.1 查看
-- 查看密码文件中的用户
SELECT username, sysdba, sysoper, sysasm, sysbackup, sysdg, syskm
FROM v$pwfile_users;
-- 查看参数
SHOW PARAMETER remote_login_passwordfile;
4.2 授予/撤销 SYSDBA
-- 授予
GRANT SYSDBA TO admin_user;
-- 撤销
REVOKE SYSDBA FROM admin_user;
5. CDB 与 PDB 密码管理(12c+)
-- CDB 根容器
ALTER USER c##admin IDENTIFIED BY ******
-- PDB
ALTER SESSION SET CONTAINER = salespdb;
ALTER USER admin IDENTIFIED BY ******
共享用户:CDB 中的 common user(c## 前缀)在所有 PDB 中可用。
6. OS 认证
6.1 配置
# /etc/group 中
dba:x:54322:oracle,admin
oinstall:x:54321:oracle
SHOW PARAMETER os_authent_prefix;
-- 默认 ops$(11g 及之前)
-- 12c+ 默认空字符串
-- 创建 OS 认证用户
CREATE USER ops$oracle IDENTIFIED EXTERNALLY;
GRANT CONNECT TO ops$oracle;
6.2 SQLNET.ORA 配置
# $ORACLE_HOME/network/admin/sqlnet.ora
SQLNET.AUTHENTICATION_SERVICES=(NTS)
# NTS: Windows AD
# ALL: 所有方式
# (NONE): 仅密码认证
7. 常见坑与排错
7.1 ORA-01017: invalid username/password
现象:远程连接报 ORA-01017。
原因:密码文件不存在或 SYS 密码不匹配。
修复:
# 1. 检查密码文件
ls -l $ORACLE_HOME/dbs/orapw*
# 2. 重建密码文件
orapwd file=$ORACLE_HOME/dbs/orapworcl password=****** entries=10 format=12 force=y
# 3. 检查参数
sqlplus / as sysdba
SHOW PARAMETER remote_login_passwordfile;
-- 应为 EXCLUSIVE
7.2 ORA-01031: insufficient privileges
现象:sqlplus / as sysdba 报 ORA-01031。
原因:OS 认证失败。
修复:
# 1. 检查 OS 用户组
id oracle
groups oracle
# 应在 dba 组中
# 2. 检查 sqlnet.ora
cat $ORACLE_HOME/network/admin/sqlnet.ora
# SQLNET.AUTHENTICATION_SERVICES 应包含 NTS 或 ALL
# 3. 检查 /etc/group
grep dba /etc/group
7.3 RAC 密码文件不一致
现象:RAC 节点间 SYS 密码不同步。
修复:
# 在 ASM 中存储共享密码文件
orapwd file='+DATA/orcl/orapworcl' password=****** entries=10 dbuniquename=orcl format=12
# PFILE 中指定
SPFILE='+DATA/orcl/spfileorcl.ora'
# 所有节点使用 ASM 中的密码文件
7.4 密码文件大小限制
现象:ORA-01990: error opening password file。
原因:entries 数量不够。
修复:
# 重建更大的密码文件
orapwd file=$ORACLE_HOME/dbs/orapworcl password=****** entries=50 format=12 force=y
8. 最佳实践
- 生产使用 EXCLUSIVE:便于修改密码
- RAC 共享密码文件:放 ASM 中
- format=12:支持多租户
- entries 充足:≥ 10
- 妥善保管密码文件:禁止普通用户读取
- DBA 加入 dba 组:便于 OS 认证
- 定期修改 SYS 密码:安全合规
- 备份密码文件:与 SPFILE 一起备份
9. 参考资料
[1] Oracle Database Administrator’s Guide 19c, “Administering Authentication” https://docs.oracle.com/en/database/oracle/oracle-database/19/admin/administering-user-accounts-security.html
[2] Oracle Database Security Guide 19c https://docs.oracle.com/en/database/oracle/oracle-database/19/dbseg/