oracle登陸認證方式

landf發表於2010-12-31

案例:

1,發現此時作業系統認證不成功:

C:\Users\Administrator.WIN-20100719IOX>sqlplus / as sysdba

SQL*Plus: Release 10.2.0.1.0 - Production on 星期五 12 31 14:25:52 2010

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

ERROR:

ORA-01031: insufficient privileges

請輸入使用者名稱:

ERROR:

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

請輸入使用者名稱:

ERROR:

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

SP2-0157: 3 次嘗試之後無法連線到 ORACLE, 退出 SQL*Plus

 

2,   檢視sqlnet.ora 檔案內容:

# sqlnet.ora Network Configuration File: C:\app\Administrator\product

\11.2.0\dbhome_1\network\admin\sqlnet.ora

# Generated by Oracle configuration tools.

# This file is actually generated by netca. But if customers choose to

# install "Software Only", this file wont exist and without the native

# authentication, they will not be able to connect to the database on NT.

SQLNET.AUTHENTICATION_SERVICES= (NTS)

NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)

 

3檢查compmgmt.msc, 在命令列下敲入進入計算機管理,選擇本地使用者和組—>組,發現一個組的名字叫做ORA_DBA,未把administrator使用者加入該組

 

4,把administrator使用者新增到該組後,此時可用作業系統認證登入Oracle資料庫:

C:\Users\Administrator.WIN-20100719IOX>sqlplus / as sysdba

SQL*Plus: Release 10.2.0.1.0 - Production on 星期五 12 31 14:30:50 2010

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

連線到:

Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production

With the Partitioning, OLAP and Data Mining options

SQL>

 

現象:

 

C:\>sqlplus "/as sysdba"

SQL*Plus:Release 10.2.0.1.0 - Production on Fri Nov 2 16:16:22 2007

Copyright (c) 1982, 2005, Oracle. All right reserved.

ERROR:

ORA-01031: insufficient privileges

Enter user-name:

 

這個錯誤一般是由於Oracle登入認證出現了問題:

Oracle登入認證有兩種方式,基於作業系統的登入認證,基於Oracle密碼檔案的驗證。

可以通過改變sqlnet.ora檔案,可以修改Oracle登入認證方式:

SQLNET.AUTHENTICATION_SERVICES= (NTS)是基於作業系統驗證;

SQLNET.AUTHENTICATION_SERVICES= (NONE)是基於Oracle密碼檔案驗證;

SQLNET.AUTHENTICATION_SERVICES= (NONENTS)是二者共存。

 

經過測試,以上規則只適用於WINDOWS伺服器,在LINUX下規則如下:

預設情況下LINUX下的Oracle資料庫sqlnet.ora檔案沒有SQLNET.AUTHENTICATION_SERVICES引數,此時是基於作業系統認證和Oracle密碼檔案驗證共存的,加上SQLNET.AUTHENTICATION_SERVICES引數後,不管SQLNET.AUTHENTICATION_SERVICES設定為NONE或者NTS,都是基於Oracle密碼驗證的。

 

Windows下設定Oracle登入驗證為作業系統驗證方式的方法:

1:把os使用者加到ora_dba

2:設定sqlnet.ora SQLNET.AUTHENTICATION_SERVICES = (NTS)

或者你可以重建口令檔案來改密碼,只不過原來授予sysdbasysoper許可權的使用者,就不再具有這2個許可權了。

 

 

有一種Oracle的登入方式是作業系統驗證登入方式,即常說的OS驗證登入方式,在SQL server中也有這種方式。當用Windows的管理員帳戶登陸系統後登陸資料庫,只要加上 as sysdba,不管用什麼使用者名稱和密碼登陸,都正確,因為這時系統已經忽略了/ 兩邊的使用者名稱和密碼,預設就是sys使用者。有些朋友經常使用connect / as sysdba登入,但不知道為什麼沒有提供使用者名稱和密碼就得到了sysdba的許可權。還認為這樣是不是不安全呢?

 

Oracle在常見的多使用者作業系統上都可以進行OS認證方式來登入。例如SOLARISWINDOWS等等。下面以常見的WINDOWS作業系統來說明看一下這個作業系統認證方式登入的原理。如果你的機器可以使用connect / as sysdba獲取sysdba的許可權,那麼下面的每一個過程你的機器上都會得到驗證,如果不能,按照下面的操作更改後,你也能以這種方式登入。在命令列下敲入compmgmt.msc進入計算機管理,選擇本地使用者和組—>組,看是不是有一個組的名字叫做ORA_DBA,雙擊改組可以看到裡面是不是有administrator使用者,想一想你是不是以administrator使用者登入的呢?再進入Oracle安裝目錄(即$ORACLE_HOME),找到sqlnet.ora檔案看看裡面的是不是有SQLNET.AUTHENTICATION_SERVICES= (NTS), 如果這些都對的話,你就能以作業系統認證的方式(connect / as sysdba)來登入Oracle。

 

接下來的問題是,如果你的資料很重要,出於安全考慮,希望禁止這種作業系統認證的方式。那麼該怎麼做呢?很簡單,找到在剛才的第6步驟中的sqlnet.ora檔案,將SQLNET.AUTHENTICATION_SERVICES= (NTS)改為SQLNET.AUTHENTICATION_SERVICES=(NONE)即可。你再試一下看看會不會得到到如下結果:

ERROR:

ORA-01031: insufficient privileges

警告: 您不再連線到 ORACLE

 

如果你的機器不能以系統認證的方式登入,檢查以上幾個步驟,你總可以找到原因的。

 

附:

要知道以下幾種登陸方式不是一種概念

sqlplus /nolog

1:  conn / as sysdba                    本機登陸,使用作業系統認證,有無監聽都可以

2:  conn sys/password as sysdba   本機登陸,使用密碼檔案或作業系統認證,有無監聽都可以

3:  conn sys/password@dbanote as sysdba  可以本機可以遠端,使用密碼檔案認證,必須有監聽,必須有tnsnames.ora,remote_login_passwordfile必須是EXCLUSIVE

 

 

 

說明:

從Oracle的解釋可以知道,SQLNET.AUTHENTICATION_SERVICES=(NTS)WINDOWS系統專用的,對LINUX/UNIX是不適用的。

 

最後做一個簡單的總結:

1、在WINDOWS下,SQLNET.AUTHENTICATION_SERVICES必須設定為NTS或者ALL才能使用OS認證;不設定或者設定為其他任何值都不能使用OS認證。

2、在LINUX下,在SQLNET.AUTHENTICATION_SERVICES的值設定為ALL,或者不設定的情況下,OS驗證才能成功;設定為其他任何值都不能使用OS認證。

 

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

相關文章