现场在数据库linux服务器上
sqlplus / as sysdba
ERROR:
ORA-01017: invalid username/password; logon denied
可能与下列两个参数有关
1.remote_login_passwordfile = none | exclusive |shared 位于$ORACLE_HOME/dbs/spfile$ORACLE_SID.ora参数文件中
none : 不使用密码文件认证
exclusive :要密码文件认证,自己独占使用(默认值)
shared :要密码文件认证,不同实例dba用户可以共享密码文件
2. $ORACLE_HOME/network/admin/sqlnet.ora
SQLNET.AUTHENTICATION_SERVICES = none | all | ntf(windows)
none : 表示关闭操作系统认证,只能密码认证
all : 用于linux或unix平台,关闭本机密码文件认证,采用操作系统认证,但远程<异机>可以使用密码文件认证
nts : 用于windows平台
show parameter remote_login_passwordfile 为none的话,要改为EXCLUSIVE
还与SQLNET.AUTHENTICATION_SERVICES这个参数有关。
在公司内部机器上的linux做了一个实验:
show parameter remote_login_passwordfile 为EXCLUSIVE,说明与这个参数没有关系。
确认$ORACLE_HOME/network/admin/sqlnet.ora中,没有SQLNET.AUTHENTICATION_SERVICES这个参数的配置。
当配置SQLNET.AUTHENTICATION_SERVICES = none的时候,重现了不能登陆的问题。
当配置SQLNET.AUTHENTICATION_SERVICES = ALL的时候,可以登陆。
到现场配置:
$ORACLE_HOME/network/admin/sqlnet.ora 中配置SQLNET.AUTHENTICATION_SERVICES = ALL,发现还是不能登陆。
使用strace调试
[oracle@DB ~]$ strace sqlplus / as sysdba
看到这一段:
access("/oracle/product/11.2.0.4/dbhome_1/network/admin/sqlnet.ora", F_OK) = 0
open("/oracle/product/11.2.0.4/dbhome_1/network/admin/sqlnet.ora", O_RDONLY) = 6
fcntl(6, F_SETFD, FD_CLOEXEC) = 0
fstat(6, {st_mode=S_IFREG|0644, st_size=246, ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fc83c985000
read(6, "# sqlnet.ora Network Configurati"..., 4096) = 246
read(6, "", 4096) = 0
close(6) = 0
munmap(0x7fc83c985000, 4096) = 0
access("/home/oracle/.sqlnet.ora", F_OK) = 0
open("/home/oracle/.sqlnet.ora", O_RDONLY) = 6
fcntl(6, F_SETFD, FD_CLOEXEC) = 0
fstat(6, {st_mode=S_IFREG|0777, st_size=38, ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fc83c985000
read(6, "SQLNET.AUTHENTICATION_SERVICES=("..., 4096) = 38
read(6, "", 4096) = 0
close(6)
神奇了,有/home/oracle/.sqlnet.ora这一个文件,里面配置的内容是SQLNET.AUTHENTICATION_SERVICES = none,改为ALL之后,sqlplus / as sysdba可以登陆了。问题解决了,但为什么会加载.sqlnet.ora这个文件,完全没有搞懂。
sqlplus / as sysdba
ERROR:
ORA-01017: invalid username/password; logon denied
可能与下列两个参数有关
1.remote_login_passwordfile = none | exclusive |shared 位于$ORACLE_HOME/dbs/spfile$ORACLE_SID.ora参数文件中
none : 不使用密码文件认证
exclusive :要密码文件认证,自己独占使用(默认值)
shared :要密码文件认证,不同实例dba用户可以共享密码文件
2. $ORACLE_HOME/network/admin/sqlnet.ora
SQLNET.AUTHENTICATION_SERVICES = none | all | ntf(windows)
none : 表示关闭操作系统认证,只能密码认证
all : 用于linux或unix平台,关闭本机密码文件认证,采用操作系统认证,但远程<异机>可以使用密码文件认证
nts : 用于windows平台
show parameter remote_login_passwordfile 为none的话,要改为EXCLUSIVE
还与SQLNET.AUTHENTICATION_SERVICES这个参数有关。
在公司内部机器上的linux做了一个实验:
show parameter remote_login_passwordfile 为EXCLUSIVE,说明与这个参数没有关系。
确认$ORACLE_HOME/network/admin/sqlnet.ora中,没有SQLNET.AUTHENTICATION_SERVICES这个参数的配置。
当配置SQLNET.AUTHENTICATION_SERVICES = none的时候,重现了不能登陆的问题。
当配置SQLNET.AUTHENTICATION_SERVICES = ALL的时候,可以登陆。
到现场配置:
$ORACLE_HOME/network/admin/sqlnet.ora 中配置SQLNET.AUTHENTICATION_SERVICES = ALL,发现还是不能登陆。
使用strace调试
[oracle@DB ~]$ strace sqlplus / as sysdba
看到这一段:
access("/oracle/product/11.2.0.4/dbhome_1/network/admin/sqlnet.ora", F_OK) = 0
open("/oracle/product/11.2.0.4/dbhome_1/network/admin/sqlnet.ora", O_RDONLY) = 6
fcntl(6, F_SETFD, FD_CLOEXEC) = 0
fstat(6, {st_mode=S_IFREG|0644, st_size=246, ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fc83c985000
read(6, "# sqlnet.ora Network Configurati"..., 4096) = 246
read(6, "", 4096) = 0
close(6) = 0
munmap(0x7fc83c985000, 4096) = 0
access("/home/oracle/.sqlnet.ora", F_OK) = 0
open("/home/oracle/.sqlnet.ora", O_RDONLY) = 6
fcntl(6, F_SETFD, FD_CLOEXEC) = 0
fstat(6, {st_mode=S_IFREG|0777, st_size=38, ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fc83c985000
read(6, "SQLNET.AUTHENTICATION_SERVICES=("..., 4096) = 38
read(6, "", 4096) = 0
close(6)
神奇了,有/home/oracle/.sqlnet.ora这一个文件,里面配置的内容是SQLNET.AUTHENTICATION_SERVICES = none,改为ALL之后,sqlplus / as sysdba可以登陆了。问题解决了,但为什么会加载.sqlnet.ora这个文件,完全没有搞懂。