暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

Oracle 19C sqlplus / as sysdba执行报ORA-01017: invalid username/password; logon denied问题解决及记录

原创 尚雷 2023-03-20
2819

一、问题描述

一日早上,有项目组同事反馈有套Oracle 19C数据库,其上部署了两个数据库实例,目前数据库可正常登陆,但均无法使用sqlplus / as sysdba连接所有实例,请求排查下原因并尽快解决。

二、处理过程

根据项目组同事所反馈内容,我尝试登陆该数据库服务器,并尝试使用sqlplus / as sysdba登陆数据库实例,正如那位同事所描述,两个实例均无法正常登陆,使用ps -ef|grep smon可以看到两个实例进程也都存在。

该服务器部署了grid,切换至grid用户,asmcmd查看空间剩余很多,sqlplus / as sysasm也能正常登陆。
查看数据库alert等日志,也未发现ORA报错信息。

尝试使用同事所提供的普通用户根据tnsnames.ora连接串使用sqlplus xxx/xxx@xxx也是无法登陆,并且登陆报如下错误:

ERROR:
ORA-01017: invalid username/password; logon denied

之后,使用oracle用户cd 到 $ORACLE_HOME/network/admin目录下,发现该目录下配置了sqlnet.ora,会不会和该文件里配置的内容有关呢。
打开 sqlnet.ora配置文件,发现最下方发现多了一条sqlnet.authentication_services=(NONE),

对于 sqlnet.authentication_services,如果设置不同的值会有相关作用和限制,

对于Linux平台,参数SQLNET.AUTHENTICATION_SERVICES主要是以下几种情况:

(1). sqlnet.ora文件为空,或用#注释掉 --操作系统验证通过,密码文件认证无法通过
(2). SQLNET.AUTHENTICATION_SERVICES = (NTS) --操作系统验证无法通过,密码文件认证也无法通过
(3). SQLNET.AUTHENTICATION_SERVICES = (NONE) --操作系统验证无法通过,密码文件认证也无法通过
(4). SQLNET.AUTHENTICATION_SERVICES = (NONE,NTS) --基于操作系统验证(前后顺序颠倒也一样),密码文件认证也能通过
(5). SQLNET.AUTHENTICATION_SERVICES = (ALL) --操作系统验证通过,密码文件认证无法通过

认定无法登陆跟sqlnet.ora配置SQLNET.AUTHENTICATION_SERVICES = (NONE) 有关。
不清楚该SQLNET.AUTHENTICATION_SERVICES是谁添加的,为何要添加。

三、解决办法

最后将oracle用户下的sqlnet.ora里SQLNET.AUTHENTICATION_SERVICES = (NONE)这段内容注释

重新尝试sqlplus / as sysdba,切换不同实例,均可以正常登陆了,尝试使用普通用户也能正常通过sqlplus正常登陆。
然后通知项目组进行验证测试,项目组反馈已正常。

四、总结

该问题已得到处理,但对处理结果我还不是很满意,因为有其它事也没来得及询问项目组人员,是何时出现这情况,是谁修改的sqlnet.ora文件,之前添加SQLNET.AUTHENTICATION_SERVICES = (NONE)的目前是为什么。
没过多久另一套生产系统出现了类似问题,只是项目组反馈有很多应用无法正常连接数据库,在alert日志里报了很多连接失败的信息,最后排查也是和sqlnet.ora有关。等有时间再详细写一篇该问题处理过程。
对于Oracle监听,还是有很多东西要深入学习。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

文章被以下合辑收录

评论