天天看點

Oracle 12.2中的一個參數說明(r12筆記第76天)

    之前花了些時間做了Oracle

10g,11g,12c參數的差别,其中有一個參數很有意思,在不同版本代表的含義還有所差别。就是sec_case_sensitive_logon。它是從10g到11g新增的參數,預設是true,代表的含義就是登入使用者的大小寫敏感,而實際上這個參數的使用效果卻不好,基本是作為預設的配置來禁用掉的,舉一個很簡單的例子,oracle

10g中我使用system/oracle的使用者名密碼和SYSTEM/ORACLE這樣的使用者名密碼是沒有差别的,而一旦更新到11g,開啟了這個特性,很多連接配接就會被阻塞,再加上其它的特性,密碼錯誤次數觸發門檻值,資料庫賬戶直接被鎖定,直接導緻業務中斷,是以抛開規範化和标準化的束縛,這個特性本意是好的,但是總是感覺差了那麼一點。

 這種感覺怎麼形容呢,就和我看到的這個動态圖效果差不多,好比左邊是Oracle的使用者,右邊是Oracle的産品組。

Oracle 12.2中的一個參數說明(r12筆記第76天)

  是以Oracle 12c中這個參數又有變化,關鍵你有變化,含義還和以前不一樣了,這就讓人很糾結了。

   這個問題得從我最近做的一個測試說起。

   我配置了一個PDB,但是建立使用者之後,怎麼連接配接都提示錯誤。

$ sqlplus test/oracle@tcymob0

SQL*Plus: Release 12.2.0.1.0 Production on Fri May 26 18:13:24 2017

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

ERROR:

ORA-01017: invalid username/password; logon denied   這個問題讓我很疑惑,我幾乎是排查了所有網絡的配置,但是似乎都不奏效,無意中想起這個參數,把它啟用之後,就可以正常連接配接,禁用大小寫敏感,連接配接就會失敗,這個配置讓我有些沮喪,有種碰到了bug的感覺。

  這一點上就要自我批評了,如果能夠靜下心來仔細看看這個參數的含義,而不是想當然,這個問題的分析就會容易的多。 Ensure that the SEC_CASE_SENSITIVE_LOGON parameter is not set to FALSE if the SQLNET.ALLOWED_LOGON_VERSION_SERVER parameter is set to 12 or 12a.

This is because the more secure password versions used for this mode

only support case-sensitive password checking. For compatibility

reasons, Oracle Database does not prevent the use of FALSE for SEC_CASE_SENSITIVE_LOGON when SQLNET.ALLOWED_LOGON_VERSION_SERVER is set to 12 or 12a. Setting SEC_CASE_SENSITIVE_LOGON to FALSE when SQLNET.ALLOWED_LOGON_VERSION_SERVER is set to 12 or 12a causes all accounts to become inaccessible. If SQLNET.ALLOWED_LOGON_VERSION_SERVER is set to 11 or a lower value, then Oracle recommends that you set SEC_CASE_SENSITIVE_LOGON to TRUE, because the more secure password versions used in Exclusive Mode (when SQLNET.ALLOWED_LOGON_VERSION_SERVER is 12 or 12a) in Oracle Database 12c do not support case insensitive password matching.

官方文檔的描述在這裡發現和11g有了很大的差别,這個參數的設定目前是向下相容,但是在新版本中已經過期,在設定的時候務必需要保證sqlnet.ora中的設定需要相容,檔案中的參數SQLNET.ALLOWED_LOGON_VERSION_SERVER如果是12,12a就需要保證SEC_CASE_SENSITIVE_LOGON不為false

 明白了這一點再來看這個問題就會清晰很多了。不過說來也是,如果我知道了問題的原委再來看詳細的解釋就會清晰很多,但是如果我不知道,這個過程又是一個非常痛苦的經曆。