Oracle19C關於參數sec_case_sensitive_logon控制密碼大小寫敏感問題


 

Oracle19C關於參數sec_case_sensitive_logon控制密碼大小寫敏感問題

 

該參數在Oracle11G開始推出,目的是為了控制密碼大小寫敏感問題,可以無需重啟數據庫實例的情況下設置后直接生效。

如果sec_case_sensitive_logon=true表示區分大小寫,這個是默認值。sec_case_sensitive_logon=false表示不區分大小寫。

但是,在12C以后逐漸廢棄該參數,不過為了兼容依舊可以使用,直到19C情況同樣如此。

更高版本的沒有做過測試,情況未知。

PS:不考慮user$.spare4的修改實驗,對於數據字典表或者系統基表之類的DML在沒有Oracle官方技術支持下不建議用於生產庫。出於研究鑽研的目的的話可以在自己虛擬機等環境做實驗。

 

值得注意一點的就是,sec_case_sensitive_logon=false和SQLNET.ALLOWED_LOGON_VERSION_SERVER=12或者SQLNET.ALLOWED_LOGON_VERSION_SERVER=12a不兼容。這是因為用於此模式的更安全的密碼版本僅支持區分大小寫的密碼檢查。

從密碼版本看,需要密碼版本包含10G。

是的,密碼也是有版本的,視圖dba_users就有字段password_versions可以查詢。

密碼版本的值有10G,11G,12C,由SQLNET.ALLOWED_LOGON_VERSION_SERVER控制。

10G指早期不區分大小寫的 Oracle 密碼版本,11G指基於 SHA-1 的密碼版本,12C指基於 SHA-2 的 SHA-512 密碼版本。

注意密碼版本和平時說的DataBase版本不是一個概念。

另外,引用官檔的一段話如下:點擊這里看原文

如果 SQLNET.ALLOWED_LOGON_VERSION_SERVER 參數設置為 12 或 12a,請確保 SEC_CASE_SENSITIVE_LOGON 參數未設置為 FALSE。這是因為用於此模式的更安全的密碼版本僅支持區分大小寫的密碼檢查。

出於兼容性原因,當 SQLNET.ALLOWED_LOGON_VERSION_SERVER 設置為 12 或 12a 時,Oracle 數據庫不會阻止對 SEC_CASE_SENSITIVE_LOGON 使用 FALSE。

當 SQLNET.ALLOWED_LOGON_VERSION_SERVER 設置為 12 或 12a 時,將 SEC_CASE_SENSITIVE_LOGON 設置為 FALSE 會導致所有帳戶無法訪問。

如果 SQLNET.ALLOWED_LOGON_VERSION_SERVER 設置為 11 或更低的值,那么 Oracle 建議您將 SEC_CASE_SENSITIVE_LOGON 設置為 TRUE,因為在 Oracle Database 12c 中獨占模式下使用的更安全的密碼版本(當 SQLNET.ALLOWED_LOGON_VERSION_SERVER 為 12 或 12a 時)不區分大小寫的密碼匹配。

 

盲目將sec_case_sensitive_logon設置為false會導致登錄報ORA-01017錯誤。

以19C數據庫為例子,默認情況下產生的密碼版本值為“11G 12C”,這是因為默認的SQLNET.ALLOWED_LOGON_VERSION_SERVER=12。

SQL> select BANNER_FULL from v$version;

BANNER_FULL
--------------------------------------------------------------------------------
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0


SQL> select distinct password_versions from dba_users;

PASSWORD_VERSIONS
-----------------
11G 12C


SQL> show pdbs

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 PDB                            READ WRITE NO
SQL> alter session set container=pdb;

Session altered.

SQL> create user zkm identified by oracle;

User created.

SQL> select password_versions from dba_users where username='ZKM';

PASSWORD_VERSIONS
-----------------
11G 12C

 

 

將sec_case_sensitive_logon設置為false后,

SQL> grant resource,connect to zkm;

Grant succeeded.

SQL> exit
Disconnected from Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0

[oracle@oracle19c ~]$ sqlplus zkm/oracle@oracle19c/pdb                                   ----此時可以正常登錄

SQL*Plus: Release 19.0.0.0.0 - Production on Thu Nov 11 09:32:49 2021
Version 19.3.0.0.0

Copyright (c) 1982, 2019, Oracle.  All rights reserved.


Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0

SQL> exit
[oracle@oracle19c ~]$ sqlplus / as sysdba

SQL*Plus: Release 19.0.0.0.0 - Production on Thu Nov 11 09:33:14 2021
Version 19.3.0.0.0

Copyright (c) 1982, 2019, Oracle.  All rights reserved.


Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0

SQL> alter system set sec_case_sensitive_logon=false sid='*' scope=both;

System altered.
SQL> alter session set container=pdb;

Session altered.

SQL>  show parameter case

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
sec_case_sensitive_logon             boolean     FALSE
SQL> exit
Disconnected from Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0
[oracle@oracle19c ~]$ sqlplus zkm/oracle@oracle19c/pdb

SQL*Plus: Release 19.0.0.0.0 - Production on Thu Nov 11 09:34:07 2021
Version 19.3.0.0.0

Copyright (c) 1982, 2019, Oracle.  All rights reserved.

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


Enter user-name: 

 

 

需要在數據庫版本12C以后不區分密碼大小寫,即sec_case_sensitive_logon=false生效,需要使得用戶的密碼版本包含10G這個身份驗證協議。

前邊提到過,密碼版本通過SQLNET.ALLOWED_LOGON_VERSION_SERVER控制,下邊是SQLNET.ALLOWED_LOGON_VERSION_SERVER的值對Password Version的影響表

SQLNET.ALLOWED_LOGON_VERSION_SERVER設置 8 11 12 12a

服務器以獨占模式運行?

是的

是的

生成10G密碼版本?

是的

是的

生成11G密碼版本?

是的

是的

是的

生成12C密碼版本?

是的

是的

是的

是的

這里引用Oracle19C官方文檔的一段話:原文點擊這里

默認情況下,Oracle 數據庫使用不允許不區分大小寫的密碼的獨占模式來管理密碼版本。

在默認安裝中,該SQLNET.ALLOWED_LOGON_VERSION_SERVER參數設置12為啟用獨占模式。獨占模式要求基於密碼的身份驗證協議對要進行身份驗證的帳戶使用區分大小寫的密碼版本 (11G12C) 之一。

獨占模式不使用10G早期版本中使用的密碼版本。升級到 Oracle Database 12 c 第2 版 (12.2) 后,使用10G密碼版本的帳戶將無法訪問。出現這種情況是因為服務器默認以獨占模式運行,獨占模式無法使用舊10G密碼版本對客戶端進行身份驗證。服務器沒有用於驗證客戶端的密碼版本。

版本 10 g 中的用戶帳戶使用10G密碼版本。因此,您應該找到使用10G密碼版本的用戶帳戶,然后為這些帳戶重置密碼。這將根據SQLNET.ALLOWED_LOGON_VERSION_SERVER參數的設置生成適當的密碼版本,如下所示:

  • SQLNET.ALLOWED_LOGON_VERSION_SERVER=8產生這三個密碼版本10G11G12C

  • SQLNET.ALLOWED_LOGON_VERSION_SERVER=12生成11G12C密碼版本,並刪除10G密碼版本。

  • SQLNET.ALLOWED_LOGON_VERSION_SERVER=12a僅生成12C密碼版本。

 

因此,需要在oracle用戶下創建或修改文件sqlnet.ora的ALLOWED_LOGON_VERSION_SERVER值為11或者8(推薦為8),如下:

vi $ORACLE_HOME/network/admin/sqlnet.ora
SQLNET.ALLOWED_LOGON_VERSION_SERVER=11

 

再次驗證:

[oracle@oracle19c admin]$ sqlplus / as sysdba

SQL*Plus: Release 19.0.0.0.0 - Production on Thu Nov 11 10:32:03 2021
Version 19.3.0.0.0

Copyright (c) 1982, 2019, Oracle.  All rights reserved.


Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0

SQL> alter session set container=pdb;

Session altered.

SQL> create user value11 identified by oracle;

User created.

SQL> select password_versions from dba_users where username='VALUE11';

PASSWORD_VERSIONS
-----------------
10G 11G 12C

SQL> grant resource,connect to value11; 

Grant succeeded.

SQL> alter session set container=cdb$root;

Session altered.

SQL> alter system set sec_case_sensitive_logon=false sid='*' scope=both;

System altered.

SQL> exit
Disconnected from Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0
[oracle@oracle19c admin]$ sqlplus value11/oracle@oracle19c/pdb

SQL*Plus: Release 19.0.0.0.0 - Production on Thu Nov 11 10:33:51 2021
Version 19.3.0.0.0

Copyright (c) 1982, 2019, Oracle.  All rights reserved.


Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0

SQL> exit
Disconnected from Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0
[oracle@oracle19c admin]$ sqlplus value11/OrAcLe@oracle19c/pdb           --使用大小寫混合的密碼成功登錄

SQL*Plus: Release 19.0.0.0.0 - Production on Thu Nov 11 10:37:36 2021
Version 19.3.0.0.0

Copyright (c) 1982, 2019, Oracle.  All rights reserved.

Last Successful login time: Thu Nov 11 2021 10:33:51 +08:00

Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0

SQL> 

 

關於密碼大小寫的至此。

 

關於低版本客戶端連接高版本客戶端有一個非常常見的錯誤ORA-28040: No matching authentication protocol。

這里的概念有些混亂,比如SQLNET.ALLOWED_LOGON_VERSION_SERVER影響着dba_users.password_versions的值,同時也表示設置連接到 Oracle 數據庫實例時允許的最低身份驗證協議

SQLNET.ALLOWED_LOGON_VERSION_CLIENT表示設置客戶端允許的最低身份驗證協議,以及當服務器充當客戶端時,例如通過數據庫鏈接進行連接,以及連接到 Oracle 數據庫實例時。這個就搞不懂了。

 

 

 

參考文檔

官方文檔-管理密碼區分大小寫

官方文檔-SQLNET.ALLOWED_LOGON_VERSION_SERVER

11gR1 New Feature Case-Sensitive Passwords and Strong User Authentication (文檔 ID 429465.1)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM