1.OS認證
Oracle安裝之後預設情況下是啟用了OS認證的,這裡提到的os認證是指伺服器端os認證。OS認證的意思把登入資料庫的使用者和口令校正放在了作業系統一級。如果以安裝Oracle時的使用者登入OS,那麼此時在登入Oracle資料庫時不需要任何驗證,如:
SQL> connect /as sysdba
已串連。
SQL> connect sys/aaa@test as sysdba
已串連。
SQL> connect sys/bbb as sysdba
已串連。
SQL> connect aaa/bbb as sysdba
已串連。
SQL> show user
SYS
SQL>
不論輸入什麼使用者(哪怕這個使用者如aaa在資料庫中根本不存在),只要以sysdba許可權串連資料庫,都可以串連上,並且串連使用者是sys,這樣很方便,有時候,如果忘記了資料庫的密碼,而又想登入資料庫,可以通過這種方式,前提是在資料庫伺服器上.
但是方便的同時也帶來了一些安全隱患,於是很多人想屏蔽os認證,
在win下只要把oracle_home/NETWORK/admin/sqlnet.ora中的SQLNET.AUTHENTICATION_SERVICES= (nts)nts改成none或者注釋掉這句話(在前面加上#),就可以屏蔽os功能,要想以sys使用者連上資料庫必須輸入正確的sys口令,或者可以把oracle的安裝使用者從組ora_dba中刪除掉,當然也可以直接把ora_dba這個組也刪除,都可以屏蔽os功能.如:
SQL> connect /as sysdba
ERROR:
ORA-01031: 許可權不足
SQL> connect sys/aaa as sysdba
ERROR:
ORA-01017: 使用者名稱/口令無效; 登入被拒絕
SQL> connect aaa/bbb as sysdba
ERROR:
ORA-01031: 許可權不足
SQL> connect sys/system as sysdba
已串連。
SQL>
在unix/linux下也可以在檔案sqlnet.ora中增加SQLNET.AUTHENTICATION_SERVICES=(none)以及刪除dba(groupdel dba)組或者把oracle使用者從dba組中刪除都可以屏蔽os認證。利用這兩種方法屏蔽os功能似乎總有些讓人不放心,或者說不能讓人完全信服,因為畢竟系統管理員還是可以建立ora_dba or dba組以及修改sqlnet.ora檔案......
2. 口令檔案
Oracle的口令檔案的作用是存放所有以sysdba或者sysoper許可權串連資料庫的使用者的口令,如果想以sysdba許可權遠端連線資料庫,必須使用口令檔案,否則不能連上,由於sys使用者在串連資料庫時必須以sysdba or sysoper方式,也就是說sys使用者要想串連資料庫必須使用口令檔案,因此我認為在資料庫中存放sys使用者的口令其實沒有任何意義!使用口令檔案的好處是即使資料庫不處於open狀態,依然可以通過口令檔案驗證來串連資料庫。開始安裝完oracle,沒有給普通使用者授予sysdba許可權,口令檔案中只存放了sys的口令,如果之後把sysdba許可權授予了普通使用者,那麼此時會把普通使用者的口令從資料庫中讀到口令檔案中儲存下來,當然這時必須要求資料庫處於open狀態。如:
SQL> grant sysdba to test;
授權成功。
SQL> connect test/aaa@orcl as sysdba
ERROR:
ORA-01017: 使用者名稱/口令無效; 登入被拒絕
警告: 您不再串連到 ORACLE。
SQL> connect test/test@orcl as sysdba
已串連。
SQL> alter database close;
資料庫已更改。
SQL> grant sysdba , sysoper to test;
grant sysdba , sysoper to test
*
第 1 行出現錯誤:
ORA-01109: 資料庫未開啟
到底有幾個使用者被授予了sysdba或者sysoper許可權,可以通過查詢如下v$pwfile_users獲得,v$pwfile_users的資訊就是源於口令檔案的.
SQL> select * from v$pwfile_users;
USERNAME SYSDB SYSOP
------------------------------ ----- -----
SYS TRUE TRUE
TEST TRUE FALSE
到底可以有幾個使用者被授予sysdba或者sysoper許可權,是由建立口令檔案時指定的entries數決定的,準確的說還不完全是,最終還和os block的大小有關,如果entries指定了5,一個os block可以存放8個使用者的口令,那麼可以由8個使用者被授予sysdba或者sysoper。
還有一個問題修改了口令,口令長度增加了,按說佔用的空間多了,事實是不論我們的口令多長,加密之後的長度幾乎都是相同的,也就是說口令檔案佔用的大小和口令指定的長度幾乎關係不大!
C:>orapwd file=databasepwd.ora password=system entries=5
OPW-00005: 存在相同名稱的檔案 - 請刪除或重新命名
C:>orapwd file=databasepwd.ora password=system entries=5 force=y
建立口令檔案需要注意的是=前後沒有空格!另外值得一提的是10g增加了一個新的參數force default值n,它的作用類似於建立資料表空間時的reuse功能,當同名檔案存在時是否覆蓋。
是否使用口令檔案,是通過oracle提供的一個參數remote_login_passwordfile來控制的,remote_login_passwordfile有none,shared,exclusive3個值,
none表示不使用口令檔案,停用口令檔案驗證,Oracle資料庫不允許遠程SYSDBA/SYSOPER身份登入
exclusive表示執行個體獨佔使用口令檔案,也就是各自執行個體使用單獨的口令檔案,
shared表示多個執行個體共用一個口令檔案,預設情況下,win下口令檔案的格式是pwdsid.ora,unix下的格式是orapwSID(大小寫敏感), Oracle資料庫在啟動時,首先尋找的是orapw<sid>的口令檔案,如果該檔案不存在,則開始尋找,orapw的口令檔案,如果口令檔案命名為orapw,多個資料庫就可以共用.
SQL> alter system set remote_login_passwordfile=exclusive scope=spfile;
3. 修改使用者密碼
//查看使用者
SQL> select username,password from dba_users;
SQL> alter user system identified by manager;
4. sys/system 密碼丟失的處理方法:
1).查詢檢視V$PWFILE_USERS,select * from V$PWFILE_USERS;
記錄下擁有 SYSOPER/SYSDBA 系統許可權的使用者 資訊
2).關閉資料庫 shutdown immediate
3).刪除密碼檔案,檔案路徑一般為:ORACLE_HOME\DATABASE,檔案名稱為 PWD<SID>.ORA
4).建立密碼檔案
ORAPWD FILE=< FILENAME > PASSWORD =< PASSWORD >
5).向密碼檔案中增加使用者
CONNECT SYS/internal_user_passsword AS SYSDBA;
啟動資料庫執行個體並開啟資料庫; 建立相應使用者帳號,對其授權
授予 許可權:GRANT SYSDBA TO user_name(如果先前資料庫 只有sys具有sysdba許可權,可不做這步)
6).修改密碼檔案狀態,預設密碼檔案的狀態shared,要將初始化參數裡的
REMOTE_LOGIN_PASSWORDFILE 設定成EXCLUSIVE
SQL> alter system set remote_login_passwordfile=exclusive scope=spfile;