oracle登陸認證方式
轉自: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登陸認證方式