我有兩臺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用戶下所能執行的操作。