2018-05-29 KK日记,连接ORACLE 12C时报用户名和密码不对

时间:2022-04-17 21:34:11

一、案例

某天,收到同事反馈,同样用户名和密码其他同事能够成功连接,他自己不行。并报如下错误:

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吧。