我有兩台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 自定義認證的名字,作...