Oracle 10g 11g密碼策略 使用者口令 大小寫敏感 說明

keeptrying發表於2013-11-20

一、Oracle 10g

1、說明

Oracle 10g下,預設情況下,密碼是不區分大小寫的。這個是由於密碼檔案的預設引數有關。

C:\Users\Administrator >orapwd

Usage: orapwd file=entries= force= ignorecase=nosysdba=

 

 where

   file - name of password file (required),

   password - password for SYS will be prompted if not specified at commandline,

   entries - maximum number of distinct DBA (optional),

   force - whether to overwrite existing file (optional),

   ignorecase - passwords are case-insensitive (optional),

   nosysdba - whether to shut out the SYSDBA logon (optional Database Vaultonly).

 

 There must be no spaces around the equal-to (=) character.

這個是口令檔案建立命令的引數說明, 這裡我們看一個引數:ignorecase - passwords are case-insensitive (optional)

注意:

     這個引數用來指定大小寫是否敏感,而預設情況是insentive 即不敏感,所以對於Oracle10g的資料庫,預設情況下,密碼是不區分大小寫的。但是在Oracle 10g中,我們無法使用這個引數,在後續的測試用有說明

雖然口令檔案裡只儲存具有SYSDBAOPER許可權的使用者,但是其他使用者也會受影響。

2、示例

這裡我們在Oracle 10g上做一個測試,為了避免OS認證的影響,我們這裡可以禁用OS認證。

SQL> select * from v$version;

BANNER

-------------------------------------------------

Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - Prod

PL/SQL Release 10.2.0.3.0 - Production

CORE    10.2.0.3.0      Production

TNS for 32-bit Windows: Version 10.2.0.3.0 - Production

NLSRTL Version 10.2.0.3.0 - Production

--建立2個測試使用者

SQL> create user usr1 identified by USr1;

使用者已建立。

SQL> create user usr2 identified by USr2;

使用者已建立。

SQL> grant connect,resource to usr1;

授權成功。

SQL> grant connect,resource to usr2;

授權成功。

SQL> grant sysdba,sysoper to usr1;

授權成功。

SQL> select * from v$pwfile_users;

USERNAME                       SYSDB SYSOP

------------------------------ ----- -----

SYS                            TRUE  TRUE

LXH                            TRUE  FALSE

USR1                           TRUE  TRUE

SQL> conn usr1/usr1;

已連線。

SQL> conn usr2/usr2;

已連線。

SQL> conn usr1/uSR1;

已連線。

SQL> conn usr1/lxh;

ERROR:

ORA-01017: 使用者名稱/口令無效; 登入被拒絕

警告: 您不再連線到 ORACLE

從這裡可以看出,在Oracle 10g下,密碼是不分大小寫的。

--繼續測試

我們將sysdba許可權從usr1使用者revoke,然後測試:

SQL> conn sys/system as sysdba

已連線。

SQL> revoke sysdba,sysoper from usr1;

撤銷成功。

SQL> select * from v$pwfile_users;

USERNAME                       SYSDB SYSOP

------------------------------ ----- -----

SYS                            TRUE  TRUE

LXH                            TRUE  FALSE

我們繼續使用usr1進行測試:

SQL> conn usr1/usr1;

已連線。

SQL> conn usr1/lxh;

ERROR:

ORA-01017: 使用者名稱/口令無效; 登入被拒絕

警告: 您不再連線到 ORACLE

從這裡可以看出,只是簡單的revoke並不能解決問題,我們重建一個口令檔案,然後測試一下看看:

E:\oracle\product\10.2.0\db_1\database>orapwd file=orapwtest password=oracle force=y;

SQL> conn usr1/usr1;

已連線。

--還是可以繼續使用,不分大小寫。

DB重啟一下看看:

SQL> shutdown immediate

ORA-01031: 許可權不足

SQL> conn sys/system as sysdba

已連線。

SQL> startup

ORACLE 例程已經啟動。

Total System Global Area  377487360 bytes

Fixed Size                  1290688 bytes

Variable Size             352325184 bytes

Database Buffers           16777216 bytes

Redo Buffers                7094272 bytes

資料庫裝載完畢。

資料庫已經開啟。

SQL> conn usr1/usr1;

已連線。

所以我們重建口令檔案不能解決問題。所以在Oracle 10g中,密碼是不區分大小寫的,這種現狀,在Oracle 11g中才得到真正的改善。

Oracle 10g中:

E:\oracle\product\10.2.0\db_1\database>orapwd file=orapwtest password=oracle force=y ignorecase=y

Usage: orapwd file= password= entries= force= nosysdba=

  where

    file - name of password file (mand),

    password - password for SYS (mand),

    entries - maximum number of distinct DBA,

    force - whether to overwrite existing file (opt),

    nosysdba - whether to shut out the SYSDBA logon (opt for Database Vault only).

  There are no spaces around the equal-to (=) character.

這裡設定了ignorecase引數之後,orapwd命令無法正常執行。因為ignorecase是在oracle 11g中真正新增的功能,在Oracle 11g中才可以使用。該引數用於設定sysdbasysoper許可權通過密碼檔案登入時是否區分大小寫。

二、Oracle 11g

1、說明

1)、sec_case_sensitive_logon引數

Oracle 11g中,Oracle開始區分密碼大小寫,這個由引數: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:

true: Database logon passwords are case sensitive.

false:Database logon passwords are not case sensitive.

使用者如果是從Oracle 10g匯入的,那麼PASSWORD_VERSIONS的值就是“10g”,維護區分大小寫的密碼不依賴於SEC_CASE_SENSITIVE_LOGON引數設定。假設SEC_CASE_SENSITIVE_LOGON引數被設定為TRUE,密碼立即變為大小寫敏感。

2)、口令檔案

C:\Users\Administrator >orapwd

Usage: orapwd file=entries= force= ignorecase=nosysdba=

 

 where

   file - name of password file (required),

   password - password for SYS will be prompted if not specified at commandline,

   entries - maximum number of distinct DBA (optional),

   force - whether to overwrite existing file (optional),

   ignorecase - passwords are case-insensitive (optional),

   nosysdba - whether to shut out the SYSDBA logon (optional Database Vaultonly).

 

 There must be no spaces around the equal-to (=) character.

orapwd工具的ignorecase引數允許你控制在密碼檔案中的密碼是否大小寫敏感,它的預設值是“n”,即預設大小寫敏感。如果特權使用者(SYSDBASYSOPER)是從之前的資料庫版本中匯入的,它們的密碼也會包括在密碼檔案中,這些使用者將會保留大小寫敏感的密碼,直到密碼被修改。

如果指定ignorecase=y,則Oracle會忽略密碼驗證時密碼的大小寫。

示例一:

SQL> show parameter sec_case_sensitive_logon

NAME                                TYPE        VALUE
------------------------------------ ----------- ------------------------------
sec_case_sensitive_logon            boolean     TRUE

--建立測試使用者:

SQL> create user dave identified byDavE;

User created.

SQL> grant connect,resource to dave;

Grant succeeded.

 

SQL> conn dave/dave;

ERROR:

ORA-01017: invalid username/password; logondenied

 

Warning: You are no longer connected toORACLE.

SQL> conn dave/DavE;

Connected.

--這裡區分大小寫

 

 

--修改引數:

SQL> conn / as sysdba;

Connected.

SQL> alter system set sec_case_sensitive_logon=false;

System altered.

 

SQL> show parametersec_case_sensitive_logon

NAME                    TYPE        VALUE

----------------------------------------------- -------

sec_case_sensitive_logon     boolean    FALSE

 

SQL> conn dave/dave;

Connected.

--禁用sec_case_sensitive_logon 就不區分大小寫了。

示例二:

在上面我們是通過sec_case_sensitive_logon 來設定的,這裡我們通過口令檔案引數來進行設定。

Oracle 11g中,口令檔案的ignorecase 引數用於設定sysdbasysoper許可權通過密碼檔案登陸時是否區分大小寫。預設情況下,ignorecase 引數是區分大小寫的。

注意這裡的ingorecase 引數僅僅是在密碼檔案中建立大小寫敏感的密碼。

先禁用OS認證

SQL>show parametersec_case_sensitive_logon

 

NAME                                 TYPE        VALUE

----------------------------------------------- ------

sec_case_sensitive_logon             boolean     TRUE

 

 

C:\Users\Administrator.DavidDai>orapwdfile=D:\app\Administrator\product\11.2.0\dbhome_1\database\pwdDAVE.orapassword=OraclE force=y ignorecase=y

 

 

--測試ignorecase引數對賦予sysdba 許可權使用者的影響:

C:\Users\Administrator.DavidDai>

 

SQL> conn / as sysdba

Connected.

SQL> create user dave1 identified byDavE;

User created.

 

SQL> grant connect,resource to dave1;

Grant succeeded.

 

SQL> conn dave1/dave;

ERROR:

ORA-01017: invalid username/password; logondenied

 

Warning: You are no longer connected toORACLE.

SQL> conn dave1/DavE;

Connected.

--這裡也必須使用正確的密碼,包括大小寫。

 

SQL> conn / as sysdba;

Connected.

 

SQL> grant sysdba,sysoper to dave1;

Grant succeeded.

 

SQL> select * from v$pwfile_users;

USERNAME                       SYSDB SYSOP SYSAS

------------------------------ ----- ----------

SYS                            TRUE  TRUE FALSE

DAVE1                          TRUE  TRUE FALSE

 

SQL> conn dave1/DavE;

Connected.

SQL> conn dave1/dave;

ERROR:

ORA-01017: invalid username/password; logondenied

 

 

Warning: You are no longer connected to ORACLE.

--通過這個測試我們可以看出,在建立口令檔案時對後來賦予sysdba許可權的使用者來說,沒有影響,不能指定其是否忽略大小寫。

--測試SYS 使用者:

我們建立口令檔案時就是針對這個這個使用者的。

 

SQL> conn sys/oracle as sysdba;

Connected.

SQL> conn sys/OraclE as sysdba;

Connected.

SQL> conn sys/dave as sysdba;

ERROR:

ORA-01017: invalid username/password; logondenied

 

 

Warning: You are no longer connected toORACLE.

--這裡SYS 使用者成功忽略了大小寫問題。

總結:

通過以上2個測試,可以得出結論:

1sec_case_sensitive_logon引數可以指定使用者的口令是否區分大小寫。

2)口令檔案中的ignorecase 引數僅僅針對建立時是否區分大小寫,簡言之,只能爭對SYS使用者。

三、Oracle 10g,11gDBlink

通過前面的說明,可以看到Oracle 10g11g中對密碼出的驗證策略不同,所以如果在不同版本庫之間建DBLINK,那麼密碼也就會成為一個問題,可能出現密碼不對的問題,具體的注意事項如下:

111g連線到11g

建立資料庫連線時,密碼必須與遠端資料庫使用者的密碼大小寫一致。

211g連線到11g以前的資料庫:

建立資料流連線時用的密碼大小寫隨意,因為遠端資料庫會忽略大小寫的。

311g以前的資料庫連線到11g

將遠端使用者的密碼修改為大寫,或者用引號括起來,只有這樣才能通過11g以前的資料庫驗證。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/25744374/viewspace-777049/,如需轉載,請註明出處,否則將追究法律責任。

相關文章