在Oracle的11g之前的版本中密碼是不區分大小寫的(使用雙引号強制除外)。在Oracle的11g版本中對此有所增強。從此密碼有了大小寫的區分,這個大小寫敏感特性是通過SEC_CASE_SENSITIVE_LOGON參數來控制的。簡單探索一下。
1.建立Secooler使用者,注意它的密碼同時包含大寫字母和小寫字母。
sys@ora11gR2> create user Secooler identified by Secooler;
User created.
sys@ora11gR2> grant connect to secooler;
Grant succeeded.
從這個授權成功上可見,使用者名仍然不區分大小寫。
2.嘗試使用全小寫的密碼登陸
sys@ora11gR2> conn secooler/secooler
ERROR:
ORA-01017: invalid username/password; logon denied
Warning: You are no longer connected to ORACLE.
報錯,顯然不行,此時大小寫敏感性檢查已經啟用。
3.使用“正确”的密碼“Secooler”進行登陸,成功。
sys@ora11gR2> conn secooler/Secooler
Connected.
secooler@ora11gR2> show user;
USER is "SECOOLER"
4.看一下“幕後黑手”SEC_CASE_SENSITIVE_LOGON參數的描述
sys@secooler> show parameter sec_case_sensitive_logon
NAME TYPE VALUE
-------------------------- ---------- -----------
sec_case_sensitive_logon boolean TRUE
sys@ora11gR2> select a.ksppinm name,b.ksppstvl value,a.ksppdesc description
2 from x$ksppi a,x$ksppcv b
3 where a.indx = b.indx
4 and a.ksppinm = 'sec_case_sensitive_logon'
5 /
NAME VALUE DESCRIPTION
------------------------- ------ -----------------------------------------
sec_case_sensitive_logon TRUE case sensitive password enabled for logon
該參數預設值是“TRUE”,是以,預設情況下密碼大小寫是敏感的。
5.将SEC_CASE_SENSITIVE_LOGON參數修改為“FALSE”
sys@ora11gR2> alter system set sec_case_sensitive_logon = FALSE;
System altered.
6.此時系統将不對密碼做大小寫敏感驗證
7.即使修改SEC_CASE_SENSITIVE_LOGON參數為“FALSE”,在系統中記錄的也是區分大小寫的形式,隻是不進行驗證而已。
1)建立另外一個使用者sec,并授權
sys@ora11gR2> create user sec identified by SeC;
sys@ora11gR2> grant connect to sec;
2)在SEC_CASE_SENSITIVE_LOGON參數為“FALSE”時嘗試連接配接,成功,因為此時不進行校驗。
sys@ora11gR2> conn sec/sec
3)恢複SEC_CASE_SENSITIVE_LOGON參數為“TRUE”,再次嘗試連接配接将會失敗。
sec@ora11gR2> conn / as sysdba
sys@ora11gR2> alter system set sec_case_sensitive_logon = TRUE;
4)使用“正确”的密碼進行嘗試,成功。
sys@ora11gR2> conn sec/SeC
5)結論
11g環境中密碼是以區分大小寫的形式進行存儲的。
8.Oracle 11g文檔參考(11gR1和11gR2内容相同)
http://download.oracle.com/docs/cd/E11882_01/server.112/e10820/initparams218.htm#REFRN10299
SEC_CASE_SENSITIVE_LOGON
Property
Description
Parameter type
Boolean
Default value
true
Modifiable
ALTER SYSTEM
Range of values
true | false
Basic
No
SEC_CASE_SENSITIVE_LOGON enables or disables password case sensitivity in the database.
Values:
Database logon passwords are case sensitive.
false
Database logon passwords are not case sensitive.
9.小結
11g的這個密碼大小寫敏感的新特性對于提升資料庫的安全性有很大的幫助,同時也增加了密碼的排列組合數目,從此“Secooler”和“secooler”可以作為兩個不同使用者的密碼了。從這個小小的改動上可以看出Oracle諸多人性化改變無處不在。