關於oracle的用戶認證

我有兩臺windows2003 系統的口令和賬戶都是一模一樣,竟然oracle的enterprise manager console只要以

sysdba就可以登錄到另外一臺oracle的機器上,不管輸入賬戶和密碼是什麼都行(如賬戶sdff,密碼sdffa);顯

然,oracle當作了操作系統本地認證了而我第三臺是xp就不能這樣做(不在一個網段且系統帳戶口令不一樣),

但是可以用sys賬戶以sysdba登錄,這可能用到的就是遠程登錄了。

前言

發現有很多人提問數據庫身份認證方面的問題,基此就oracle的身份認證做個簡要解析,希望這篇文檔對遇到類似

問題的朋友有所裨益。

文中錯誤之處請大家指正,不足之處請大家補充!

環境

windows2000+sp4,oracle9.201

oracle軟件以oracle帳戶安裝

一、sysdba的權限

sysdba(sysoper和normal)是登錄數據庫的身份,與角色(dba、resource)、對象權限及系統權限有所區別,

登錄身份表明了可對數據庫的整體進行哪些操作,sysdba有些類似unix下的root帳戶。

sysdba的權限或可對數據庫進行的操作:

startup,shutdown

alter database open|mount

alter database backup controlfile

alter tablespace begin/end backup

recover database

alter database archivelog,restricted session

create database

recover database until

二、os認證和口令文件認證

1、os認證和口令文件認證其實質是對oracle數據庫採取何種管理方式,是本地管理還是通過一臺管理服務器統一

管理。 本地管理採用的就是os認證方式,統一管理採用的就是口令文件認證方式

2、兩種認證的實現

oracle數據庫通過

sqlnet.ora(oracle目錄/oracle92/network/admin)文件中的參數 SQLNET.AUTHENTICATION_SERVICES,

PFILE(或SPFILE)文件(oracle目錄/oracle92/database)中的參數 REMOTE_LOGIN_PASSWORDFILE

和口令文件PWDsid.ora(oracle目錄/oracle92/database)三者協同作用實現身份認證。

SQLNET.AUTHENTICATION_SERVICES=(NTS)|(NONE)

SQLNET.AUTHENTICATION_SERVICES=(NTS): 操作系統認證方式,不使用口令文件

SQLNET.AUTHENTICATION_SERVICES=(NONE):口令文件認證方式

REMOTE_LOGIN_PASSWORDFILE=(NONE)|(EXCLUSIVE)|(SHARED)

REMOTE_LOGIN_PASSWORDFILE=(NONE):不使用口令文件,操作系統認證

REMOTE_LOGIN_PASSWORDFILE=(EXCLUSIVE):口令文件認證方式,

但只有一個數據庫實例可以使用此文件,

系統允許將SYSOPER/SYSDBA授予除INTERNAL/SYS以外的其他用戶,

且以具有這類身份的其他用戶登錄是有效的

REMOTE_LOGIN_PASSWORDFILE=(SHARED):口令文件認證方式,可有多個數據庫實例使用此文件,

但是此設置下 只有INTERNAL/SYS帳號能被識別,即使文件中存有其他用戶的信息,

也不允許他們以SYSOPER/SYSDBA登錄

1)SQLNET.AUTHENTICATION_SERVICES=(NTS)

同時REMOTE_LOGIN_PASSWORDFILE=(NONE),此時爲操作系統認證方式。

當以oracle_dba組下的用戶登錄進入本地windows2000後進行下邊的操作:

sqlplus /nolog

sql>conn /as sysdba

sqlplus /nolog

sql>conn 任意用戶名/密碼 as sysdba

均可以sysdba身份登錄成功,進行數據庫方面的操作

當以遠程進行登錄時,執行

sqlplus /nolog

sql>conn /as sysdba

sqlplus /nolog

sql>conn sys/密碼 as sysdba

均顯示

“ERROR:

ORA-01031: insufficient privileges

也就是不允許以sysdba身份遠程登錄系統,這也是os認證之所以也稱爲本地認證方式的原因

 

2)SQLNET.AUTHENTICATION_SERVICES=(NONE)

同時REMOTE_LOGIN_PASSWORDFILE=(EXCLUSIVE)或(SHARED),

配合口令文件 PWDsid.ora,此時爲口令文件認證方式

當在本地以oracle_dba組下的用戶登錄進入windows2000後進行下邊的操作:

sqlplus /nolog

sql>conn /as sysdba

顯示

“ERROR:

ORA-01031: insufficient privileges

實質上是要求提供擁有sysdba身份的用戶名和密碼

在本地或遠程進行下邊的操作

sqlplus "sys/密碼@服務名 as sysdba"

可進入系統

也就是說口令文件認證方式允許用戶從本地或遠程以sysdba身份登錄,但必須提供口令字

3)SQLNET.AUTHENTICATION_SERVICES=(NTS)

同時REMOTE_LOGIN_PASSWORDFILE=(EXCLUSIVE)或(SHARED),

配合口令文件PWDsid.ora,此時操作系統認證和口令文件認證同時起作用

當在本地以oracle_dba組下的用戶登錄進入windows2000後進行下邊的操作:

sqlplus /nolog

sql>conn /as sysdba

可進入系統

當在遠程執行

sqlplus "sys/密碼@服務名 as sysdba"

同樣可正常登錄到數據庫系統上

上邊的參數配置容易令人迷惑、混淆,造成假象。

三、其他

從前邊的討論可以知道,我們能夠對sys以外的用戶賦予sysdba身份,具體方法就是

SQLNET.AUTHENTICATION_SERVICES=(NONE)

REMOTE_LOGIN_PASSWORDFILE=(EXCLUSIVE)

口令文件PWDsid.ora

SQL>grant sysdba to 用戶名

這樣,其他具有sysdba身份的用戶就加入到PWDsid.ora中,並可以被PWDsid.ora識別,

我們可以用這個被賦予sysdba身份的用戶登錄並進行類似sys用戶下所能執行的操作。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章