作为 DBA,您经常执行一些特殊操作,例如关闭或启动数据库。因为只有 DBA 才能执行这些操作,所以数据库管理员用户名需要一个安全的身份验证方案。
管理权限
管理员执行基本数据库操作所需的管理权限是通过特殊系统权限授予的。
这些特权是:
SYSDBA
SYSOPER
SYSBACKUP
SYSDG
SYSKM
SYSRAC
除 SYSRAC 权限外,根据用户需要的授权级别将这些权限授予用户。SYSRAC 特权不能授予用户,因为它仅由 Oracle Clusterware 的 Oracle 代理使用操作系统身份验证连接数据库。
从 Oracle Database 12c Release 1(12.1)开始,SYSBACKUP、SYSDG 和 SYSKM 管理权限可用。从 Oracle Database 12c Release 2(12.2)开始,SYSRAC 管理特权可用。每个新的管理特权授予完成每个管理领域中的任务所需的最低权限。新的管理特权使您能够避免为许多常见任务授予 SYSDBA 管理特权。
由管理权限授权的操作
每个管理特权授权一组特定的操作。
下表列出了每个管理权限所授权的操作:
管理特权 | 操作授权 |
---|---|
SYSDBA |
- 执行 STARTUP 和 SHUTDOWN 操作- ALTER DATABASE :打开、挂载、备份或更改字符集- CREATE DATABASE - DROP DATABASE - CREATE SPFILE - ALTER DATABASE ARCHIVELOG - ALTER DATABASE RECOVER - 包括 RESTRICTED SESSION 权限此管理权限允许大多数操作,包括查看用户数据的能力。这是最强大的管理特权。 |
SYSOPER |
- 执行 STARTUP 和 SHUTDOWN 操作- CREATE SPFILE - ALTER DATABASE ARCHIVELOG - ALTER DATABASE RECOVER (仅完全恢复。任何形式的不完全恢复,例如 UNTIL TIME|CHANGE|CANCEL|CONTROLFILE 都需要以 SYSDBA 的身份连接。)- 包括 RESTRICTED SESSION 权限该特权允许用户执行基本的操作任务,但不具有查看用户数据的能力。 |
SYSBACKUP |
该特权允许用户从 Oracle recovery Manager (RMAN)或 SQL*Plus 执行备份和恢复操作。 |
SYSDG |
该特权允许用户执行 Data Guard 操作。您可以在 Data Guard Broker 或 DGMGRL 命令行界面中使用此特权。 |
SYSKM |
此特权允许用户执行透明数据加密密钥库操作。 |
SYSRAC |
此权限允许 Oracle Clusterware 的 Oracle 代理执行 Oracle Real Application Clusters (Oracle RAC)操作。 |
您被授权使用这些特权的方式取决于您使用的身份验证方法。
当您使用管理权限连接时,您将连接到通常与您的用户名不关联的当前模式。对于 SYSDBA,当前模式是 SYS。对于 SYSOPER,当前模式是 PUBLIC。对于 SYSBACKUP、SYSDG 和 SYSRAC,为了名称解析的目的,当前模式是SYS。但是,SYSKM 的当前模式是 SYSKM。
另外,当您使用管理权限连接时,您将连接到特定的会话用户。使用 SYSDBA 连接时,会话用户为 SYS。对于 SYSOPER,会话用户为 PUBLIC。对于 SYSBACKUP、SYSDG、SYSKM 和 SYSRAC,会话用户分别为 SYSBACKUP、SYSDG、SYSKM 和 SYSRAC。
例 1:作为 SYSDBA 连接时的当前架构
这个例子说明了用户在连接 SYSDBA 管理权限时被分配了另一个模式(SYS)。假设示例用户 mydba 已被授予 SYSDBA 管理权限,并发出了以下命令和语句:
CONNECT mydba
CREATE TABLE admin_test(name VARCHAR2(20));
随后,用户 mydba 发出以下命令和语句:
CONNECT mydba AS SYSDBA
SELECT * FROM admin_test;
用户 mydba 现在收到以下错误:
ORA-00942: table or view does not exist
作为 SYSDBA 连接之后,用户 mydba 现在引用 SYS 模式,但是表是在 mydba 模式中创建的。
例 2:作为 SYSBACKUP 连接时的当前模式和会话用户
这个例子说明了一个用户在使用 SYSBACKUP 管理权限连接时被分配了另一个模式(SYS)和另一个会话用户(SYSBACKUP)。假设示例用户 mydba 已被授予 SYSBACKUP 管理权限,并发出了以下命令和语句:
CONNECT mydba AS SYSBACKUP
SELECT SYS_CONTEXT('USERENV', 'CURRENT_SCHEMA') FROM DUAL;
SYS_CONTEXT('USERENV','CURRENT_SCHEMA')
--------------------------------------------------------------------------------
SYS
SELECT SYS_CONTEXT('USERENV', 'SESSION_USER') FROM DUAL;
SYS_CONTEXT('USERENV','SESSION_USER')
--------------------------------------------------------------------------------
SYSBACKUP
数据库管理员认证方法
数据库管理员的认证方式可以是帐号密码认证、操作系统认证、密码文件认证,或者使用基于目录的认证服务(如Oracle Internet Directory)进行强认证。
关于数据库管理员认证方法
有几种验证数据库管理员身份的方法。
Oracle 数据库可以像其他用户一样,通过数据字典(使用帐户密码)对数据库管理员进行身份验证。请记住,数据库密码是区分大小写的。
对于具有 SYSDBA、SYSOPER、SYSBACKUP、SYSDG 或 SYSKM 权限的数据库管理员,除了普通的数据字典认证之外,还有以下认证方法:
- 操作系统认证
- 密码文件,包括 Kerberos 和 SSL 认证服务
- 使用基于目录的认证服务(如 Oracle Internet Directory)进行强认证
当数据库未启动或不可用时,需要使用这些方法对数据库管理员进行身份验证。(当数据库可用时也可以使用它们。)
您的选择取决于您是打算在数据库所在的同一系统上管理本地数据库,还是打算从单个远程客户端管理许多不同的数据库。下图说明了数据库管理员身份验证方案的选择。
不安全的远程连接
要通过非安全连接作为特权用户连接到 Oracle 数据库,必须通过密码文件进行身份验证。
当使用密码文件身份验证时,数据库使用密码文件来跟踪已被授予 SYSDBA、SYSOPER、SYSBACKUP、SYSDG 或 SYSKM 管理权限的数据库用户名。
本地连接和安全远程连接
您可以通过本地连接或安全远程连接作为特权用户连接到 Oracle 数据库。
你可以通过两种方式连接:
- 如果数据库有密码文件,并且您被授予了系统特权,那么您可以通过密码文件进行连接和身份验证。
- 如果服务器没有使用密码文件,或者您没有被授予系统特权,因此不在密码文件中,那么您可以使用操作系统身份验证。在大多数操作系统上,数据库管理员的身份验证包括将数据库管理员的操作系统用户名放在一个特殊的组中。
例如,OSDBA 组中的用户被授予 SYSDBA 管理权限。类似地,OSOPER 组用于向用户授予 SYSOPER 管理权限,OSBACKUPDBA 组用于向用户授予 SYSBACKUP 管理权限,OSDGDBA 组用于向用户授予 SYSDG 管理权限,OSKMDBA 组用于向用户授予 SYSKM 管理权限,OSRACDBA 组用于向用户授予 SYSRAC 管理权限。
使用操作系统认证
特殊操作系统组中的成员身份使 DBA 能够通过操作系统而不是数据库用户名和密码对数据库进行身份验证。这被称为操作系统身份验证。
操作系统组
在数据库安装过程中,创建操作系统组并为其分配特定的名称。
操作系统组的默认名称因操作系统不同而不同,具体如下表所示。
操作系统组 | UNIX 或 Linux 用户组 | Windows 用户组 |
---|---|---|
OSDBA | dba |
ORA_DBA (用于所有 Oracle homes)ORA_ HOMENAME _DBA (针对每个特定的 Oracle home) |
OSOPER | oper |
ORA_DBA (用于所有 Oracle homes)ORA_ HOMENAME _DBA (针对每个特定的 Oracle home) |
OSBACKUPDBA | backupdba |
ORA_ HOMENAME _SYSBACKUP |
OSDGDBA | dgdba |
ORA_ HOMENAME _SYSDG |
OSKMDBA | kmdba |
ORA_ HOMENAME _SYSKM |
OSRACDBA | racdba |
ORA_ HOMENAME _SYSRAC |
对于 Windows 用户组名,会将 HOMENAME 替换为 Oracle home 名。
Oracle 通用安装程序使用这些默认名称,但是,在 UNIX 或 Linux 上,您可以覆盖它们。在 UNIX 或 Linux 上,重写它们的一个原因是,如果您在不同 Oracle 主系统的同一台主机计算机上运行多个实例。如果每个实例有不同的人作为主 DBA,那么您可以通过为每个实例创建不同的组来提高每个实例的安全性。
例如,对于不同 Oracle home 中同一 UNIX 或 Linux 主机上的两个实例,第一个实例的 OSDBA 组可能被命名为 dba1,第二个实例的 OSDBA 组可能被命名为 dba2。第一个 DBA 将仅是 dba1 的成员,第二个 DBA 将仅是 dba2 的成员。因此,在使用操作系统身份验证时,每个 DBA 只能连接到他分配的实例。
Windows 操作系统不支持修改默认用户组名。HOMENAME 占位符允许您在同一台主机 Windows 计算机上运行多个实例时使用不同的用户组名。
组中的成员身份以以下方式影响到数据库的连接:
- 如果您是 OSDBA 组的成员,并且在连接到数据库时指定 AS SYSDBA,那么您将使用 SYSDBA 管理特权连接到数据库。
- 如果您是 OSOPER 组的成员,并且在连接到数据库时指定 AS SYSOPER,那么您将以 SYSOPER 管理权限连接到数据库。
- 如果您是 OSBACKUPDBA 组的成员,并且在连接到数据库时指定 AS SYSBACKUP,那么您将以 SYSBACKUP 管理特权连接到数据库。
- 如果您是 OSDGDBA 组的成员,并且在连接到数据库时指定 AS SYSDG,那么您将使用 SYSDG 管理权限连接到数据库。
- 如果您是 OSKMDBA 组的成员,并且在连接到数据库时指定 AS SYSKM,那么您将使用 SYSKM 管理权限连接到数据库。
- 如果您是 OSRACDBA 组的成员,并且在连接到数据库时指定 AS SYSRAC,那么您将以 SYSRAC 管理特权连接到数据库。
- 如果您不是这些操作系统组之一的成员,并且尝试以 SYSDBA、SYSOPER、SYSBACKUP、SYSDG、SYSKM 或 SYSRAC 的身份进行连接,则 connect 命令将失败。
准备使用操作系统认证
DBA 可以通过操作系统而不是数据库用户名和密码对数据库进行身份验证。
启用管理用户的操作系统认证。
- 为该用户创建操作系统帐户。
- 将帐户添加到适当的操作系统定义的组中。
使用操作系统认证方式连接
用户可以通过操作系统身份验证方式连接数据库。
您可以通过执行以下操作之一来使用操作系统身份验证。
-
通过输入以下 SQL*Plus 命令之一,可以对用户进行身份验证,启用管理用户,并连接到本地数据库:
CONNECT / AS SYSDBA
CONNECT / AS SYSOPER
CONNECT / AS SYSBACKUP
CONNECT / AS SYSDG
CONNECT / AS SYSKM
-
仅对于 Windows 平台,支持通过安全连接进行远程操作系统身份验证。您必须为远程数据库指定 net 服务名称:
CONNECT /@net_service_name AS SYSDBA
CONNECT /@net_service_name AS SYSOPER
CONNECT /@net_service_name AS SYSBACKUP
CONNECT /@net_service_name AS SYSDG
CONNECT /@net_service_name AS SYSKM
客户端计算机和数据库主机计算机都必须位于 Windows 域中。
使用密码文件认证方式
可以对 Oracle 数据库实例和 Oracle ASM(Oracle Automatic Storage Management)实例使用密码文件认证。说明 Oracle 数据库的密码文件称为数据库密码文件,Oracle ASM 的密码文件称为 Oracle ASM 密码文件。
准备使用密码文件身份验证
为了准备密码文件认证,您必须创建密码文件,设置 REMOTE_LOGIN_PASSWORDFILE
初始化参数,并授予权限。
要启用使用密码文件身份验证对管理用户进行身份验证,必须执行以下操作:
-
如果还没有创建,那么使用 ORAPWD 实用程序创建密码文件:
orapwd FILE=filename FORMAT=12.2
-
将
REMOTE_LOGIN_PASSWORDFILE
初始化参数设置为exclusive
。(这是默认设置)。 -
以用户 SYS(或具有管理权限的其他用户)连接到数据库。
-
如果数据库中不存在该用户,则创建该用户并分配密码。
-
授予该用户 SYSDBA、SYSOPER、SYSBACKUP、SYSDG 或 SYSKM 管理权限。例如:
GRANT SYSDBA to mydba;
该语句将用户添加到密码文件中,从而可以连接 AS SYSDBA、AS SYSOPER、AS SYSBACKUP、AS SYSDG 或AS SYSKM。
使用密码文件认证方式连接
使用密码文件身份验证,可以使用 SQL*Plus CONNECT 命令将管理用户连接到本地或远程数据库并对其进行身份验证。缺省情况下,密码区分大小写。
使用密码文件认证连接:
- 在 SQL*Plus 中,使用有效的用户名和密码以及 AS SYSDBA、AS SYSOPER、AS SYSBACKUP、AS SYSDG 或 AS SYSKM 子句执行 CONNECT 命令。
例如,如果用户 mydba 被授予 SYSDBA 权限,那么 mydba 可以这样连接:
CONNECT mydba AS SYSDBA
但是,如果用户 mydba 没有被授予 SYSOPER 权限,那么下面的命令将失败:
CONNECT mydba AS SYSOPER