一、案例
某天,收到同事反馈,同样用户名和密码其他同事能够成功连接,他自己不行。并报如下错误:
ORA-01017: invalid username/password; logon denied
二、问题
为什么同样的用户和密码有的人登陆成功,有的却登陆失败?
三、 数据收集和分析
3.1 过往经验
- 根据过往的经验一般是oracle 客户端版与服务器端不兼容
- 连接工具的版本不对
3.2 验证
- 验证待连接的数据库版本,发现是12c,12.2.0.1
- 验证客户端连接版本是11g
结论: oracle 客户端版与服务器端不兼容,建议用户升级到12c的客户端。
3.3 另一种思路
是否有另外一种方案,不需要升级客户端版本就可以解决呢?
- 于是在网上找案例,果然找到了,配置如下:
cd $ORACLE_HOME/network vi sqlnet.ora ## 添加如下内容
SQLNET.ALLOWED_LOGON_VERSION=8 # 可以不添加
SQLNET.ALLOWED_LOGON_VERSION_SERVER=8
SQLNET.ALLOWED_LOGON_VERSION_CLIENT=8
# 重启监听器
lsnrctl stop
lsnrctl start
- 这是发现原来不能登陆的用户还是不能登录,原因如下:
select username,password_versions from dba_user where username='user1' -------------------
user1 11G 12C
结论:因为不能登陆的用户user1在创建时,并没有在sqlnet.ora文件上加入SQLNET.ALLOWED_LOGON_VERSION*的参数,所以在创建时的password version 是就11g 12c ,其中这类的11g是要求版本是11.2.0.3以上。
- 解决方法,执行以下语句重置一下密码就可以了。
alter user user1 identified by abc_123;
select username,password_versions from dba_user where username='user1'
-------------------
user1 10g 11G 12C
结论:这时用户的password version就改过来了,在我的环境oracle client 11.2.0.0 都能连上12c了,10g的版本就没有环境测试了。
结论
- 另一种思路是一个取巧的方法,有可能用不上12c的一些新特性,我是不建议使用的。
- 我建议还是使用正规的方法升级oracle client到12c吧。