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. 最佳实践

  1. 生产使用 EXCLUSIVE:便于修改密码
  2. RAC 共享密码文件:放 ASM 中
  3. format=12:支持多租户
  4. entries 充足:≥ 10
  5. 妥善保管密码文件:禁止普通用户读取
  6. DBA 加入 dba 组:便于 OS 认证
  7. 定期修改 SYS 密码:安全合规
  8. 备份密码文件:与 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/