REMOTE_LOGIN_PASSWORDFILE=(NONE): 不使用口令文件
REMOTE_LOGIN_PASSWORDFILE=(EXCLUSIVE): 口令文件认证方式,但只有一个数据库实例可以使用此文件,系统允许将SYSOPER/SYSDBA授予除INTERNAL/SYS以外的其他用户,且以具有这类身份的其他用户登录是有效的
REMOTE_LOGIN_PASSWORDFILE=(SHARED): 口令文件认证方式,可有多个数据库实例使用此文件,但是此设置下只有INTERNAL/SYS帐号能被识别,即使文件中存有其他用户的信息,也不允许他们以SYSOPER/SYSDBA登录
这样,根据这个定义,我们便可以衍生出如下论断:
因为,在远程客户端连接数据库时,sys用户无法像在服务器上一样使用OS认证,而只能用口令文件认证,如果,我们对参数remote_login_passwordfile进行如上none设置,便禁用了远程的以as sysdba的身份登录,如果数据库关闭,参数又设置了none,那远程就没有办法登录了,因为既无法读取数据库内的密码信息,又无法通过口令文件登录。
如果本地的OS认证关闭了,sys用户可以口令文件认证登录,但如果参数设置了NONE,那就没法在登录以登录了。(注意,普通用户在数据库开启的情况下应该是不受影响的,没验证)
1)当取值为EXCLUSIVE时
允许客户端以SYSDBA或SYSOPER权限登录到数据库实例中完成数据库管理操作;
允许授予和回收SYSDBA或SYSOPER权限。
2)当取值为NONE时
禁止客户端以SYSDBA或SYSOPER权限登录到数据库实例中完成数据库管理操作;
禁止授予和回收SYSDBA或SYSOPER权限。
3)当取值为SHARED时
允许客户端以SYSDBA或SYSOPER权限登录到数据库实例中完成数据库管理操作;
禁止授予和回收SYSDBA或SYSOPER权限。
修改此参数alter system set remote_login_passwordfile=exclusive scope=spfile
静态参数的修改,然后重启数据库有效
SQLNET.AUTHENTICATION_SERVICES=(NTS)|(NONE)
SQLNET.AUTHENTICATION_SERVICES=(NTS): 操作系统认证方式,不使用口令文件
SQLNET.AUTHENTICATION_SERVICES=(NONE) : 口令文件认证方式
可以通过改变sqlnet.ora文件,可以修改oracle登录认证方式:
经过测试,以上规则只适用于windows服务器,在linux下规则如下:
默认情况下linux下的oracle数据库sqlnet.ora文件没有SQLNET.AUTHENTICATION_SERVICES参数,此时是基于操作系统认证和oracle密码验证共存的,加上SQLNET.AUTHENTICATION_SERVICES参数后,不管SQLNET.AUTHENTICATION_SERVICES设置为NONE或者NTS,都是基于oracle密码验证的,设置为all或是省略不写,则为OS认证。在linux中,此文件一般位于$ORACLE_HOME/network/admin/sqlnet.ora
(三)两者的关系
这两个参数的混合使用,对用户的登录方式产生了一些限制
本地:
方式一: 本地oracle安装用户 sqlplus / as sysdba
方式二: 本地oracle安装用户 sqlplus sys/sys as sysdba
方式三: 本地oracle安装用户 sqlplus sys/sys@linuxtest as sysdba
远程:
方式四: 远程的用户 sqlplus "sys/sys@linuxtest as sysdba"
方式五: 远程的用户 sqlplus "sys/sys@192.168.128.2:1521/test as sysdba"
其中:
密码是sys
tns的服务名是linuxtest
sid是test
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/27425054/viewspace-747246/ ,如需转载,请注明出处,否则将追究法律责任。