Oracle的3种认证方式
1.使用OS操作系统集成身份验证在数据库服务器本机只要以sqlplus as sysdba连接数据库,不论输入什么用户(哪怕这个用户如aaa在数据库中根本不存在)都可以连接上,并且连接用户是sys
好处就是,如果有时候忘记了数据库用户的密码,而又想登录数据库,可以通过这种方式,前提是在数据库服务器本机上;但是方便的同时也带来了一些安全隐患,想屏蔽os认证,只要修改sqlnet.ora中的SQLNET.AUTHENTICATION_SERVICES的值就可以屏蔽OS功能
没有sqlnet.ora文件时,默认开启OS认证
SQLNET.AUTHENTICATION_SERVICES = none | all | nts(windows下表示启用OS认证)
all : 用于linux、unix、windows平台,启用OS认证
nts : 用于windows平台,启用OS认证,其他平台使用这个值表示关闭OS认证
none : 表示关闭OS认证,只能密码认证或其他认证
all: all for all authentication methods.
nts: nts for Microsoft Windows native operating system authentication
none: none for no authentication methods, including Microsoft Windows native operating system authentication. When SQLNET.AUTHENTICATION_SERVICES is set to none, a valid user name and password can be used to access the database.
总结
SQLNET有AUTHENTICATION_SERVICES:如果后面有=,但是值不是all,表示关闭OS认证,只能密码认证或其他认证(特殊一点,如果是nts则仅在windows才表示开启OS认证,其他平台都是关闭OS认证)
如果后面没有=,表示忽略AUTHENTICATION_SERVICES,即和下面SQLNET没有AUTHENTICATION_SERVICES一样
SQLNET没有AUTHENTICATION_SERVICES:
表示默认开启OS认证
2.使用密码文件进行身份认证
Oracle中的密码文件存放着具有sysdba, sysoper权限的用户名及口令。在数据库没有启动之前,数据库的内建用户是无法通过数据库本身来验证身份的。使用密码文件的好处是即使数据库不处于open状态,依然可以通过密码文件验证来连接数据库,在数据库未启动之前登陆从而启动数据库(典型的使用场景duplicate)。如果没有密码文件,在数据库未启动之前就只能通过操作系统认证.
远程异机用户不能使用OS登录,只能基于密码文件的验证,如果想以sysdba权限远程连接数据库,必须使用密码文件,否则不能连上!开始安装完oracle,没有给普通用户授予sysdba权限,密码文件中只存放了sys的口令,如果把sysdba权限授予了普通用户,那么此时会把普通用户的口令从数据库中读到密码文件中保存下来,当然这时必须要求数据库处于open状态。
到底有几个用户被授予了sysdba或者sysoper权限,可以通过查询如下v$pwfile_users获得,v$pwfile_users的信息就是源于密码文件的(This view lists users who have been granted SYSDBA and SYSOPER privileges as derived from the password file.)
到底可以有几个用户被授予sysdba或者sysoper权限,是由创建密码文件时指定的entries数决定的
orapwd file='$ORACLE_HOME/dbs/orapwSID' password=123456 entries=5 force=y
当然sql>alter user sys identified by XX时,密码文件也自动被修改了即linux下ll命令时看到密码文件的修改时间会变
REMOTE_LOGIN_PASSWORDFILE specifies whether Oracle checks for a password file.
Values:
■ shared
One or more databases can use the password file. The password file can contain
SYS as well as non-SYS users.
■ exclusive
The password file can be used by only one database. The password file can contain
SYS as well as non-SYS users.This is the Default value
■ none
Oracle ignores any password file. Therefore, privileged users must be
authenticated by the operating system.
sqlplus sys/正确密码 as sysdba(可能使用了OS认证也可能使用了密码文件认证,如果不能OS认证,就是数据库服务器本地使用密码文件认证)
sqlplus sys/正确密码@tns_name as sysdba(只能使用密码文件认证)
3.口令身份验证
sqlplus username/password[@db_alias]
CONNECT username/password[@db_alias]
这是 Oracle 一般用户使用得最多的一种身份验证方式。在使用口令身份验证进行连接时,实例将针对在数据字典中的用户账户存储的口令。验证给定的口令。为此,数据库必须处于OPEN状态;从逻辑上讲,在使用口令身份验证连接时,不可能发出 STARTUP 命令或者 SHUTDOWN 命令。不允许 SYS 用户以口令身份验证的方式进行连接,SYS 只能使用密码文件、操作系统身份验证。
1.linux环境下,没有配置SQLNET.AUTHENTICATION_SERVICES时,默认OS验证和密码文件验证并存的实验场景
1.1不删除密码文件场景
如下是使用的是OS验证
sqlplus / as sysdba正常
sqlplus test/XX as sysdba正常(XX是正确密码或错误密码都可以的)
sqlplus system/XX as sysdba正常(XX是正确密码或错误密码都可以的)
sqlplus sys/XX as sysdba正常(XX是正确密码或错误密码都可以的)
如下是使用的密码文件验证(数据库服务器本机操作,tnsname是数据库服务器本机的tns名称)
sqlplus test/正确密码@tnsname as sysdba不正常
sqlplus system/正确密码@tnsname as sysdba不正常
sqlplus sys/正确密码@tnsname as sysdba正常
sys的实际密码和和密码文件里的密码不一致的实验
sqlplus sys/错误密码@tnsname as sysdba不正常
1.2删除密码文件场景
如下是使用的是OS验证
sqlplus / as sysdba正常
sqlplus test/XX as sysdba正常(XX是正确密码或错误密码都可以的)
sqlplus system/XX as sysdba正常(XX是正确密码或错误密码都可以的)
sqlplus sys/XX as sysdba正常(XX是正确密码或错误密码都可以的)
如下是使用的密码文件验证(数据库服务器本机操作,tnsname是数据库服务器本机的tns名称)
sqlplus test/正确密码@tnsname as sysdba不正常
sqlplus system/正确密码@tnsname as sysdba不正常
sqlplus sys/正确密码@tnsname as sysdba不正常
sys的实际密码和和密码文件里的密码不一致的实验
sqlplus sys/错误密码@tnsname as sysdba不正常
2.linux环境下,配置SQLNET.AUTHENTICATION_SERVICES,且值配置为NTS时的实验场景,表示不能使用OS认证(linux下配置为ALL才能使用OS认证)
sqlplus / as sysdba不正常
sqlplus test/XX as sysdba不正常(XX是正确密码或错误密码都不可以的)
sqlplus system/XX as sysdba不正常(XX是正确密码或错误密码都不可以的
sqlplus sys/错误密码 as sysdba 不正常
sqlplus sys/正确密码 as sysdba 正常(说明使用了本地的密码文件验证)