1. 程式人生 > >oracle登陸認證方式

oracle登陸認證方式

customer exc 拒絕 tnsnames art 例如 err med windows服務

轉自:http://blog.itpub.net/14359/viewspace-683064/

案例:

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= (NONE,NTS)是二者共存。

經過測試,以上規則只適用於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)

或者你可以重建口令文件來改密碼,只不過原來授予sysdba和sysoper權限的用戶,就不再具有這2個權限了。

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

Oracle在常見的多用戶操作系統上都可以進行OS認證方式來登錄。例如SOLARIS,WINDOWS等等。下面以常見的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認證。

oracle登陸認證方式