通通透透分析Oracle的登陸認證方式(10g)

zcs0237發表於2013-03-22
[i=s] 本帖最後由 zcs0237 於 2013-3-22 19:38 編輯

a.歡迎對本帖補充、建議、更正
b.測試環境rhel5.4+Ora10.2.0.1.0

c.為節省篇幅,部分輸出結果做了精簡

第01部分 伺服器端OS認證(預設啟用)
01.1 以安裝Oracle的使用者登入OS
[size=9.5pt]不論輸入什麼使用者,只要以
[size=9.5pt]sysdba[size=9.5pt]許可權連線資料庫,都可以連線上,並且連線使用者是[size=9.5pt]sys[size=9.5pt]。
[size=9.5pt]有時候,如果忘記了資料庫的密碼,而又想登入資料庫,可以通過這種方式,前提是在資料庫伺服器上。

SQL> connect / as sysdba

Connected.

SQL> connect sys/aaa  as sysdba

Connected.   

SQL> connect sys/bbb  as sysdba

Connected.

SQL> connect aaa/bbb  as sysdba

Connected.    //[size=9.5pt]哪怕這個使用者如[size=9.5pt]aaa[size=9.5pt]在資料庫中根本不存在

SQL> show user

USER is "SYS"

SQL> alter   user   sys   identified   by   install;

User altered.

SQL> connect sys/install@192.168.188.128:1521/orcl

ERROR:

ORA-28009: connection as SYS should be as SYSDBA or SYSOPER

Warning: You are no longer connected to ORACLE.

SQL> connect sys/install@192.168.188.128:1521/orcl as sysdba

Connected.

SQL> show user

USER is "SYS"



01.2 以非安裝oracle使用者登入OS

# su – oracle

$ sqlplus / as sysdba

SQL> show parameter auth

NAME               TYPE        VALUE

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

os_authent_prefix  string      ops$

remote_os_authent  boolean     FALSE

SQL> create user ops$zcs1 identified by oracle;

User created.

SQL> exit

Disconnected from Oracle Database 10g Enterprise Edition Release 10.2.0.1.0

$exit

# useradd -g oinstall -G dba zcs1

# echo oracle|passwd --stdin zcs1

# su - zcs1

$ export ORACLE_SID=orcl

$ export ORACLE_BASE=/u01/app/oracle

$ export ORACLE_HOME=$ORACLE_BASE/product/10.2.0/db_1

$ export PATH=$ORACLE_HOME/bin:$PATH

$ sqlplus / as sysdba

Connected to:

Oracle Database 10g Enterprise Edition Release 10.2.0.1.0

SQL>



01.3 遮蔽OS認證(以linux為例)

OS 認證有一定安全隱患,可以把相關係統使用者刪除,也可以修改sqlnet.ora檔案。

在刪除密碼檔案後,若想要以管理員身份連入資料庫的話,則必須使用作業系統驗證的方法進行登入。

$ cd $ORACLE_HOME/network/admin;ls sqlnet.ora

ls: sqlnet.ora: No such file or directory

$ echo 'SQLNET.AUTHENTICATION_SERVICES=(NONE)' > sqlnet.ora

$ sqlplus / as sysdba  //提示,需輸入正常的使用者名稱和密碼

ERROR:

ORA-01031: insufficient privileges

Enter user-name:

$cd $ORACLE_HOME/network/admin

$mv sqlnet.ora sqlnet.ora.bak     //重新啟動用OS認證


********************************************************************************************

第02部分 密碼檔案認證

Oracle使用者如果要以特權使用者身份INTERNALSYSDBASYSOPER登入Oracle資料庫可以有兩種身份驗證的方法

1、使用與OS整合的身份驗證

OS認證意思把登入資料庫的使用者和口令校驗放在了OS一級。

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

2、使用Oracle資料庫的password file進行身份驗證

由於僅被授予SYSOPER/SYSDBA系統許可權的使用者才存在於密碼檔案中,由此,向密碼檔案中增加或刪除某一使用者,實際上也就是對某一使用者授予或收回SYSOPER/SYSDBA系統許可權。

3、建立密碼檔案的命令

不管是在建立例項時自動建立的密碼檔案,還是使用手工建立的密碼檔案,都只包含INTERNAL/SYS使用者的資訊;

orapwd file=orapworcl password=oracle force=y

orapwd file=>

password=< sys使用者的密碼>

entries=

force=


02.1 建立密碼檔案
[size=9.5pt]在實際開發中,要把作業系統驗證給取消掉,那以後就會採用密碼驗證了。但是假如我們把密碼忘記了,又如何解決呢:重新生成密碼檔案即可。

一、使用orapwd建立,修改密碼檔案

$ cd $ORACLE_HOME/network/admin

$ mv sqlnet.ora.bak sqlnet.ora

$ strings sqlnet.ora

SQLNET.AUTHENTICATION_SERVICES=(NONE)

$ sqlplus / as sysdba

ERROR:

ORA-01031: insufficient privileges

Enter user-name:

$ cd $ORACLE_HOME/dbs

$ ls orapw*

orapworcl

$ strings orapworcl|grep -i test

TEST

$ orapwd file=orapworcl password=redhat         //重建密碼檔案修改密碼

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

$ orapwd file=orapworcl password=oracle force=y //改密碼

$ strings orapworcl|grep -i test

$ sqlplus sys/oracle as sysdba

Connected to:

Oracle Database 10g Enterprise Edition Release 10.2.0.1.0

二、擴充套件密碼檔案的使用者數量

當向密碼檔案新增的帳號數目超過建立密碼檔案時所定的限制時,為擴充套件密碼檔案的使用者數限制,需重建密碼檔案。

$ orapwd file=orapworcl password=redhat entries=1

$ strings $ORACLE_HOME/dbs/orapworcl

]\[Z

ORACLE Remote Password file

INTERNAL

F7AC0C5E9C3C37AB

E100B964899CDDDF

//8i之前用internal使用者來執行資料庫的啟動和關閉以及create database等操作,為保持使用者習慣在8i中依舊保留了internal使用者和svrmgrl,但已完全可以不使用svrmgrl工具和 internal使用者了。

SQL> begin

  for i in 1..6 loop

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

  end loop;

  end;

  /

PL/SQL procedure successfully completed.

SQL> begin

  for i in 1..6 loop

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

  end loop;

  end;

  /

begin

*

ERROR at line 1:

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

ORA-06512: at line 3

SQL> host strings $ORACLE_HOME/dbs/orapworcl

]\[Z  //再次檢視orapworcl發現多出了行,該二進位制檔案按矩陣計算可存放多少

ORACLE Remote Password file

INTERNAL

F7AC0C5E9C3C37AB

E100B964899CDDDF

3E81B724A296E296

668509DF9DD36B43

9CE6AF1E3F609FFC

7E19965085C9ED47

三、檢視密碼檔案放了多少個sysoper/sysdba使用者

可以通過查詢檢視V$PWFILE_USERS來獲取擁有SYSOPERSYSDBA系統許可權的使用者的資訊表中SYSOPERSYSDBA列的取值TRUEFALSE表示此使用者是否擁有相應的許可權。這些使用者也就是相應地存在於密碼檔案中的成員。

SQL> select * from v$pwfile_users;

USERNAME                       SYSDB SYSOP

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

SYS                            TRUE  TRUE

zcs                            FALSE TRUE

U1                             TRUE  FALSE

U2                             TRUE  FALSE

U3                             TRUE  FALSE



02.2 使用密碼認證
一、建立密碼檔案

$ cd /u01/app/oracle/product/10.2.0/db_1/dbs

$ orapwd file=orapworcl password=redhat force=y

$ strings orapworcl

]\[Z

ORACLE Remote Password file

INTERNAL

AB27B53EDC5FEF41

8A8F025737A9097A

二、開啟密碼檔案認證

cd $ORACLE_HOME/network/admin;   //開啟密碼檔案認證

echo 'SQLNET.AUTHENTICATION_SERVICES=(NONE)' > sqlnet.ora

三、通過授權sysdba密碼檔案中增加scott的資訊

REMOTE_LOGIN_PASSWORDFILE初始化引數檔案中此引數控制著密碼檔案的使用及其狀態 (NONE不使用密碼檔案特權使用者的登入通過OS進行身份驗證)

[size=9.5pt]1[size=9.5pt]、[size=9.5pt]SHARED([size=9.5pt]密碼檔案可多例項使用[size=9.5pt],[size=9.5pt] [size=9.5pt]僅[size=9.5pt]INTERNAL[size=9.5pt]/[size=9.5pt]SYS[size=9.5pt]能特權登陸[size=9.5pt])
shared口令檔案不能被編輯。即不能向shared口令檔案增加使用者。如果要增加使用者或修改sysdbasysoper使用者的密碼需要設定REMOTE_LOGIN_PASSWORDFILE引數為exclusive然後再設定為shared

SQL>alter system set remote_login_passwordfile=shared scope=spfile;

System altered.           //改為shared

SQL>startup force;

ORACLE instance started.  //為了使修改生效,重啟資料庫

SQL>alter user sys identified by system;

ERROR at line 1:          //修改sys使用者的口令

ORA-28046: Password change for SYS disallowed

SQL>grant sysdba to scott;

ERROR at line 1:          //為scott使用者授予sysdba許可權

ORA-01999: password file cannot be updated in SHARED mode

[size=9.5pt]2[size=9.5pt]、[size=9.5pt]EXCLUSIVE([size=9.5pt]只有一個資料庫例項可以使用此密碼檔案[size=9.5pt])

只有在此設定下的密碼檔案可以包含有除INTERNAL/SYS以外的使用者資訊。

SQL>alter system set remote_login_passwordfile=exclusive scope=spfile;

System altered.          //改為exclusive

SQL> show parameter remote_login_passwordfile

remote_login_passwordfile     EXCLUSIVE

SQL>startup force;

ORACLE instance started.  // 為了使引數生效,重啟資料庫

SQL>alter user sys identified by system;

User altered.             // 修改sys使用者的密碼

SQL>grant sysdba to scott;

Grant succeeded.          //為scott使用者授予sysdba許可權

SQL> host strings orapworcl

]\[Z

ORACLE Remote Password file

INTERNAL

AB27B53EDC5FEF41

8A8F025737A9097A

SCOTT

7AA1A84E31ED7771

四、禁用OS認證
$ cd $ORACLE_HOME/network/admin
$ ls sqlnet.ora
ls: sqlnet.ora: No such file or directory
$ echo 'SQLNET.AUTHENTICATION_SERVICES=(NONE)' > sqlnet.ora
$ sqlplus / as sysdba  //提示,需輸入正常的使用者名稱和密碼
ERROR:
ORA-01031: insufficient privileges
Enter user-name:
五、登陸後顯示的賬戶資訊是sys,而非scott

$ sqlplus scott/tiger as sysdba

SQL> show user

USER is "SYS"


******************************************************************************************************************************

第03部分  使用字典認證(非DBA)

只有在資料庫run狀態下普通使用者連線上資料庫時通過儲存在字典表中的使用者口令來進行鑑權認證。

一、建立使用者並授授予SYSDBA許可權

$ sqlplus / as sysdba

Connected to:

Oracle Database 10g Enterprise Edition Release 10.2.0.1.0

SQL> select INSTANCE_NAME,STATUS from v$instance;

INSTANCE_NAME    STATUS

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

orcl             OPEN

SQL> create user ZCS identified by ZCS;

User created.

SQL>select USERNAME,PASSWORD from dba_users where USERNAME='ZCS';

USERNAME                       PASSWORD

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

ZCS                            8C4FBF9DAA31F429

SQL> grant create session to zcs;

Grant succeeded.

二、禁用密碼認證並刪除密碼檔案

SQL> show parameter remote_login_passwordfile

remote_login_passwordfile     EXCLUSIVE(預設)

SQL>alter system set remote_login_passwordfile=NONE scope=spfile;

System altered.              //禁用密碼認證

SQL>startup force;

ORACLE instance started.    //為了使修改生效,重啟資料庫

SQL>host

$cd $ORACLE_HOME/dbs/

$mv orapworcl orapworcl.bak

三、禁用OS認證(使用者和密碼完成正確才能登入)

客戶端網路配置檔案sqlnet.ora中的引數用來決定是採用OS層面的鑑權認證還是密碼檔案的鑑權認證。

$ cd $ORACLE_HOME/network/admin;ls sqlnet.ora

ls: sqlnet.ora: No such file or directory

$ echo 'SQLNET.AUTHENTICATION_SERVICES=(NONE)' > sqlnet.ora

四、使用資料字典認證登陸

$exit

exit

SQL> conn zcs/zcs

Connected.//預設可以使用OS認證



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

相關文章