【转】【Oracle】oracle登录验证的三种方式(详解)

本来想自己写一篇关于oracle登录验证的博文的,但是发现有一篇比较详细的文章oracle登录验证三种方式详解讲解了这部分,因此,决定不重新造轮子了。以下是迁移过来的文章:

1.使用OS操作系统集成身份验证

在数据库服务器本机只要以sqlplus as
sysdba
连接数据库,不论输入什么用户(哪怕这个用户如aaa在数据库中根本不存在)都可以连接上,并且连接用户是sys
好处就是,如果有时候忘记了数据库用户的密码,而又想登录数据库,可以通过这种方式,前提是在数据库服务器本机上;但是方便的同时也带来了一些安全隐患,想屏蔽os认证,只要修改sqlnet.ora中的SQLNET.AUTHENTICATION_SERVICES的值就可以屏蔽OS功能。

没有sqlnet.ora文件时,默认开启OS认证

SQLNET.AUTHENTICATION_SERVICES = none | all | nts(windows)

none : 表示关闭操作系统认证,只能密码认证
all : 用于linux或unix平台,启用操作系统认证
nts : 用于windows平台,启用操作系统认证

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 只能使用密码文件、操作系统身份验证。

4.linux环境下,没有配置SQLNET.AUTHENTICATION_SERVICES时,默认OS验证和密码文件验证并存的实验场景

4.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不正常

4.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不正常

5.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 正常(说明使用了本地的密码文件验证)

你可能感兴趣的:(Oracle)