1. 程式人生 > 其它 >Oracle 12.2中的一個引數說明(r12筆記第76天)

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 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

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