天天看點

Orapwd 初步認識

Orapwd 初步認識

今天看到DBA常用工具裡有個orapwd,初次相識.在CMD裡輸入指令如下:

C:/Documents and Settings/Administrator>orapwd

    Usage: orapwd file=<fname> password=<password> entries=<users>

    where

    file - name of password file (mand),

    password - password for SYS (mand),

    entries - maximum number of distinct DBA and OPERs (opt),

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

例如:D:/oracle/ora92/database>orapwd file=orcl.ora password=orclsys entries=2   其中參數entries的含義是表示密碼檔案中可以存放的最大使用者數,對應于允許以SYSDBA/SYSOPER權限登入資料庫的最大使用者數,如果使用者數超過這個值隻能重建密碼檔案,增大entries。 file後面可以指定密碼檔案的全路徑和檔案名,否則建立在目前目錄下。   windows下oracle預設的位置是ora92/database目錄,預設的檔案名是pwdSID.ora,對于别的檔案名是不認的。linux下oracle預設的位置是$ORACLE_HOME/dbs目錄,預設的檔案名是orapwSID,對于别的檔案名是不認的。

1、  為什麼需要密碼檔案?

在資料庫沒有啟動之前,資料庫内建使用者是無法通過資料庫來驗證身份的.

密碼檔案中存放sysdba/sysoper使用者的使用者名及密碼,允許使用者通過密碼檔案驗證,在資料庫未啟動之前登陸,進而啟動資料庫

如果沒有密碼檔案,在資料庫未啟動之前就隻能通過作業系統認證.

使用Rman,很多時候需要在nomount,mount等狀态對資料庫進行處理

是以通常要求sysdba權限如果屬于本地DBA組,可以通過作業系統認證登陸

如果是遠端sysdba登陸,需要通過passwordfile認證.

2、密碼檔案損壞或者丢失怎麼辦?

密碼檔案就是sysdba/sysoper使用者的唯一密碼檔案,丢了就進不來,不管資料庫啟動沒有。連接配接報錯...

SQL> connect sys/[email protected] as sysdba

ERROR:

ORA-01031: insufficient privileges

隻能用作業系統級權限驗證登陸,即oracle/oracle登陸,然後orapwd重建密碼檔案:

orapwd file=orcl.ora password=orclsys entries=2

Orapwd指令第二個參數是指定sys的密碼,參數等于什麼,sys密碼以後就是什麼。為什麼要指定sys密碼?因為密碼檔案裡面必須要有使用者密碼,否則怎麼驗證啊?但此時資料庫如果沒啟動的話就根本取不到sys密碼,是以隻能強行指定了,啟動後資料庫裡面sys的密碼會被改成此時指定的。另外重建密碼檔案的工作隻能由系統驗證使用者完成,或者具有dba權限的使用者也可以,其他使用者執行orapwd指令都會失敗。

3、如何把sysdba/sysoper使用者加到密碼檔案中去?

再執行一遍grant sysdba/sysoper to  使用者 ,oracle會自動在密碼檔案中增加一個條目,并且把密碼copy過來。察看密碼檔案内容的方法:select * from v$pwfile_users;

SQL> grant sysdba to scott;

Grant succeeded

SQL> select * from v$pwfile_users;

USERNAME             SYSDBA SYSOPER

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

SYS                            TRUE      TRUE

SCOTT                      TRUE       FALSE

4、沒有密碼檔案是否可以啟動資料庫?

可以,9i及以下mount過程中會報錯,然後手動open就可以了。因為隻要用本地驗證使用者照樣可以做sysdba的事情,沒有理由讓資料庫啟動不了。10g已經不會報錯了。

5、沒有密碼檔案為什麼是mount階段報錯而不是nomount階段報錯?

因為隻有到了alter mount階段才驗證各種檔案,nomount隻讀spfile/pfile建立程序。

6、修改sysdba/sysoper使用者密碼時,能否同步到密碼檔案?

可以同步。Alter user xxx identified by yyy.

所有密碼忘記都沒關系,但至少要記住sys使用者密碼。

7、spfile/pfile中remote_login_passwordfile是幹嘛用的?

三種設定模式:可以通過show parameter pass指令檢視目前模式

remote_login_passwordfile = EXCLUSIVE,則一個執行個體專用;

remote_login_passwordfile = SHARE則可以多個執行個體共享(用于OPS/RAC環境);

remote_login_passwordfile = NONE則不啟用密碼檔案,此時任何sysdba/sysoper都無法連接配接進來。

remote_login_passwordfile = shared

我們看一下Oracle9i文檔中的說明:

More than one database can use a password file. However, the only user recognized by the password file is SYS.

意思是說多個資料庫可以共享一個密碼檔案,但是隻可以識别一個使用者:SYS

在用SPFILE的情況下,remote_login_passwordfile參數怎麼改呢?SPFILE是不可以強行編輯的,否則資料庫不認的。用alter system set remote_login_passwordfile=none scope=spfile.

改成NONE以後怎麼改回來呢?

用os級認證登陸,然後alter system set remote_login_passwordfile=none scope=spfile,或者直接create spfile from pfile;

remote_login_passwordfile=’none’意味着禁用密碼檔案,有也不能用。等于可以disable所有sysdba/sysoper,此時隻能用oracle/oracle使用者來啟動和關閉資料庫,也就是隻有os認證,沒有密碼檔案認證,這就是此參數的意義—密碼檔案驗證的開關。

8、sqlnet.ora中SQLNET.AUTHENTICATION_SERVICES=(NTS/NONE)有什麼用?

NTS=NT Security  即采用OS優先認證登陸,NONE為不可以,必須采用usr/pwd as sysdba/sysoper 登陸。這裡是作業系統級驗證的開關。如果SQLNET.AUTHENTICATION_SERVICES=(NONE)并且remote_login_passwordfile=’none’,即兩個開關都關閉,那麼神仙也進不了資料庫,hoho…我指的是sysdba/sysoper使用者,普通使用者可以照常使用的。當然,有實體權限的人也除外,即你可以實體地打開這台計算機操作。

總結一下,ORACLE有兩種方式可以認證sysdba/sysoper使用者:作業系統級認證—dba權限組(linux/unix)和ORA_DBA組(win);密碼檔案認證。

兩種方式有各自的開關:sqlnet.ora中AUTHENTICATION_SERVICES參數;spfile/pfile中remote_login_passwordfile參數。并且這兩個開關互不沖突,可以同時打開同時關閉或者隻開一個。

OS級認證是優先于密碼檔案認證的。

部分轉自http://www.eygle.com/faq/passwordfile.htm,連結裡的例子做了半天了,隻能說了解了整個基本的流程,密碼檔案的原理,實驗做了我半天,最後把我本機ORACLE都弄死了,打開任務管理器殺掉程序重新啟動才OK的,,,有所收獲,,,繼續的我DBA入門之路..