最近在客户那边实施DG时,通过sqlplus sys/oracle as sysdba 连接数据库是成功的,但是通过RMAN TARGET sys/oracle 连接总是报 ORA-01017: invalid username/password; logon denied 的错。
后来通过PL/SQL DEVELOPER 确定sys用户的密码是错的。最后由于客户也忘记了sys密码,通过重置密码后完成后续操作。
问题:为什么通过 sqlplus sys/oracle as sysdba 在操作系统上是可以连接数据库呢?
答: 当使用 sqlplus xxx/xxx as sysdba方式登录数据库时,采用了操作系统的认证方式,任意的用户名密码都能够登录,且登录帐号为SYS。
这种情况只针对拥有SYSDBA 权限的用户,其他的用户都是需要用户名和密码才能登录。
$ORACLE_HOME/network/admin 目录下的 sqlnet.ora 文件中 SQLNET.AUTHENTICATION_SERVICES 参数来控制是使用操作系统验证还是Oracle密码文件认证。
SQLNET.AUTHENTICATION_SERVICES 参数有一下常用的几个值:
ALL : 所有认证方式(默认值)
NONE: 基于Oracle密码文件认证
NTS : Windows 环境下基于操作系统方式验证
其他验证方式:
beq : for native operating system authentication for operating systems other than Microsoft Windows(Windows环境以外其他操作系统的本地操作系统认证方式)
kerberos5 : for Kerberos authentication
radius : for Remote Authentication Dial-In User Service (RADIUS) authentication
tcps : for SSL authentication
说明:
在 Unix/Linux下,默认情况下sqlnet.ora 文件中是没有 SQLNET.AUTHENTICATION_SERVICES 参数的,此时是操作系统验证和Oracle密码验证并存。
在加上SQLNET.AUTHENTICATION_SERVICES这个参数后,无论是设置为(NONE)、(NTS)或(NONE,NTS),都是基于Oracle密码验证。
在windows下,SQLNET.AUTHENTICATION_SERVICES 必须设置为NTS才能使用OS认证。
主要是以下几种情况:
1. sqlnet.ora文件为空,或用#注释掉 --基于Oracle密码文件验证
2. SQLNET.AUTHENTICATION_SERVICES = (NTS) --基于操作系统验证
3. SQLNET.AUTHENTICATION_SERVICES = (NONE) --基于Oracle密码文件验证
4. SQLNET.AUTHENTICATION_SERVICES = (NONE,NTS) --基于操作系统验证(前后顺序颠倒也一样)
注意: 当 SQLNET.AUTHENTICATION_SERVICES = (NONE) 后,当使用RMAN时,system用户就不能操作了,输入正确的密码也不行,只有sys用户并输入密码才可以。
后来通过PL/SQL DEVELOPER 确定sys用户的密码是错的。最后由于客户也忘记了sys密码,通过重置密码后完成后续操作。
问题:为什么通过 sqlplus sys/oracle as sysdba 在操作系统上是可以连接数据库呢?
答: 当使用 sqlplus xxx/xxx as sysdba方式登录数据库时,采用了操作系统的认证方式,任意的用户名密码都能够登录,且登录帐号为SYS。
这种情况只针对拥有SYSDBA 权限的用户,其他的用户都是需要用户名和密码才能登录。
$ORACLE_HOME/network/admin 目录下的 sqlnet.ora 文件中 SQLNET.AUTHENTICATION_SERVICES 参数来控制是使用操作系统验证还是Oracle密码文件认证。
SQLNET.AUTHENTICATION_SERVICES 参数有一下常用的几个值:
ALL : 所有认证方式(默认值)
NONE: 基于Oracle密码文件认证
NTS : Windows 环境下基于操作系统方式验证
其他验证方式:
beq : for native operating system authentication for operating systems other than Microsoft Windows(Windows环境以外其他操作系统的本地操作系统认证方式)
kerberos5 : for Kerberos authentication
radius : for Remote Authentication Dial-In User Service (RADIUS) authentication
tcps : for SSL authentication
说明:
在 Unix/Linux下,默认情况下sqlnet.ora 文件中是没有 SQLNET.AUTHENTICATION_SERVICES 参数的,此时是操作系统验证和Oracle密码验证并存。
在加上SQLNET.AUTHENTICATION_SERVICES这个参数后,无论是设置为(NONE)、(NTS)或(NONE,NTS),都是基于Oracle密码验证。
在windows下,SQLNET.AUTHENTICATION_SERVICES 必须设置为NTS才能使用OS认证。
主要是以下几种情况:
1. sqlnet.ora文件为空,或用#注释掉 --基于Oracle密码文件验证
2. SQLNET.AUTHENTICATION_SERVICES = (NTS) --基于操作系统验证
3. SQLNET.AUTHENTICATION_SERVICES = (NONE) --基于Oracle密码文件验证
4. SQLNET.AUTHENTICATION_SERVICES = (NONE,NTS) --基于操作系统验证(前后顺序颠倒也一样)
注意: 当 SQLNET.AUTHENTICATION_SERVICES = (NONE) 后,当使用RMAN时,system用户就不能操作了,输入正确的密码也不行,只有sys用户并输入密码才可以。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29152977/viewspace-2140693/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/29152977/viewspace-2140693/