您可以使用密码文件创建实用程序 ORAPWD
创建数据库密码文件。对于某些操作系统,您可以将此文件创建为标准安装的一部分。
ORAPWD 语法和命令行参数说明
ORAPWD
命令创建并维护一个密码文件。
ORAPWD
命令的语法如下:
orapwd FILE=filename
[FORCE={y|n}]
[ASM={y|n}]
[DBUNIQUENAME=dbname]
[FORMAT={12.2|12}]
[SYS={y|n|password|external('sys-external-name')|global('sys-directory-DN')}]
[SYSBACKUP={y|n|password|external('sysbackup-external-name')|global('sysbackup-directory-DN')}]
[SYSDG={y|n|password|external('sysdg-external-name')|global('sysdg-directory-DN')}]
[SYSKM={y|n|password|external('syskm-external-name')|global('syskm-directory-DN')}]
[DELETE={y|n}]
[INPUT_FILE=input-fname]
orapwd DESCRIBE FILE=filename
命令参数总结如下表所示。
参数 | 描述 |
---|---|
FILE |
如果未包含 DESCRIBE 参数,则指定要分配给新密码文件的名称。您必须提供完整的路径。如果只提供文件名,则将该文件写入当前目录。如果包含了 DESCRIBE 参数,则指定现有密码文件的名称。 |
FORCE |
(可选)如果是y,则允许覆盖已有密码文件。 |
ASM |
(可选)在 Oracle ASM 磁盘组中创建 Oracle ASM 密码文件。 如果为 n,则在操作系统文件系统中创建密码文件。当指定了 DBUNIQUENAME 参数时,密码文件是数据库密码文件。当不指定 DBUNIQUENAME 参数时,密码文件可以是数据库密码文件,也可以是 Oracle ASM 密码文件。 |
DBUNIQUENAME |
唯一的数据库名称,仅用于标识 ASM 磁盘组中的数据库密码文件。当数据库密码文件存储在 Oracle ASM 磁盘组上时,需要此参数。当通过将 ASM 参数设置为 y 来创建 Oracle ASM 密码文件时,此参数将被忽略。 |
FORMAT |
(可选)输入以下任意值: - 默认情况下 12.2:以 12.2 的格式创建密码文件。这种格式支持向外部用户授予管理权限,并为管理用户启用 SSL 和 Kerberos 身份验证。 - 12:创建 Oracle Database 12c 格式的密码文件。该格式支持 SYSBACKUP 、SYSDG 和 SYSKM 管理权限。 |
SYS |
(可选)该参数指定 SYS 用户是密码认证、外部认证还是全局认证。该参数可以设置为 y 、n 、password 、external('sys-external-name') 或 global(sys-directory-DN) 。如果是 SYS=y 和 INPUT_FILE 被指定为迁移密码文件条目,那么系统将提示您输入 SYS 管理用户的新密码。如果是 password ,那么系统将提示您输入 SYS 管理用户的密码。如果是 external('sys-external-name') ,那么将 sys-external-name 替换为 SYS 管理用户的 SSL 或 Kerberos 身份验证的外部名称。如果是 global(sys-directory-DN),则指定全局 SYS 用户的目录服务名称。(Optional) |
SYSBACKUP |
(可选)创建 SYSBACKUP 条目。该参数指定 SYSBACKUP 用户是密码身份验证、外部身份验证还是全局身份验证。该参数可以设置为 y 、n 、password 、external('sysbackup-external-name') 或 global(sysbackup-directory-DN) 。如果是 password ,那么系统将提示您输入 SYSBACKUP 管理用户的密码。如果是 external('sysbackup-external-name') ,那么将 sysbackup-external-name 替换为 SYSBACKUP 管理用户的 SSL 或 Kerberos 身份验证的外部名称。如果是 global(sysbackup-directory-DN) ,则指定全局 SYSBACKUP 用户的目录服务名称。 |
SYSDG |
(可选)创建 SYSDG 条目。该参数指定 SYSDG 用户是密码身份验证、外部身份验证还是全局身份验证。该参数可以设置为 y 、n 、password 、external('sysdg-external-name') 或 global(sysdg-directory-DN) 。如果是 password ,那么系统将提示您输入 SYSDG 管理用户的密码。如果是 external('sysdg-external-name') ,那么将 sysdg-external-name 替换为 SYSDG 管理用户的 SSL 或 Kerberos 身份验证的外部名称。
如果是 |
SYSKM |
(可选)创建 SYSKM 条目。该参数指定 SYSKM 用户是密码身份验证、外部身份验证还是全局身份验证。该参数可以设置为 y 、n 、password 、external('syskm-external-name') 或 global(syskm-directory-DN) 。如果是 password ,那么系统将提示您输入 SYSKM 管理用户的密码。如果是 external('syskm-external-name') ,那么将 syskm-external-name 替换为 SYSKM 管理用户的 SSL 或 Kerberos 身份验证的外部名称。如果是 y ,则在密码文件中创建一个 SYSKM 条目。系统提示您输入密码。密码保存在创建的密码文件中。如果是 n ,则没有在密码文件中创建 SYSKM 表项。如果是 global(syskm-directory-DN) ,则指定全局 SYSKM 用户的目录服务名称。 |
DELETE |
(可选)如果是 y ,删除指定的密码文件。如果是 n ,则创建指定的密码文件。 |
INPUT_FILE |
(可选)输入密码文件名。ORAPWD 将输入文件中的条目迁移到新密码文件中。此参数可用于将密码文件从一种格式转换为另一种格式,例如从 12 格式转换为 12.2 格式。 此参数也可用于重置 SYS 管理用户的密码。ORAPWD 无法迁移存储在 Oracle ASM 磁盘组中的输入密码。 |
DESCRIBE |
描述指定密码文件的属性,包括 FORMAT 值(12.2 或 12)。 |
等号(=)字符周围不允许有空格。
以下各节提供有关 ORAPWD
命令行参数的更多信息。
FILE
此参数设置正在创建的密码文件的名称。这条命令是强制性的。
如果您在 Oracle ASM 磁盘组上指定了一个位置,那么数据库密码文件将在集群中的节点之间自动共享。当您使用 Oracle ASM 磁盘组来存储密码文件,并且您不使用 Oracle Managed Files 时,您必须指定密码文件的名称,包括其完整路径。如果您使用的是 Oracle Managed Files,则不需要完整路径。
如果没有指定 Oracle ASM 磁盘组上的位置,则密码文件所需的文件名是特定于操作系统的。有些操作系统要求密码文件遵循特定的格式,并位于特定的目录中。其他操作系统允许使用环境变量来指定密码文件的名称和位置。
在 UNIX、Linux 和 Windows平台上,密码文件的名称和位置要求如下表所示。对于其他平台,请参考特定于平台的文档。
平台 | 所需名称 | 所需位置 |
---|---|---|
UNIX and Linux | orapw ORACLE_SID |
ORACLE_BASE/dbs |
Windows | PWD ORACLE_SID .ora |
ORACLE_BASE\database |
例如,对于 SID 为 orcldw 的数据库实例,密码文件在 Linux 上必须命名为 orapworcldw
,在 Windows 上必须命名为 PWDorcldw.ora
。
在需要将环境变量设置为密码文件路径的平台上的 Oracle Real Application Clusters(Oracle RAC)环境中,每个实例的环境变量必须指向相同的密码文件。
对于策略管理的 Oracle RAC 数据库或 Oracle RAC One Node 数据库,ORACLE_SID
的形式为db_unique_name_n
,其中 n
为数字,首先使用 ORACLE_BASE/dbs/orapwsid_prefix
或 ORACLE_BASE\database\PWDsid_prefix.ora
搜索密码文件。sid_prefix
(数据库名的前 8 个字符)用于定位密码文件。
FORCE
如果将此参数设置为 y
,则允许覆盖现有密码文件。如果已经存在同名的密码文件,并且省略该参数或将其设置为 n
,则返回错误。
ASM
如果这个参数被设置为 y
,那么 ORAPWD
创建一个 Oracle ASM 密码文件。FILE
参数必须指定 Oracle ASM 磁盘组中的位置。
如果这个参数被设置为 n
(默认值),那么 ORAPWD
将创建一个密码文件。FILE
参数可以指定 Oracle ASM 磁盘组或操作系统文件系统中的位置。当指定了 DBUNIQUENAME
参数时,密码文件是数据库密码文件。当不指定 DBUNIQUENAME
参数时,密码文件可以是数据库密码文件,也可以是 Oracle ASM 密码文件。
DBUNIQUENAME
此参数为在 Oracle ASM 磁盘组上创建的数据库密码文件设置唯一的数据库名称。它用数据库密码文件位置标识要更新的数据库资源。
当在操作系统文件系统上创建数据库密码文件时,不需要此参数。
当通过将 ASM
参数设置为 y
来创建 Oracle ASM 密码文件时,此参数将被忽略。
FORMAT
如果该参数设置为 12.2
,即默认值,则 ORAPWD
将创建 12.2 格式的数据库密码文件。为了支持向外部用户授予管理权限以及为管理用户提供 SSL 和 Kerberos 身份验证,密码文件需要使用 12.2 格式。分配给用户的密码配置文件也对管理用户强制执行。
如果该参数设置为 12
,则 ORAPWD
将创建一个 Oracle Database 12c 格式的数据库密码文件。为了支持 SYSBACKUP
、SYSDG
和 SYSKM
管理权限,密码文件需要使用 Oracle Database 12c 格式。
如果将此参数设置为 legacy
,则 ORAPWD
将创建一个 Oracle Database 12c 之前格式的数据库密码文件。密码文件支持 SYSDBA
和 SYSOPER
管理权限,但不支持 SYSBACKUP
、SYSDG
和 SYSKM
管理权限。
SYS
如果 SYS=y
和 INPUT_FILE
被指定为迁移密码文件条目,那么系统将提示您输入 SYS
管理用户的新密码。
如果是 password
,那么系统将提示您输入 SYS
管理用户的密码。
如果是 external('sys-external-name')
,那么将 sys-external-name
替换为 SYS 管理用户的 SSL 或 Kerberos 身份验证的外部名称。
如果是 global(sys-directory-DN)
,则指定全局 SYS
用户的目录服务名称。
SYSBACKUP
如果是 password
,那么系统将提示您输入 SYSBACKUP
管理用户的密码。
如果是 external('sysbackup-external-name')
,那么将 sysbackup-external-name
替换为 SYSDG
管理用户的 SSL 或 Kerberos 身份验证的外部名称。
如果是 global(sysbackup-directory-DN)
,则指定全局 SYSBACKUP
用户的目录服务名称。
SYSDG
如果是 password
,那么系统将提示您输入 SYSDG
管理用户的密码。
如果是 external('sysdg-external-name')
,那么将 sysdg-external-name
替换为 SYSDG
管理用户的 SSL 或 Kerberos 身份验证的外部名称。
如果是 global(sysdg-directory-DN)
,则指定全局 SYSDG
用户的目录服务名称。
SYSKM
如果是 password
,那么系统将提示您输入 SYSKM
管理用户的密码。
如果是 external('syskm-external-name')
,那么将 syskm-external-name
替换为 SYSKM
管理用户的 SSL 或 Kerberos 身份验证的外部名称。
如果是 global(syskm-directory-DN)
,则指定全局 SYSKM
用户的目录服务名称。
DELETE
如果此参数设置为 y
,则 ORAPWD
删除指定的密码文件。当指定 y
时,必须指定 FILE
、ASM
或 DBUNIQUENAME
。当指定 FILE
时,该文件必须位于 ASM 磁盘组中。
如果这个参数被设置为 n
(默认值),那么 ORAPWD
将创建密码文件。
INPUT_FILE
此参数指定输入密码文件的名称。ORAPWD
将输入文件中的条目迁移到新密码文件中。该参数可以将密码文件从一种格式转换为另一种格式,例如从 12 格式转换为 12.2 格式。
此参数也可用于重置 SYS 管理用户的密码。
当指定 INPUT_FILE
参数时,ORAPWD
不创建任何新条目。因此,ORAPWD
忽略以下参数:
PASSWORD
SYSBACKUP
SYSDG
SYSKM
当指定了输入文件,并且新密码文件替换了输入文件时,FORCE
必须设置为 y
。
使用 ORAPWD 创建数据库密码文件
您可以使用 ORAPWD
创建数据库密码文件。
创建数据库密码文件:
- 运行
ORAPWD
命令。
例 1:在 Oracle ASM 磁盘组中创建数据库密码文件
在 Oracle ASM 磁盘组中创建 12.2 格式的数据库密码文件 orapworcl
。DBUNIQUENAME
参数是必需的,因为数据库密码文件位于 Oracle ASM 磁盘组中。
orapwd FILE='+DATA/orcl/orapworcl' DBUNIQUENAME='orcl' FORMAT=12.2
例 2:创建带有 SYSBACKUP 条目的数据库密码文件
下面的示例与例 1 类似,不同之处在于它在数据库密码文件中创建了 SYSBACKUP
条目。密码文件默认为 12.2 格式。
orapwd FILE='+DATA/orcl/orapworcl' DBUNIQUENAME='orcl' SYSBACKUP=password FORMAT=12.2
例 3:为 SYS 和 SYSKM 创建外部认证的数据库密码文件
下面的示例与例 1类似,只是它为 SYS 和 SYSKM 管理用户指定了一个外部名称。
orapwd FILE='+DATA/orcl/orapworcl' DBUNIQUENAME='orcl' FORMAT=12.2
sys=external('KerberosUserSYS@example.com')
syskm=external('KerberosUserSYSKM@example.com')
例 4:在文件系统中创建数据库密码文件
如下命令创建一个名为 orapworcl 的 12.2 格式数据库密码文件,该文件位于操作系统文件系统的默认位置。
orapwd FILE='/u01/oracle/dbs/orapworcl' FORMAT=12.2
例 5:迁移旧数据库密码文件到 Oracle Database 12c 格式
下面的命令将数据库密码文件迁移为遗留格式 12.2 格式。密码文件名为 orapworcl
,位于操作系统文件系统中。新的数据库密码文件将替换现有的数据库密码文件。因此 FORCE
必须设置为 y
。
orapwd FILE='/u01/oracle/dbs/orapworcl' FORMAT=12.2 INPUT_FILE='/u01/oracle/dbs/orapworcl' FORCE=y
例 6:重置 SYS 管理用户密码
以下命令重置 SYS 管理用户的密码。新的数据库密码文件将替换现有的数据库密码文件。因此 FORCE
必须设置为 y
。
orapwd FILE='/u01/oracle/dbs/orapworcl' SYS=Y INPUT_FILE='/u01/oracle/dbs/orapworcl' FORCE=y
系统提示您输入 SYS
管理用户的新密码。
例 7:密码文件描述
orapworcl
密码文件描述如下:
orapwd DESCRIBE FILE='orapworcl'
Password file Description : format=12.2
注意:
如果修改了数据库密码文件名或位置,需要执行以下命令使修改生效。
SQL> ALTER SYSTEM FLUSH PASSWORDFILE_METADATA_CACHE;
此命令将刷新元数据缓存,然后使用新密码文件登录数据库。在 Oracle RAC 环境中,该命令清除所有 Oracle RAC 数据库中的缓存,但是可能有一些数据库仍然继续使用旧密码文件,直到更改传播到所有 Oracle RAC 数据库。
执行该命令后,可以通过查询
V$PASSWORDFILE_INFO
视图来验证修改的正确性。
共享和禁用数据库密码文件
您可以使用初始化参数 REMOTE_LOGIN_PASSWORDFILE
来控制数据库密码文件是否在多个 Oracle 数据库实例之间共享。也可以使用该参数关闭密码文件鉴权。
共享密码文件或禁用密码文件认证。
- 设置
REMOTE_LOGIN_PASSWORDFILE
初始化参数。
可以将 REMOTE_LOGIN_PASSWORDFILE
初始化参数设置为以下值之一:
none
:设置该参数为none
时,Oracle 数据库将表现为密码文件不存在。也就是说,不允许在非安全连接上使用特权连接。exclusive
(默认值):唯一密码文件只能用于一个数据库。只能修改排他文件。使用独占密码文件可以添加、修改和删除用户。它还允许您使用ALTER USER
命令更改SYS
、SYSBACKUP
、SYSDG
或SYSKM
的密码。
当exclusive
密码文件存储在 Oracle ASM 磁盘组中时,它可以被单实例数据库或 Oracle RAC 数据库的多个实例使用。
当exclusive
密码文件存储在操作系统上时,它只能用于一个数据库的一个实例。shared
:shared
密码文件可以被运行在同一台服务器上的多个数据库或 Oracle RAC 数据库的多个实例使用,即使它存储在操作系统上也是如此。shared
密码文件是只读的,不能修改。因此,不能在shared
密码文件中添加用户。任何尝试这样做或更改 SYS 或其他具有管理权限的用户的密码都会产生错误。当REMOTE_LOGIN_PASSWORDFILE
设置为exclusive
时,必须将需要管理权限的所有用户添加到密码文件中。添加完所有用户后,可以将REMOTE_LOGIN_PASSWORDFILE
修改为shared
,然后共享文件。
如果使用单个密码文件管理多个数据库,此选项非常有用。
不能为 Oracle ASM 密码文件指定shared
。
如果 REMOTE_LOGIN_PASSWORDFILE
设置为 exclusive
或 shared
,而密码文件缺失,则相当于将 REMOTE_LOGIN_PASSWORDFILE
设置为 none
。
管理员密码与数据字典同步
如果将 REMOTE_LOGIN_PASSWORDFILE
初始化参数从 none
修改为 exclusive
或 shared
,则必须确保数据字典中存储的密码和密码文件中存储的非 SYS 管理用户(如 SYSDBA
、SYSOPER
、SYSBACKUP
、SYSDG
、SYSKM
)的密码保持一致。
SYSDBA、SYSOPER、SYSBACKUP、SYSDG、SYSKM 等非系统管理员用户的密码需要同步,必须先撤销这些用户的密码,然后再重新授予权限,操作步骤如下:
-
查找已被授予
SYSDBA
权限的所有用户。SELECT USERNAME FROM V$PWFILE_USERS WHERE USERNAME != 'SYS' AND SYSDBA='TRUE';
-
撤销并重新授予这些用户
SYSDBA
特权。REVOKE SYSDBA FROM non-SYS-user;
GRANT SYSDBA TO non-SYS-user;
-
查找具有
SYSOPER
权限的所有用户。SELECT USERNAME FROM V$PWFILE_USERS WHERE USERNAME != 'SYS' AND SYSOPER='TRUE';
-
撤销和重新授予这些用户的
SYSOPER
权限。REVOKE SYSOPER FROM non-SYS-user;
GRANT SYSOPER TO non-SYS-user;
-
查找所有被授予
SYSBACKUP
特权的用户。SELECT USERNAME FROM V$PWFILE_USERS WHERE USERNAME != 'SYS' AND SYSBACKUP ='TRUE';
-
撤销并重新授予这些用户
SYSBACKUP
特权。REVOKE SYSBACKUP FROM non-SYS-user;
GRANT SYSBACKUP TO non-SYS-user;
-
查找已授予
SYSDG
权限的所有用户。SELECT USERNAME FROM V$PWFILE_USERS WHERE USERNAME != 'SYS' AND SYSDG='TRUE';
-
撤销和重新授予这些用户的
SYSDG
特权。REVOKE SYSDG FROM non-SYS-user;
GRANT SYSDG TO non-SYS-user;
-
查找已被授予
SYSKM
权限的所有用户。SELECT USERNAME FROM V$PWFILE_USERS WHERE USERNAME != 'SYS' AND SYSKM='TRUE';
-
撤销和重新授予这些用户的
SYSKM
特权。REVOKE SYSKM FROM non-SYS-user;
GRANT SYSKM TO non-SYS-user;
添加用户到数据库密码文件
当您授予一个用户 SYSDBA
、SYSOPER
、SYSBACKUP
、SYSDG
或 SYSKM
管理权限时,该用户的名称和权限信息将被添加到数据库密码文件中。
只有当用户至少拥有这些特权中的一个时,用户名才会保留在密码文件中。如果您撤销所有这些权限,那么 Oracle 数据库将从密码文件中删除该用户。
创建密码文件并添加新用户
使用以下步骤创建密码文件并添加新用户:
-
请按照“使用
ORAPWD
创建数据库密码文件”中的说明创建密码文件。 -
将
REMOTE_LOGIN_PASSWORDFILE
初始化参数设置为exclusive
。(这是默认设置。)
如果您尝试授予这些权限,并且初始化参数REMOTE_LOGIN_PASSWORDFILE
设置不正确,Oracle 数据库会发出错误。 -
以如下示例连接
SYSDBA
权限,并在提示时输入SYS
密码:CONNECT SYS AS SYSDBA
-
启动实例并在必要时创建数据库,或者挂载并打开现有数据库。
-
根据需要创建用户。酌情为您自己和其他用户授予
授予和撤销管理特权
使用 GRANT
语句授予管理权限。使用 REVOKE
语句撤销管理权限。
赋予用户 SYSDBA
、SYSOPER
、SYSBACKUP
、SYSDG
或 SYSKM
管理权限。
- 运行GRANT语句。
例如:
GRANT SYSDBA TO mydba;
撤销用户的管理权限:
- 执行REVOKE语句。
例如:
REVOKE SYSDBA FROM mydba;
如果在授予管理权限的 GRANT
语句中指定了 WITH ADMIN
选项,则忽略该选项,并且适用以下规则:
- 当前以
SYSDBA
身份连接的用户可以向另一个用户授予任何管理特权,也可以从另一个用户撤销任何管理特权。 - 当前以
SYSOPER
身份连接的用户不能授予其他用户任何管理权限,也不能撤销其他用户的任何管理权限。 - 当前以
SYSBACKUP
身份连接的用户可以授予或撤销另一个用户的SYSBACKUP
管理权限。 - 当前以
SYSDG
连接的用户可以授予或撤销另一个用户的SYSDG
管理权限。 - 当前以
SYSKM
连接的用户可以授予或撤销另一个用户的SYSKM
管理权限。
不能将管理权限授予角色,因为角色只有在数据库启动后才可用。不要将数据库管理权限与操作系统角色混淆。
查看数据库密码文件成员
V$PWFILE_USERS
视图包含已被授予管理权限的用户的信息。
要确定哪些用户已被授予管理权限:
- 查询
V$PWFILE_USERS
视图。
删除数据库密码文件
如果不再需要数据库密码文件,可以删除该文件。
如果您确定不再需要数据库密码文件来验证用户身份,则删除它:
- 删除数据库密码文件,并可将
REMOTE_LOGIN_PASSWORDFILE
初始化参数重置为none
。
删除该文件后,只有通过操作系统认证的用户才能执行 SYSDBA
、SYSOPER
、SYSBACKUP
、SYSDG
、SYSKM
等数据库管理操作。