文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Oracle 19c的参数sec_case_sensitive_logon与ORA-01017错误问题分析

2023-04-26 16:37

关注

oracle的参数sec_case_sensitive_logon是Oracle 11g开始被引入。这个参数主要是为了控制密码的大小写敏感问题。
sec_case_sensitive_logon=true表示密码区分大小写。
sec_case_sensitive_logon=false表示密码不区分大小写。
从Oracle 12c开始,参数sec_case_sensitive_logon被弃用了。但是为了向下兼容,即使在Oracle 19c中,这个参数依然保留了。这个参数在Oracle 12c(确切的说是12.2以及后续版本)和19c中不能设置为false,因为它和SQLNET.ALLOWED_LOGON_VERSION_SERVER=12或者SQLNET.ALLOWED_LOGON_VERSION_SERVER=12a不兼容。这是因为用于此模式的更安全的密码版本仅支持区分大小写的密码检查。简单点来说,就是这种环境下,这种设置会冲突。官方文档[1]的阐述如下所示:

Notethefollowingimplicationsofsettingthevalueto12or12a:
•AvalueofFALSEfortheSEC_CASE_SENSITIVE_LOGONOracleinstanceinitializationparametermustnotbeusedbecausepasswordcaseinsensitivityrequirestheuseofthe10Gpasswordversion.IftheSEC_CASE_SENSITIVE_LOGONOracleinstanceinitializationparameterissettoFALSE,thenuseraccountsandsecurerolesbecomeunusablebecauseExclusiveModeexcludestheuseofthe10Gpasswordversion.TheSEC_CASE_SENSITIVE_LOGONOracleinstanceinitializationparameterenablesordisablespasswordcasesensitivity.However,sinceExclusivemodeisenabledbydefaultinthisrelease,disablingthepasswordcasesensitivityisnotsupported.
Note:
•TheuseoftheOracleinstanceinitializationparameterSEC_CASE_SENSITIVE_LOGONisdeprecatedinfavorofsettingtheSQLNET.ALLOWED_LOGON_VERSION_SERVERparameterto12toensurethatpasswordsaretreatedinacase-sensitivefashion.
•DisablingpasswordcasesensitivityisnotsupportedinExclusivemode(whenSQLNET.ALLOWED_LOGON_VERSION_SERVERissetto12or12a.)
•ReleasesofOCIclientsearlierthanOracleDatabase10gcannotauthenticatetotheOracledatabaseusingpassword-basedauthentication.
•IftheclientusesOracleDatabase10g,thentheclientwillreceiveanORA-03134:Connectionstothisserverversionarenolongersupportederrormessage.Toallowtheconnection,settheSQLNET.ALLOWED_LOGON_VERSION_SERVERvalueto8.EnsuretheDBA_USERS.PASSWORD_VERSIONSvaluefortheaccountcontainsthevalue10G.Itmaybenecessarytoresetthepasswordforthataccount.

下面我们来构造一个例子,看看这个参数sec_case_sensitive_logon的影响


SQL>selectbanner_fullfromv$version;

BANNER_FULL
----------------------------------------------------------------------------------------------------
OracleDatabase19cEnterpriseEditionRelease19.0.0.0.0-Production
Version19.3.0.0.0


1rowselected.

SQL>showparametersec_case_sensitive_logon;

NAMETYPEVALUE
-------------------------------------------------------------------
sec_case_sensitive_logonbooleanTRUE
SQL>alterusersystemidentifiedby"system#1245";

Useraltered.
SQL>SETLINESIZE1080;
SQL>SETPAGESIZE36;
SQL>COLUSERNAMEFORA24;
SQL>COLACCOUNT_STATUSFORA16;
SQL>COLDEFAULT_TABLESPACEFORA16;
SQL>COLTEMPORARY_TABLESPACEFORA10;
SQL>COLPROFILEFORA10;
SQL>COLLOCK_DATEFORA20;
SQL>COLEXPIRY_DATEFORA20;
SQL>COLPASSWORD_VERSIONSFORA12;
SQL>SELECTUSERNAME
2,ACCOUNT_STATUS
3,DEFAULT_TABLESPACE
4,TEMPORARY_TABLESPACE
5,PROFILE
6,TO_CHAR(LOCK_DATE,'YYYY-MM-DDHH24:MI:SS')ASLOCK_DATE
7,TO_CHAR(EXPIRY_DATE,'YYYY-MM-DDHH24:MI:SS')ASEXPIRY_DATE
8,PASSWORD_VERSIONS
9FROMDBA_USERS
10WHEREUSERNAME=UPPER('&USERNAME')
11ORDERBYEXPIRY_DATE;
Entervalueforusername:system
old10:WHEREUSERNAME=UPPER('&USERNAME')
new10:WHEREUSERNAME=UPPER('system')

USERNAMEACCOUNT_STATUSDEFAULT_TABLESPATEMPORARY_PROFILELOCK_DATEEXPIRY_DATEPASSWORD_VER
-------------------------------------------------------------------------------------------------------------
SYSTEMOPENSYSTEMTEMPDEFAULT2023-10-2217:25:0911G12C

SQL>altersystemsetsec_case_sensitive_logon=falsescope=both;

Systemaltered.

SQL>

然后我们在另外一个窗口使用system账号登陆数据库


$sqlplussystem/system#1245

SQL*Plus:Release19.0.0.0.0-ProductiononTueApr2517:16:282023
Version19.3.0.0.0

Copyright(c)1982,2019,Oracle.Allrightsreserved.

ERROR:
ORA-01017:invalidusername/password;logondenied

如果我们将参数设置sec_case_sensitive_logon为true(这个参数调整后可以立即生效,不用重启),


SQL>showuser;
USERis"SYS"
SQL>altersystemsetsec_case_sensitive_logon=truescope=both;

Systemaltered.

SQL>

然后验证如下所示所示,一切正常,所以如果你遇到ORA-01017这个错误,而且数据库版本为12c/19c,如果你确认你密码是正确的,那么检查一下这个参数。


$sqlplussystem/system#1245

SQL*Plus:Release19.0.0.0.0-ProductiononTueApr2517:20:282023
Version19.3.0.0.0

Copyright(c)1982,2019,Oracle.Allrightsreserved.

LastSuccessfullogintime:TueApr25202309:54:37+08:00

Connectedto:
OracleDatabase19cEnterpriseEditionRelease19.0.0.0.0-Production
Version19.3.0.0.0

SQL>

下面我们再来测试一下,在参数sec_case_sensitive_logon为false的情况,我们控制密码版本来解决ORA-01017这个错误


SQL>showuser;
USERis"SYS"
SQL>showparametersec_case_sensitive_logon;

NAMETYPEVALUE
-----------------------------------------------------------------------------
sec_case_sensitive_logonbooleanFALSE
SQL>

修改sqlnet.ora这个参数文件,设置下面参数:

SQLNET.ALLOWED_LOGON_VERSION_CLIENT=10
SQLNET.ALLOWED_LOGON_VERSION_SERVER=10

修改sqlnet.ora参数文件后,必须重新登陆SQLPlus后(如果使用之前的SQLPlus连接也不会生效),执行下面脚本


SQL>alterusersystemidentifiedby"system#1245";

Useraltered.

SQL>SETLINESIZE1080;
SQL>SETPAGESIZE36;
SQL>COLUSERNAMEFORA16;
SQL>COLACCOUNT_STATUSFORA16;
SQL>COLDEFAULT_TABLESPACEFORA16;
SQL>COLTEMPORARY_TABLESPACEFORA10;
SQL>COLPROFILEFORA10;
SQL>COLLOCK_DATEFORA20;
SQL>COLEXPIRY_DATEFORA20;
SQL>COLPASSWORD_VERSIONSFORA12;
SQL>SELECTUSERNAME
2,ACCOUNT_STATUS
3,DEFAULT_TABLESPACE
4,TEMPORARY_TABLESPACE
5,PROFILE
6,TO_CHAR(LOCK_DATE,'YYYY-MM-DDHH24:MI:SS')ASLOCK_DATE
7,TO_CHAR(EXPIRY_DATE,'YYYY-MM-DDHH24:MI:SS')ASEXPIRY_DATE
8,PASSWORD_VERSIONS
9FROMDBA_USERS
10WHEREUSERNAME=UPPER('&USERNAME')
11ORDERBYEXPIRY_DATE;
Entervalueforusername:system
old10:WHEREUSERNAME=UPPER('&USERNAME')
new10:WHEREUSERNAME=UPPER('system')

USERNAMEACCOUNT_STATUSDEFAULT_TABLESPATEMPORARY_PROFILELOCK_DATEEXPIRY_DATEPASSWORD_VER
------------------------------------------------------------------------------------------------------------------------
SYSTEMOPENSYSTEMTEMPDEFAULT2023-10-2309:21:2710G11G12C

1rowselected.

SQL>

此时验证system账号登陆,则不会报ORA-01017这个错误了。


$sqlplussystem/system#1245

SQL*Plus:Release19.0.0.0.0-ProductiononWedApr2609:22:182023
Version19.3.0.0.0

Copyright(c)1982,2019,Oracle.Allrightsreserved.

LastSuccessfullogintime:TueApr25202317:20:29+08:00

Connectedto:
OracleDatabase19cEnterpriseEditionRelease19.0.0.0.0-Production
Version19.3.0.0.0

SQL>

注意:最好使用其他账号验证测试,这里仅仅是为了偷懒,使用测试环境的system账号测试验证。更多相关信息也可以参考The new Exclusive Mode default for password-based authentication in Oracle 12.2 conflicts with case-insensitive password configurations. All user login fails with ORA-1017 after upgrade to 12.2 (Doc ID 2075401.1)[2]

参考资料

[1]

官方文档1: https://docs.oracle.com/en/database/oracle/oracle-database/19/netrf/parameters-for-the-sqlnet.ora.html#GUID-1FA9D26C-4D97-4D1C-AB47-1EC234D924AA

[2]

Doc ID 2075401.1: https://support.oracle.com/epmos/faces/DocumentDisplay?_afrLoop=249715360691380&id=2075401.1&_afrWindowMode=0&_adf.ctrl-state=1agoeyy4f0_80

到此这篇关于Oracle 19c的参数sec_case_sensitive_logon与ORA-01017错误的文章就介绍到这了,更多相关Oracle 19c sec_case_sensitive_logon与ORA-01017内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-数据库
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯