1 说明
1.1 常见认证方式
Oracle登录认证方式主要涉及到如何验证用户身份以访问数据库。Oracle数据库提供了多种认证机制来确保数据的安全性和访问控制,每种方式都有其特定的使用场景和安全性考虑。以下是Oracle中常见的登录认证方式:
1、基于操作系统的认证(OS认证)
在基于操作系统的认证中,Oracle依赖底层操作系统的用户身份验证机制。当使用OS认证时,Oracle进程以操作系统用户的身份运行,并继承该用户的权限。这种认证方式通常用于本地连接,特别是在Unix/Linux系统上。
2、密码文件认证(Password File)
密码文件(通常称为“口令文件”)是Oracle提供的一种认证机制,用于在数据库未完全启动或无法访问数据字典时,允许具有SYSDBA或SYSOPER权限的用户进行连接。密码文件通常存放在数据库服务器的特定目录下,并包含加密的用户名和密码信息。
3、数据库认证
数据库认证是最常用的认证方式,它依赖于Oracle数据字典中存储的用户名和密码信息。当用户尝试连接到数据库时,Oracle会查询数据字典以验证提供的用户名和密码是否匹配。普通用户就是使用这种认证方式。与前两种不同的地方在于,在数据库关闭的时候用户不能登录。
4、外部认证
如果配置了os_authent_prefix参数,如默认值为 ops$,当数据库中存在用户 ops$lu9up,且对该用户启用了外部验证。那么在操作系统上以lu9up用户登录成功后,就可以直接键入 sqlplus / ,登录用户是 ops$lu9up,密码由操作系统外部提供,不是数据字典认证。
1.2 数据库管理员身份验证
DBA经常执行一些特殊操作,如关闭数据库、启动数据库、修改参数等。由于只有DBA才能执行这些操作,所以DBA的数据库账号需要一种安全的身份验证方案。
DBA身份验证一般使用上面四种常见的登录认证的前两种:
- os认证;
- 口令文件认证。
下面就来着重讲讲这两种认证。
2 基于操作系统的认证(OS认证)
2.1 OSDBA & OSOPER
OSDBA和OSOPER是两个特殊操作系统组,如果操作系统用户属于OSDBA组或者OSOPER组,就能够通过操作系统而不是数据库用户名和密码来认证到数据库,这就是操作系统认证。这两个操作系统组通常被称为OSDBA和OSOPER。熟悉数据库安装的同学都应该有印象,OSDBA和OSOPER这两个组就是在进行操作系统(Linux)配置的时候创建的:
groupadd -g 1001 dba
groupadd -g 1002 oper
如果操作系统用户属于dba组或者oper组,那么在登录操作系统后,登录数据库的方式为:
- 如果用户是dba组的成员,并在连接到数据库时指定了as sysdba,那么将以sysdba系统特权连接到数据库。如:sqlplua / as sysdba
- 如果用户是oper组的成员,并在连接到数据库时指定了as sysoper,那么您将以sysoper系统特权连接到数据库。如:sqlplua / as sysoper
- 如果用户不是这两个操作系统组的成员,却尝试以SYSDBA或SYSOPER身份连接,那么CONNECT命令将失败。ORA-01017: invalid username/password; logon denied。
下面来试验一下:
创建一个新的操作系统用户lu9up,暂时不添加任何组:
切换到lu9up用户,尝试指定as sysdba连接数据库:
手动配置一下环境变量,要不然没有sqlplus的路径。
因为lu9up用户不属于dba组,所以OS认证不通过,指定as sysdba连接数据库失败。
给lu9up用户添加dba组,再一次尝试指定as sysdba连接数据库:
3 密码文件认证(Password File)
oracle密码文件用于存储拥有部分特权用户的口令。
是sysdba或者sysoper身份的用户的远程认证密码文件,主要用于sys用户(严格来说是具有sysdba系统权限的用户)的远程登录认证。
这个密码文件的作用就是当数据库未启动的时候,可以通过密码验证的方式登录数据库并进行一系列的mount和open操作。在口令文件丢失或被破坏的情况下,SYS用户仍然可以以本地sysdba身份验证登录到数据库中(OS认证),但不能以sysdba远程登录了。
密码文件通常位于Oracle用户下的$ORACLE_HOME/dbs目录中,并命名为orapw<ORACLE_SID>。在创建数据库时,会生成密码文件,但也可以使用ORAPWD工具手动创建。创建密码文件时,需要指定文件名、SYS账号的口令以及密码文件中可以存放的最大用户数。
在使用密码文件时,需要设置初始化参数REMOTE_LOGIN_PASSWORDFILE来控制其使用状态。这个参数可以设置为EXCLUSIVE、SHARED或NONE,以确定密码文件的使用方式和搜索顺序。
查看初始化参数REMOTE_LOGIN_PASSWORDFILE:
参数值解释:
- shared:密码文件可供多个数据库实例使用,可以包含sys用户和非sys用户。
- exclusive:默认值,密码文件只能用于单个数据库实例,可以包含sys用户和非sys用户。
- none:系统不使用密码文件,特权用户的只能依靠OS认证登录连接数据。
创建一个密码文件:
说明:
- file:密码文件的文件名为orapworcl;
- entries:允许5个不同的用户拥有sysdba或者sysoper系统权限;
- force:覆盖存在的密码文件;
- password:sys用户的密码。
尝试进行远程登录:
参数REMOTE_LOGIN_PASSWORDFILE当前值为exclusive,允许使用密码文件。当前服务器ip地址为56.3,ssh远程登录到56.2服务器,sqlplus sys/lu9up@192.168.56.3/orcl as sysdba
命令连接数据库。
将参数REMOTE_LOGIN_PASSWORDFILE设置为none:
说明:
- issys_mod=false,说明修改参数不能立刻生效,需要重启后才生效;
- startup force为强制重启。
参数设置为none后再次远程连接,这次应该是连不上了: