- ORA-28040 没有匹配的验证协议
- 问题出现场景
oracle数据库为12c,应用使用的jdbc或客户端工具是11g版本一下,连接12c数据库时会报ora-28040错误。 - 解决办法
在Oracle服务端的$ORACLE_HOME/network/admin/sqlnet.ora文件中添加:
SQLNET.ALLOWED_LOGON_VERSION_SERVER=10
SQLNET.ALLOWED_LOGON_VERSION_CLIENT=10
后面10是对应客户端工具的版本号,如果客户端工具版本很低,可以进行调整。
这时,再次连接数据库时,会报用户密码错误。需要修改一次数据库密码就可以了。
alter user username identified by "密码";
按上述方法操作后,不再报“ORA-28040 没有匹配的验证协议”的错误了,但仍报“ORA - 1017用户名/口令无效; 登录被拒绝”错误,解决方法见第二条。
- ORA-1017用户名/口令无效; 登录被拒绝
参考:https://www.cnblogs.com/freepc/p/16309749.html
一、出现症状
1、使用sqlplus连接正常
2、C#使用10g的ODP.NET连接时,报上面的错误
二、原因
1、Oracle11G之前密码是不区分大小写的,从11G开始默认密码区分大小写
2、使用10G的ODP.NET时,会自动把密码转换成大写
三、解决办法
1、给连接字符串中密码使用加上引号,这样密码就不会转成大写了
2、换成11G客户端
3、修改数据库,禁用大小写敏感模式:ALTER SYSTEM SET SEC_CASE_SENSITIVE_LOGON = FALSE
因我的连接字符串是写在XML文件里,在XML文件里“引号”是需要转义的,现提供XML中常用的转义字符:
< | < | 小于号 |
> | > | 大于号 |
& | & | 和 |
' | ' | 单引号 |
" | " | 双引号 |
最后解决方法:
CMD进入命令行,输入以下命令:
sqlplus / as sysdba
ALTER SYSTEM SET SEC_CASE_SENSITIVE_LOGON = FALSE;
- 用户被锁定,解锁
查询是否被锁
select username, account_status, lock_date from dba_users;
oracle解锁用户
ALTER USER username ACCOUNT UNLOCK;
- 修改用户名、密码
修改用户名:
update user$ set name='新用户名' where name='旧用户名'
修改密码:
alter user username identified by "密码";
- 修改表字段的排序
(1)以数据库管理员身份连接数据库
附修改管理员密码方法:
- 在Oracle服务端命令行中执行命令:sqlplus "/ as sysdba"
- 然后执行SQL语句:alter user SYS identified by newpassword;
“newpassword”为修改后的新密码(注意密码里如果有特殊字符可能会失败)。
(2)查询表的Id
使用以下SQL查询表的Id,其中“UserName”为用户名,“TableName”为待查询的表名:
select object_id from all_objects where owner = 'UserName' and object_name = 'TableName';
(3)更新表字段排序
在PLSql中通过以下sql查询并修改字段排序,其中“78387”为上一步查到的表Id:
select obj#,col#,name from sys.col$ where obj#=78387 for update;