12c只有sys能登陆,其它用户均报ORA-01017
ORA-01017: invalid username/password; logon denied
这个报错很基础,但我不是因为字面意义而产生的错误。实际产生这个报错的原因也很简单,比我多熟悉一点点12c的同道们一定很容易就能找到原因。本人菜鸟初初接触12c,遇到这次报错觉得很莫名。
现象及过程
- 拿到一个新的服务器,以之前安装11g的习惯安装了12.2.0.1并创建了一个non-CDB。
- 继续按照老习惯,用sys登陆数据库,放开profile上所有限制,关闭大小写敏感参数。
alter system set sec_case_sensitive_logon=false; - 根据业务需求创建了一个用户bam并赋好权限。然后想切换到这个用户,验证一下创建是否正常。
死活登陆不了啊,只报这个错啊。我怎么可能写错了密码,我才建的用户好嘛。 - 尝试了好几次,发现好莫名,结果只有sys能登陆。
sqlplus bam/bam 不行
sqlplus system/knight 也不行了! - 菜鸟如我也不知道怎么找原因。无知的我怀疑自己是不是在安装的时候误操作了什么,于是决定删了这个库重装。
- 重装后立即尝试,sys、system均可正常登陆。
- 修改了profile后立即尝试,sys、system均可正常登陆。
- 关闭大小写敏感后立即尝试,sys可以正常登陆,system失败!
- 创建用户bam并尝试切换到新用户,登陆失败!
- 重新把sec_case_sensitive_logon置为TRUE后测试,system正常,bam正常!所以是这个参数的原因。好吧,貌似我们的开发人员也不会在密码大小上做文章,那这参数TRUE就TRUE吧。终于可以把这个环境交给开发了。
- 开发拿去用了,说登陆不了。
这个我熟,回头就去服务器上添加了sqlnet.ora,并设置了参数。
SQLNET.ALLOWED_LOGON_VERSION_SERVER=8
SQLNET.ALLOWED_LOGON_VERSION_CLIENT=8
我们公司使用的数据库大多还是11g的,开发运维应用的人员使用的客户端版本更老,9、10、11都有。估计以后安装12c及以上的版本都得这么搞一下。 - 改了参数后继续让开发测试,开发又说登陆不了!ORA-01017!我不厚道地怀疑了一下,同学,你密码没输错哦?结论当让是人家没有输错啦。可是为什么我能行他不能行呢,我们两的区别在于我的客户端是12c的,他用的是11g。难道就是因为客户端版本?同学,你要不试试重装一个12c的客户端?然后我被打脸,开发说你前两周搭建过一个相同环境的测试库,它就可以正常登陆的。小菜鸟表示我怎么不记得那库是我装的了。。。
- 接下来还是要找原因啊。在METLINK上搜了ORA,没找到贴合的,只是更明确了12c以后大小写敏感是强制的。百度时无意发现了有人提到“因为密码规则已经事先确定,所以要重置密码后才能兼容低版本的密码规则”!!!原来如此,于是我立即重置了bam密码。
- 通知开发测试,登陆成功了!
分析及收获
-
至此,我的记忆回归了~开发所说的两周前能成功登陆的测试库,当初我交付给他的是一个空库,bam用户是他后来自行创建的,在他创建之前sqlnet.ora已经创建并设置好参数了,所以就避开了那个报错。
-
在问题处理过程中查看到的一些资料有提到我所设置的sec_case_sensitive_logon从12c开始已经过期无效了,如果我重启数据库应该就能看到存在过期参数的提示。另外,相关的密码文件命令orapwd中的ignorecase参数也已经去掉了。所以,12c开始密码大小写敏感是强制的。
-
这次处理的问题也算是从12c之前版本向12c过渡过程中的磕绊。公司里少说也有近千台终端使用的是低版本客户端,除了这些问题还有没有其它注意事项暂未得知,现在只能先记下来,以后建新数据库时要事先做好这些设置再交付给用户。