關於oracle的使用者認證

2021-04-13 22:12:04 字數 3596 閱讀 7936

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

mongodb的使用者認證

mongodb預設是不認證的,預設沒有賬號,只要能連線上服務就可以對資料庫進行各種操作,mongodb認為安全最好的方法就是在乙個可信的環境中執行它,保證之後可信的機器才能訪問它,可能這些對一些要求高的環境,安全還不夠 mongodb提供使用者認證,需要在啟動時加上 auth開啟認證 認證前需要新增...

ngnix的使用者認證

有時我們會有這麼一種需求,就是你的 並不想提供乙個公共的訪問或者某些頁面不 希望公開,我們希望的是某些特定的客戶端可以訪問。那麼我們可以在訪問時要求進行身份認證,就如給你自己的家門加一把鎖,以拒絕那些不速之客 為了達到這個目的,我們去tengine的官網檢視文件 我開啟之後看見配置範例如下,以後不管...

apache的使用者認證

documentroot data wwwroot www.123.com servername www.123.com 使用者認證 指定認證的目錄 allowoverride authconfig 這個相當於開啟認證的開關 authname 123.com user auth 自定義認證的名字,作...