【登陸認證】oracle的作業系統認證和口令檔案認證方式(轉載)
關於oracle的作業系統認證方式和口令檔案認證方式一直苦惱了很久,偶然在網上找到一篇文章,記錄一下,稍後再做幾個實驗驗證一下。
本文來源
oracle認證方式分為作業系統認證和口令檔案認證2種方式,作業系統認證有時候也叫本地認證。這2種認證我是這麼理解的:
--作業系統認證:
即oracle認為作業系統使用者是可靠的,即既然能登陸到作業系統那麼oracle資料庫你也能登陸
--口令檔案認證:
oracle認證認為作業系統使用者是不可信任的,如果要訪問資料庫,必須進行再次認證。
具體實現如下:
--作業系統認證:
配置sqlnet.ora檔案中的引數:SQLNET.AUTHENTICATION_SERVICES=(NTS)
spfile(pfile)檔案引數: REMOTE_LOGIN_PASSWORDFILE=('NONE')
--口令檔案認證:
配置sqlnet.ora檔案中的引數:SQLNET.AUTHENTICATION_SERVICES=(NONE)
spfile(pfile)檔案引數: REMOTE_LOGIN_PASSWORDFILE=('EXCLUSIVE')或('SHARED')
這個時候需要配置口令檔案PWDorcl.ora。(orcl為資料庫SID)
select * from v$pwfile_users;
一、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檔案中的引數 SQLNET.AUTHENTICATION_SERVICES,PFILE(或SPFILE)檔案中的引數 REMOTE_LOGIN_PASSWORDFILE和口令檔案PWDsid.ora三者協同作用實現身份認證。
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使用者下所能執行的操作
NONE
Oracle ignores any password file. Therefore, privileged users must be authenticated by the operating system.
SHARED
More than one database can use a password file. However, the only user recognized by the password file is SYS.
EXCLUSIVE
The password file can be used by only one database and the password file can contain names other than SYS
==============================================================================================
ORACLE資料庫透過sqlnet.ora檔案中的引數sqlnet.authentication_services,引數檔案中的remote_login_passwordfile和口令檔案pwdsid.ora三者協同作用實現身份認證.
Sqlnet.authentication_services=(NTS)|(NONE)
NTS:作業系統認證方式,不使用口令檔案;
NONE:口令檔案認證方式
Remote_login_passwordfile=(NONE)|(EXCLUSIVE)|(SHARED)
NONE:不使用口令檔案,作業系統認證;
EXCLUSIVE:口令檔案認證方式,但只有一個資料庫例項可以使用此檔案;
SHARED:口令檔案認證方式,可以有多個資料庫例項可以使用此檔案,但此設定下只有SYS帳號能被識別,即使檔案中存在其他使用者的資訊,也不允許他們以SYSOPER/SYSDBA登入.
(1).sqlnet.authentication_services=(NTS)
同時Remote_login_passwordfile=(NONE),此時為作業系統認證方式.
當以oracle_dba組下的使用者登入進入本地的作業系統後,進行以下操作:
sqlplus /nolog
SQL>conn /assysdba
可以以sysdba身份登入成功,進行資料庫方面的操作.
當以遠端進行登入時,執行:
sqlplus /nolog
SQL>conn /assysdba
則會顯示:
ERROR:ORA-01031:insufficient privileges
即不允許以sysdba身份遠端登入系統,這也是OS認證這所以稱為本地認證方式的原因.
(2).Sqlnet.authentication_services=(NONE),同時
Remote_login_passwordfile=(EXCLUSIVE)|(SHARED),配合口令檔案PWDsid.ora,此時為口令檔案認證方式:
當在本地以oracle_dba組下的使用者登入進入系統時,進行以下操作:
sqlplus /nolog
SQL>conn /assysdba
則會顯示:
ERROR:ORA-01031:insufficient privileges
在本地或遠端進行下邊的操作:
sqlplus /nolog
SQL>conn sys/密碼@服務名assysdba
可以進入系統,也就是說口令檔案認證方式允許使用者從本地或遠端以sysdba身份登入,但必須提供口令字.
(3).Sqlnet.authentication_services=(NTS),同時
Remote_login_passwordfile=(EXCLUSIVE)|(SHARED),配合口令檔案PWDsid.ora,此時為作業系統認證和口令檔案認證同時起作用:
當在本地以oracle_dba組下的使用者登入進入作業系統後,進行下邊的操作:
sqlplus /nolog
SQL>conn /assysdba
可以進入系統.即作業系統認證方式登入成功.
當在遠端執行:
sqlplus /nolog
SQL>conn sys/密碼@服務名assysdba
同時可正常登入到資料庫系統,即口令檔案認證方式登入成功.
附:
要知道以下幾種登陸方式不是一種概念
sqlplus /nolog
1: conn /assysdba 本機登陸,使用作業系統認證,有無監聽都可以
2: conn sys/password assysdba 本機登陸,使用密碼檔案認證,有無監聽都可以
3: conn assysdba 可以本機可以遠端,使用密碼檔案認證,必須有監聽,必須有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認證。
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
************************************************************************
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
下面是Eygle老師的一篇文章,相關,一起記錄一下。
文章來源:
Oracle中password file的作用及說明
作者: Eygle
在資料庫沒有啟動之前,資料庫內建使用者是無法透過資料庫來驗證身份的
口令檔案中存放sysdba/sysoper使用者的使用者名稱及口令
允許使用者透過口令檔案驗證,在資料庫未啟動之前登陸
從而啟動資料庫
如果沒有口令檔案,在資料庫未啟動之前就只能透過作業系統認證.
使用Rman,很多時候需要在nomount,mount等狀態對資料庫進行處理
所以通常要求sysdba許可權如果屬於本地DBA組,可以透過作業系統認證登陸
如果是遠端sysdba登陸,需要透過passwordfile認證.
1.remote_login_passwordfile = NONE
此時停用口令檔案驗證,Oracle資料庫不允許遠端SYSDBA/SYSOPER身份登入
無法透過遠端進行資料庫起停等操作管理
local:
[oracle@jumper oracle]$ sqlplus "/ as sysdba"
SQL*Plus: Release 9.2.0.3.0 - Production on Thu Apr 15 09:58:45 2004
Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
Connected to:
Oracle9i Enterprise Edition Release 9.2.0.3.0 - Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.3.0 - Production
SQL> alter user sys identified by oracle;
User altered.
SQL> show parameter pass
NAME TYPE VALUE
--------------------- ----------- ------------------------------
remote_login_passwordfile string NONE
remote:
E:\Oracle\ora92\bin>sqlplus /nolog
SQL*Plus: Release 9.2.0.4.0 -
Production on 星期四 4月 15 09:39:22 2004
Copyright (c) 1982, 2002, Oracle
Corporation. All rights reserved.
SQL> connect as
sysdba
ERROR:
ORA-01017: invalid username/password; logon denied
此處實際上是無法透過口令檔案驗證
2.remote_login_passwordfile = exclusive
SQL> alter system set remote_login_passwordfile=exclusive scope=spfile;
System altered.
SQL> startup force;
ORACLE instance started.
Total System Global Area 131142648 bytes
Fixed Size 451576 bytes
Variable Size 104857600 bytes
Database Buffers 25165824 bytes
Redo Buffers 667648 bytes
Database mounted.
Database opened.
SQL> show parameter pass
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
remote_login_passwordfile string EXCLUSIVE
SQL> alter user sys identified by oracle;
User altered.
remote:
E:\Oracle\ora92\bin>sqlplus /nolog
SQL*Plus: Release 9.2.0.4.0 -
Production on 星期四 4月 15 09:47:11 2004
Copyright (c) 1982, 2002, Oracle
Corporation. All rights reserved.
SQL> connect as
sysdba
已連線。
SQL> show user
USER 為"SYS"
SQL>
這實際上就是透過口令檔案驗證登入的
3.進一步測試
如果此時我們刪除passwdfile,sysdba/sysoper將無法認證,也就無法登陸資料庫
Server:
SQL> !
[oracle@jumper oracle]$ cd $ORACLE_HOME/dbs
[oracle@jumper dbs]$ ls orapwhsjf
orapwhsjf
[oracle@jumper dbs]$ mv orapwhsjf orapwhsjf.bak
[oracle@jumper dbs]$
Remote:
E:\Oracle\ora92\bin>sqlplus /nolog
SQL*Plus: Release 9.2.0.4.0 - Production on 星期四 4月 15 09:50:14 2004
Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
SQL> connect as sysdba
ERROR:
ORA-01031: insufficient privileges
SQL>
這實際上就是無法透過口令檔案驗證身份
4.如果丟失了passwdfile
如果使用passwdfile卻意外丟失,此時將不能啟動資料庫
SQL> startup force;
ORACLE instance started.
Total System Global Area 131142648 bytes
Fixed Size 451576 bytes
Variable Size 104857600 bytes
Database Buffers 25165824 bytes
Redo Buffers 667648 bytes
ORA-01990: error opening password file '/opt/oracle/product/9.2.0/dbs/orapw'
ORA-27037: unable to obtain file status
Linux Error: 2: No such file or directory
Additional information: 3
此時可以透過orapwd重建口令檔案來解決
此處我們恢復口令檔案既可
SQL> !
[oracle@jumper oracle]$ mv $ORACLE_HOME/dbs/orapwhsjf.bak orapwhsjf
[oracle@jumper oracle]$ exit
exit
SQL> alter database open;
Database altered.
SQL>
大致就是如此.
5. remote_login_passwordfile = shared
我們看一下Oracle9i文件中的說明:
SHARED
More than one database can use a password file. However, the only user recognized by the password file is SYS.
意思是說多個資料庫可以共享一個口令檔案,但是隻可以識別一個使用者:SYS
SQL> select * from v$pwfile_users;
USERNAME SYSDB SYSOP
------------------------------ ----- -----
SYS TRUE TRUE
SQL> grant sysdba to eygle;
grant sysdba to eygle
*
ERROR at line 1:
ORA-01994: GRANT failed: cannot add users to public password file
SQL> show parameter password
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
remote_login_passwordfile string SHARED
我們看到,此時的口令檔案中是不能新增使用者的.
很多人的疑問在於:口令檔案的預設名稱是orapw<sid>,怎麼能夠共享?
實際上是這樣的: Oracle資料庫在啟動時,首先查詢的是orapw<sid>的口令檔案,如果該檔案不存在,則開始查詢,orapw的口令檔案
如果口令檔案命名為orapw,多個資料庫就可以共享.
我們看一下測試:
[oracle@jumper dbs]$ sqlplus "/ as sysdba"
SQL*Plus: Release 9.2.0.3.0 - Production on Tue Jul 6 09:40:34 2004
Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
Connected to:
Oracle9i Enterprise Edition Release 9.2.0.3.0 - Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.3.0 - Production
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> !
[oracle@jumper dbs]$ ls
hsjf initdw.ora inithsjf.ora init.ora lkHSJF orapwhsjf spfilehsjf.ora
[oracle@jumper dbs]$ mv orapwhsjf orapwhsjf.bak
[oracle@jumper dbs]$ exit
exit
SQL> startup
ORACLE instance started.
Total System Global Area 235999908 bytes
Fixed Size 451236 bytes
Variable Size 201326592 bytes
Database Buffers 33554432 bytes
Redo Buffers 667648 bytes
ORA-01990: error opening password file '/opt/oracle/product/9.2.0/dbs/orapw'--這是最後查詢的檔案
ORA-27037: unable to obtain file status
Linux Error: 2: No such file or directory
Additional information: 3
我們建立orapw口令檔案,這時候可以開啟資料庫.
SQL> !
[oracle@jumper dbs]$ ls
hsjf initdw.ora inithsjf.ora init.ora lkHSJF orapwhsjf.bak spfilehsjf.ora
[oracle@jumper dbs]$ cp orapwhsjf.bak orapw
[oracle@jumper dbs]$ exit
exit
SQL> alter database open;
Database altered.
SQL> show parameter passw
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
remote_login_passwordfile string SHARED
SQL>
那麼你可能會有這樣的疑問,多個Exclusive的資料庫是否可以共享一個口令檔案(orapw)呢?
我們繼續這個實驗:
SQL> show parameter password
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
remote_login_passwordfile string SHARED
[oracle@jumper dbs]$ strings orapw
]\[Z
ORACLE Remote Password file
INTERNAL
AB27B53EDC5FEF41
8A8F025737A9097A
注意這裡僅記錄著INTERNAL/SYS的口令
REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE 時
SQL> alter system set remote_login_passwordfile=exclusive scope=spfile;
System altered.
SQL> startup force;
ORACLE instance started.
Total System Global Area 235999908 bytes
Fixed Size 451236 bytes
Variable Size 201326592 bytes
Database Buffers 33554432 bytes
Redo Buffers 667648 bytes
Database mounted.
Database opened.
SQL> !
[oracle@jumper bin]$ cd $ORACLE_HOME/dbs
[oracle@jumper dbs]$ strings orapw
]\[Z
ORACLE Remote Password file
HSJF
INTERNAL
AB27B53EDC5FEF41
8A8F025737A9097A
[oracle@jumper dbs]$ exit
exit
注意這裡,以EXCLUSIVE 方式啟動以後,例項名稱資訊被寫入口令檔案.
此時如果有其他例項以Exclusive模式啟動仍然可以使用這個口令檔案,口令檔案中的例項名稱同時被改寫.
也就是說,資料庫只在啟動過程中才讀取口令檔案,資料庫執行過程中並不鎖定該檔案,類似於pfile/spfile檔案.
SQL> select * from v$pwfile_users;
USERNAME SYSDB SYSOP
------------------------------ ----- -----
SYS TRUE TRUE
SQL> grant sysdba to eygle;
Grant succeeded.
SQL> select * from v$pwfile_users;
USERNAME SYSDB SYSOP
------------------------------ ----- -----
SYS TRUE TRUE
EYGLE TRUE FALSE
SQL> !
[oracle@jumper bin]$ cd $ORACLE_HOME/dbs
[oracle@jumper dbs]$ strings orapw
]\[Z
ORACLE Remote Password file
HSJF
INTERNAL
AB27B53EDC5FEF41
8A8F025737A9097A
>EYGLE
B726E09FE21F8E83
注意此時可以增加SYSDBA使用者,並且這些資訊可以被寫入到口令檔案.
一旦口令檔案中增加了其他SYSDBA使用者,此檔案不再能夠被其他Exclusive的例項共享.
實際上,口令檔案對於其他使用者來說就是啟到了一個 sudo 的作用.
6.重建口令檔案
如果口令檔案丟失,可以使用orapwd可以重建口令檔案,語法如下:
[oracle@jumper oracle]$ orapwd
Usage: orapwd file=<fname> password=<password> entries=<users>
where
file - name of password file (mand),
password - password for SYS (mand),
entries - maximum number of distinct DBA and OPERs (opt),
There are no spaces around the equal-to (=) character.
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/14710393/viewspace-2131128/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 作業系統認證與ORACLE密碼檔案認證方式作業系統Oracle密碼
- Oracle中兩種認證方式:OS認證與口令檔案認證Oracle
- 關於os認證和口令檔案認證(轉)
- oracle登陸認證方式Oracle
- oracle os認證和口令檔案認證的簡要解析Oracle
- 關於os認證和口令檔案認證
- Oracle OS認證與口令檔案認證詳解Oracle
- Oracle OS 認證, 口令檔案Oracle
- oracle兩種登陸認證方式Oracle
- os認證和口令檔案!
- os認證、口令檔案認證及兩個引數【轉】
- Oracle 作業系統認證Oracle作業系統
- Oracle作業系統認證Oracle作業系統
- 自己整理的oracle登陸的認證方式。Oracle
- 關於ORACLE作業系統認證和ORAPWD密碼檔案認證SYSDBA許可權Oracle作業系統密碼
- ASM認證與口令檔案ASM
- 關於ORACLE登陸認證Oracle
- 不同作業系統上遮蔽oracle的作業系統認證方式作業系統Oracle
- 在windows透過作業系統認證登入ORACLEWindows作業系統Oracle
- 在windows通過作業系統認證登入ORACLEWindows作業系統Oracle
- 認證系統之登入認證系統的進階使用 (二)
- 今天安裝的資料庫出現作業系統認證可以透過,口令檔案認證不能透過的情況.資料庫作業系統
- 登陸認證框架:SpringSecurity框架SpringGse
- Oracle中的鑑權口令認證Oracle
- os認證以及口令檔案的(引用warehouse的)
- OS認證以及口令檔案的一點總結(轉)
- 通通透透分析Oracle的登陸認證方式(10g)Oracle
- 【ORACLE】oracle 使用者(sysdba)遠端登入和口令認證Oracle
- Oracle 認證下載Oracle
- Oracle OS認證、口令檔案、密碼丟失處理Oracle密碼
- 1.6.4.2. 準備作業系統認證作業系統
- 禁用作業系統認證作業系統
- SQLNET.AUTHENTICATION_SERVICES和作業系統認證SQL作業系統
- 作業系統身份驗證和口令檔案身份驗證總結作業系統
- 【認證與授權】2、基於session的認證方式Session
- 淺談oracle 使用者(sysdba)遠端登入和口令認證Oracle
- DRF內建認證元件之自定義認證系統元件
- 以sysdba角色登陸oracle的兩種認證方式測試備記Oracle