天天看點

AG閱讀總結10.3——密碼檔案管理*

一、密碼檔案

    作用:主要進行DBA權限的身份認證

    DBA使用者:具有sysdba,sysoper權限的使用者被稱為dba使用者。預設情況下sysdba角色中存在sys使用者,sysoper角色中存在system使用者

二、Oracle的兩種認證方式;

    1.使用與作業系統內建的身份驗證

    2.使用Oracle資料庫的密碼檔案進行身份認證

三、密碼檔案的位置

    Linux下的存放位置:$ORACLE_HOME/dbs/orapw$ORACLE_SID

                  即:ORACLE_HOME/dbs/orapw<sid>

    Windows下的存放位置:$ORACLE_HOME/database/PW%ORACLE_SID%.ora

    密碼檔案查找的順序

    --->orapw<sid>--->orapw--->Failure

    兩種認證方式:類型與SQL server中的windows認證和SQL server認證

    決定在兩個參數中

    1.remote_login_passwordfile = none | exclusive |shared  位于$ORACLE_HOME/dbs/spfile$ORACLE_SID.ora參數檔案中

       none : 不使用密碼檔案認證

       exclusive :要密碼檔案認證,自己獨占使用(預設值)

       shared :要密碼檔案認證,不同執行個體dba使用者可以共享密碼檔案

    2. $ORACLE_HOME/network/admin/sqlnet.ora 

       SQLNET.AUTHENTICATION_SERVICES = none | all | ntf(windows)

       none : 表示關閉作業系統認證,隻能密碼認證

       all : 用于linux或unix平台,關閉本機密碼檔案認證,采用作業系統認證,但遠端<異機>可以使用密碼檔案認證

       nts : 用于windows平台

    不同的組合

      1           2

    none          none      sys使用者無論是本機還是遠端均不可用

    判斷目前使用的是作業系統認證還是密碼認證

四、示範:

    1.在sqlnet.ora 中追加SQLNET.AUTHENTICATION_SERVICES = none  */

    [oracle@robinson ~]$ sqlplus / as sysdba /*登陸失敗*/

    SQL*Plus: Release 10.2.0.1.0 - Production on Fri Apr 9 10:41:28

2010

    Copyright (c) 1982, 2005, Oracle.  All rights

reserved.

    ERROR:

    ORA-01031: insufficient privileges

    Enter user-name:

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

    [oracle@robinson ~]$ sqlplus sys/redhat as sysdba /*使用密碼檔案認證,登陸成功*/

    SQL*Plus: Release 10.2.0.1.0 - Production on Fri Apr 9 10:42:35

    Connected to:

    Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production

    With the Partitioning, OLAP and Data Mining options

    SQL>

    ============================================================================================================

    2.将SQLNET.AUTHENTICATION_SERVICES的值改為all

    [oracle@robinson admin]$ sqlplus / as sysdba /*采用本機認證可以登陸*/

    SQL*Plus: Release 10.2.0.1.0 - Production on Fri Apr 9 10:46:55

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

    [oracle@robinson admin]$ sqlplus sys/redhat@orcl as sysdba          /*使用密碼檔案登陸認證失敗*/

    SQL*Plus: Release 10.2.0.1.0 - Production on Fri Apr 9 10:48:35

    ORA-12641: Authentication service failed to initialize

    --注:此時可以使用遠端登陸。 

    --使用#符号将新增的SQLNET.AUTHENTICATION_SERVICES行注釋掉恢複到預設值

五、密碼檔案的建立:orapwd  

    [oracle@robinson ~]$ orapwd

    Usage: orapwd file=<fname> password=<password> entries=<users> force=<y/n>

      where

       file - name of password file (mand),  /*密碼檔案的名字orapw<sid>*/

       password - password for SYS (mand),   /*sys使用者的密碼*/

       entries - maximum number of distinct DBA and  /*可以有多少個sysdba,sysoper權限使用者放到密碼檔案中去,去掉重複記錄*/

                                                /*注意entries中存放的個數但不是實際個數,這個是二進制資料*/  

       force - whether to overwrite existing file (opt), /*10g新增的參數,預設值為n

,y表示允許覆寫*/

    OPERs (opt),

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

    --修改密碼:

    [oracle@robinson ~]$ cd $ORACLE_HOME/dbs

    [oracle@robinson dbs]$ ll orapworcl

    -rw-r----- 1 oracle oinstall 1536 Apr  7 15:50 orapworcl

    [oracle@robinson dbs]$ orapwd file=orapworcl password=oracle force=y

    [oracle@robinson dbs]$ sqlplus sys/oracle@orcl as sysdba

    SQL*Plus: Release 10.2.0.1.0 - Production on Fri Apr 9 11:34:09

    SQL>  

    --将密碼改回原來的密碼

    [oracle@robinson dbs]$ orapwd file=orapworcl password=redhat

    OPW-00005: File with same name exists - please delete or rename

    [oracle@robinson dbs]$ orapwd file=orapworcl password=redhat force=y

    [oracle@robinson dbs]$ rm orapworcl  /*删除密碼檔案*/

    [oracle@robinson dbs]$ orapwd file=orapworcl password=redhat /*重建密碼檔案*/

    --示範将entries 改為1,然後将多個使用者設定為sysdba或sysoper

    [oracle@robinson dbs]$ orapwd file=orapworcl password=redhat entries=1

    [oracle@robinson dbs]$ strings orapworcl

    ]/[Z

    ORACLE Remote Password file

    INTERNAL

    F7AC0C5E9C3C37AB

    E100B964899CDDDF

    --建立PL/SQL 增加20個新使用者

    SQL> begin

      2  for i in 1..20 loop

      3  execute immediate 'create user u'||i||' identified by u'||i||'';

      4  end loop;

      5  end;

      6  /

    --将新使用者賦予sysdba角色

    PL/SQL procedure successfully completed.

      3  execute immediate 'grant sysdba to u'||i||'';

    begin  /*得到和密碼檔案相關的錯誤提示*/

    *

    ERROR at line 1:

    ORA-01996: GRANT failed: password file '' is full

    ORA-06512: at line 3

    --再次檢視orapworcl發現多出了行,即當設定為的時候多出了個使用者。原因是該密碼檔案是二進制檔案,按矩陣計算可存放多少

    [oracle@robinson dbs]$ strings orapworcl

    3E81B724A296E296

    668509DF9DD36B43

    9CE6AF1E3F609FFC

    7E19965085C9ED47

    --注意不要輕易删掉密碼檔案,這樣會将其他賬戶的資訊也删除

六、導緻密碼檔案内容修改的幾種方式:

    1.使用orapwd建立,修改密碼檔案,不建議使用

    2.使用alter user sys identified by <>

    3.使用grant sysdba to <> 或grant sysoper to <> 或revoke sysdba |sysoper from <>

七、檢視密碼檔案内容 */

    --當sys密碼不記得可以使用OS系統身份認證登陸到sqlplus,再使用alter

user修改密碼

    SQL> alter user sys identified by oracle;

    User altered

    --再次檢視密碼檔案與上一次對比,已經發生變化

    SQL> ho strings orapworcl

    AB27B53EDC5FEF41

    8A8F025737A9097A

    --通過授予權限來修改密碼,密碼檔案中多出了scott的資訊

    SQL> grant sysdba to scott;

    Grant succeeded.

    SCOTT

    F894844C34402B67

    --注意此處中登陸後,顯示的賬戶資訊還是sys,而不是scott,但此時的scott已經具備了sys權限

    [oracle@robinson dbs]$ sqlplus scott/tiger@orcl as sysdba

    SQL*Plus: Release 10.2.0.1.0 - Production on Fri Apr 9 11:56:09

    SQL> show user

    USER is "SYS"

八、sysdba 與sysoper的差別

    SQL> select * from system_privilege_map where name like '%SYS%';

     PRIVILEGE NAME                                       PROPERTY

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

           -3 ALTER SYSTEM                                      0

           -4 AUDIT SYSTEM                                       0

          -83 SYSDBA                                                  0

          -84 SYSOPER                                              0

    --下面的連結是兩者不同的權限說明    

    http://download.oracle.com/docs/cd/B19306_01/server.102/b14231/dba.htm#sthref137

    The manner in which you are authorized to use these privileges depends upon the method of authentication

that you use.

    When you connect with SYSDBA or SYSOPER privileges, you connect with a default schema,

    not with the schema that is generally associated with your username.

    For SYSDBA this schema is SYS; for SYSOPER the schema is PUBLIC.

    --兩者的schema不同

    SQL> conn / as sysoper

    Connected.

    USER is "PUBLIC"

    --檢視密碼檔案視圖,可以得到哪些使用者為sysdba,哪些使用者為sysoper

    SQL> select * from v$pwfile_users;

    USERNAME                       SYSDB      SYSOP

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

    SYS                                    TRUE        TRUE

    SCOTT                              TRUE         FALSE

    USER1                              FALSE       TRUE

    --下面示範了使用不同的角色來登陸

    SQL> conn scott/tiger@orcl as sysdba

    SQL> conn scott/tiger@orcl as sysoper              /*scott的sysop列為false*/

    Warning: You are no longer connected to ORACLE.

    SQL> conn user1/user1@orcl as sysdba

    SQL> conn user1/user1 as sysoper

1.2  OS 認證相關的參數

       Oracle資料庫通過如下3個參數來實作OS 認證:

(1)sqlnet.ora中的 SQLNET.AUTHENTICATION_SERVICES參數。

(2)PFILE(或SPFILE)檔案中的參數REMOTE_LOGIN_PASSWORDFILE

(3)密碼檔案PWDsid.ora(windows)或者 orapwSID(linux,大小寫敏感)。

1.2.2  REMOTE_LOGIN_PASSWORDFILE 參數

該參數可以有如下值:

       REMOTE_LOGIN_PASSWORDFILE ='NONE'|'EXCLUSIVE'|'SHARED'

       (1)NONE:不使用密碼檔案登入、不允許遠端使用者用sys登入系統、可以線上修改sys的密碼;

       (2)EXCLUSIVE:預設值。隻允許一個資料庫使用該密碼檔案、允許遠端登入、允許非sys使用者以sysdba身份管理資料庫、可以線上修改sys的密碼。在這種模式下,密碼檔案可以包含用于多個特許的Oracle賬戶的密碼。這是推薦的操作模式,特别是在運作RMAN時。如果希望将RMAN與來自于遠端用戶端的資料庫連接配接,則必須使用該參數設定。

      (3)SHARE:可以多個資料庫使用密碼檔案。實際上是這樣的: Oracle資料庫在啟動時,首先查找的是orapw<sid>的密碼檔案,如果該檔案不存在,則開始查找,orapw的密碼檔案如果密碼檔案命名為orapw,多個資料庫就可以共享、允許遠端登入、隻能用sys進行sysdba管理、可以線上修改sys的密碼。在此設定下隻有INTERNAL/SYS帳号能被識别,即使檔案中存有其它使用者的資訊,也不允許他們以SYSOPER/SYSDBA登入。

修改:

SQL>ALTER SYSTEM SET REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE SCOPE=SPFILE;

需要注意的是:這個參數不是動态參數。需要在資料庫加載到MOUNT狀态下修改,另外改變以後需要重新啟動資料庫,參數的設定才能夠生效。

1.3 禁用OS認證

OS 認證存在一定的安全隐患,我們可以屏蔽OS認證。

1.3.1 windows下

       在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

ORA-01017: 使用者名/密碼無效; 登入被拒絕

SQL> connect aaa/bbb as sysdba

SQL> connect sys/system as sysdba

已連接配接。

SQL>

1.3.2  LINUX/UNIX 下

       在檔案sqlnet.ora中增加SQLNET.AUTHENTICATION_SERVICES=(none)以及删除dba(groupdel dba)組或者把oracle使用者從dba組中删除都可以屏蔽os認證。

注意:

       使用這種屏蔽方法, 系統管理者還是可以建立ora_dba or dba組以及修改sqlnet.ora檔案。

二. 密碼檔案

2.1 密碼檔案說明

       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

警告: 您不再連接配接到 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: 資料庫未打開

2.2 檢視具有sysdba 權限的使用者

       可以通過查詢v$pwfile_users視圖來檢視有幾個使用者被授予了sysdba或者sysoper權限, 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: 存在相同名稱的檔案 - 請删除或重命名

       建立密碼檔案需要注意的是=前後沒有空格。在10g增加了一個新的參數force default值n,它的作用類似于建立表空間時的reuse功能,當同名檔案存在時是否覆寫。

       是否使用密碼檔案,由remote_login_passwordfile參數控制。這個參數在上面有說明。

2.4  sys/system 密碼丢失的處理方法

(1).查詢視圖V$PWFILE_USERS,select * from V$PWFILE_USERS;

  記錄下擁有 SYSOPER/SYSDBA 系統權限的使用者資訊。

(2)關閉資料庫 shutdown immediate

(3)将密碼檔案重命名

(4)用orapwd 指令重建建立密碼檔案

       orapwd file=/u01/app/oracle/product/10.2.0/db_1/dbs/orapworcl password=admin

 entries=5   force=y

(5)将第一步查出來的使用者添加到密碼檔案

              grant sysdba , sysoper to user;