Oracle OS認證與口令檔案認證詳解
概述:本文只討論OS認證和口令檔案認證方式的配置方法,如何配置以及使用OS認證和口令檔案認證方式驗證SYSDBA/SYSOPER許可權。
實驗環境: Oracle 11.2.0.1 + RHEL 5.4
特殊許可權與Oracle登陸認證管理
在開始學Oracle的時候有件事一直讓我感覺很奇怪,就是為什麼在資料沒有起來的時候只要登入到安裝Oracle的作業系統中直接用sqlplus / as sysdba就能登陸到資料庫中然後對資料庫進行啟動停止之類的操作。後來看到關於Oracle口令檔案相關資料的時候才豁然開朗:資料庫認證資訊並不一定存在資料庫中的,這點和SQL Server很是不一樣。
在Oracle中有兩類特殊的許可權SYSDBA和SYSOPER,當DBA需要對資料庫進行維護管理操作的時候必須具有這兩類特殊許可權之中的一種。在資料庫沒有開啟的時候,使用資料庫內建的賬號是無法登陸資料庫的,但是擁有SYSDBA或是SYSOPER許可權的使用者是可以登陸的。認證使用者是否擁有兩類特殊許可權的方法有兩種:OS認證和口令檔案認證。
OS認證和口令檔案認證方法
Oracle資料庫究竟使用OS認證還是口令檔案認證來進行管理取決於下面三個因素:
- SQLNET.ORA引數檔案中的引數SQLNET.AUTHENTICATION_SERVICES設定
- PFILE(SPFILE)引數檔案中的引數REMOTE_LOGIN_PASSWORDFILE設定
- 口令檔案orapw$SID(Linux) | PWD$SID.ora(Windows)
Oracle許可權認證的基本順序是這樣的,先由SQLNET.AUTHENTICATION_SERVICES的設定值來決定是使用OS認證還是口令檔案認證,如果使用口令檔案認證的話就要看後面兩個條件了:如果REMOTE_LOGIN_PASSWORDFILE引數設定為非NONE而且口令檔案存在的話就能正常使用口令檔案認證,否則將會失敗。
SQLNET.AUTHENTICATION_SERVICES引數
在SQLNET.ORA(位於$ORACLE_HOME/NETWORK/ADMIN目錄中)檔案中,需要修改時直接用文字編輯器開啟修改就行了,對於不同的作業系統SQLNET.AUTHENTICATION_SERVICES的取值會有些不一樣,通常我們會用到下面的一些設定值:
- SQLNET.AUTHENTICATION_SERVICES = (ALL)
對Linux系統,支援OS認證和口令檔案認證。
對Windows系統,實際實驗是不支援此引數,驗證失敗。
- SQLNET.AUTHENTICATION_SERVICES = (NTS)
此設定值僅用於Windows NT系統,此設定同時支援OS認證和口令檔案認證,只有在設定了(NTS)值之後執行在Windows系統上的Oracle才支援OS認證。
- SQLNET.AUTHENTICATION_SERVICES = (NONE)
此設定值在Windows和Linux是作用一樣的,指定Oracle只使用口令檔案認證。
- 不設定此引數或SQLNET.AUTHENTICATION_SERVICES =
對Linux系統,預設支援OS認證和口令檔案認證。
對Windows系統,預設只支援口令檔案認證,不支援OS認證。
OS認證實現
Oracle使用作業系統中的兩個使用者組來控制OS認證,在不同的作業系統中這兩個使用者組的名稱是不一樣的,一般來說他們是OSDBA 和 OSOPER,這兩個使用者組都是在Oracle安裝的時候建立的。下面列出不同系統中這兩個使用者組的名字:
Operating System Group | UNIX User Group | UNIX User Group |
---|---|---|
OSDBA | dba | ORA_DBA |
OSOPER | oper | ORA_OPER |
OSDBA使用者組的使用者可以使用SYSDBA許可權登陸資料庫,OSOPER使用者組的的使用者可以使用SYSOPER許可權來登陸資料庫。使用sqlplus可以用下面方法登陸
CONNECT / AS SYSOPER
擁有OS許可權的使用者登陸資料庫時不再需要輸入使用者名稱和密碼,因此使用下面的命令也是可以正常登陸的:
CONNECT ANY_USER_NAME/ANY_PASSWORD AS SYSOPER
因此要建立一個新的OS認證帳號步驟是:
- 建立一個OS使用者
- 將使用者加入到OSDBA或是OSOPER使用者組
- 用新增加的使用者登陸系統,然後輸入sqlplus / AS SYSDBA進行登陸
REMOTE_LOGIN_PASSWORDFILE引數
REMOTE_LOGIN_PASSWORDFILE系統引數的設定制定了資料庫使用口令檔案的方法,此引數可以設定的值有三個:
- REMOTE_LOGIN_PASSWORDFILE = NONE
不使用口令檔案
- REMOTE_LOGIN_PASSWORDFILE = EXCLUSIVE
使用口令檔案,但只有一個資料庫例項可用使用
- REMOTE_LOGIN_PASSWORDFILE = SHARED
多個資料庫例項共用一個口令檔案,這種設定下是不能增加其他資料庫使用者作為特殊許可權使用者到口令檔案中的。
REMOTE_LOGIN_PASSWORDFILE引數屬於初始化引數,只能在init.ora/pfile中指定或是在資料庫開啟狀態下使用下面語句修改,然後重新啟動資料庫。
要檢查當前REMOTE_LOGIN_PASSWORDFILE的設定值在登陸Oracle後輸入下面的命令
/** 這是輸出結果,看remote_login_passwordfile一行
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
remote_archive_enable string true
remote_dependencies_mode string TIMESTAMP
remote_listener string
remote_login_passwordfile string EXCLUSIVE
remote_os_authent boolean FALSE
remote_os_roles boolean FALSE
SQL>
*/
口令檔案和口令檔案認證
口令檔案存放著被授予SYSDBA或SYSOPER許可權的使用者的使用者名稱和密碼。它是一個加密的檔案,使用者不能修改這個檔案,
在Linux系統中口令檔案一般儲存在$ORACLE_HOME/dbs目錄下,檔名為orapw$SID;在Windows系統中口令檔案一般儲存在$ORACLE_HOME/database目錄下,檔名為PWD$SID.ora。
使用口令檔案認證的基本步驟是:
- 使用orapwd工具生成口令檔案
- 設定REMOTE_LOGIN_PASSWORDFILE為EXCLUSIVE或是SHARED
- 使用SYS登陸資料庫,建立新的資料庫使用者
- 使用GRANT命令授予新建立的使用者SYSDBA/SYSOPER許可權
1、使用orapwd工具生成口令檔案
我們可以使用Oracle提供的工具orapwd來建立或者重新初始化一個口令檔案:
Usage: orapwd file=
where
file - name of password file (mand),
password - password for SYS (mand),
entries - maximum number of distinct DBA and force - whether to overwrite existing file (opt),
OPERs (opt),
There are no spaces around the equal-to (=) character.
[oracle@RHEL4 ~]$ orapwd file='$ORACLE_HOME/dbs/orapw$ORACLE_SID' password=pwd entries=10 force=y
[oracle@RHEL4 ~]$
注意:使用orapwd重新生成口令檔案之後以儲存的授予的其他使用者的SYSDBA或是SYSOPER許可權將會丟失,需要重新的GRANT。
設定的entries值是不能修改的,如果要修改entries的話需要重新生成口令檔案,在生成口令檔案之前可以先通過V$PWFILE_USERS檢視查詢出當前被授予SYSDBA/SYSOPER許可權的使用者,然後在重新生成口令檔案以後重新對這些使用者授予SYSDBA/SYSOPER許可權
2、設定REMOTE_LOGIN_PASSWORDFILE為EXCLUSIVE或是SHARED
3、使用SYS登陸資料庫,建立新的資料庫使用者
4、使用GRANT命令授予新建立的使用者SYSDBA/SYSOPER許可權
每次在Oracle系統裡面使用GRANT SYSDBA/SYSOPER授予新使用者特殊許可權或是ALTER USER命令修改擁有SYSDBA/SYSOPER許可權的使用者密碼的時候,Oracle都會自動的修改口令檔案,增加或是修改相應的專案,這樣保證在資料沒有開啟的情況擁有特殊許可權的使用者能正常的登陸資料庫以進行管理操作。
實驗
上面長篇大論的說了那麼多,下面我們來做實驗驗證一下。實驗都是基於Linux系統來做的,做實驗之前先使用下面的命令建立一個口令檔案:
1、驗證OS認證
設定SQLNET.ORA中引數SQLNET.AUTHENTICATION_SERVICES = (ALL)或是不設定,REMOTE_LOGIN_PASSWORDFILE = NONE,然後進行下面的操作。
本地使用下面兩種方式登陸,都能成功
SQL*Plus: Release 10.2.0.1.0 - Production on Sun Jun 7 15:06:55 2008
Copyright (c) 1982, 2005, Oracle. All rights reserved.
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
SQL>
SQL*Plus: Release 10.2.0.1.0 - Production on Sun Jun 7 15:16:25 2008
Copyright (c) 1982, 2005, Oracle. All rights reserved.
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
SQL>
遠端使用口令檔案方式登陸,失敗
SQL*Plus: Release 10.2.0.4.0 - Production on Sat Jun 7 19:06:55 2008
Copyright (c) 1982, 2007, Oracle. All Rights Reserved.
ERROR:
ORA-01017: invalid username/password; logon denied
Enter user-name:
2、兩種認證都失效
設定SQLNET.ORA中引數SQLNET.AUTHENTICATION_SERVICES = (NONE),REMOTE_LOGIN_PASSWORDFILE = NONE,然後進行下面的操作。
本地使用下面兩種方式登陸,都失敗
SQL*Plus: Release 10.2.0.1.0 - Production on Sat Jun 7 19:22:05 2008
Copyright (c) 1982, 2005, Oracle. All rights reserved.
ERROR:
ORA-01031: insufficient privileges
Enter user-name:
SQL*Plus: Release 10.2.0.1.0 - Production on Sat Jun 7 19:22:46 2008
Copyright (c) 1982, 2005, Oracle. All rights reserved.
ERROR:
ORA-01017: invalid username/password; logon denied
Enter user-name:
遠端使用口令檔案方式登陸,失敗
SQL*Plus: Release 10.2.0.4.0 - Production on Sat Jun 7 19:06:55 2008
Copyright (c) 1982, 2007, Oracle. All Rights Reserved.
ERROR:
ORA-01017: invalid username/password; logon denied
Enter user-name:
3、驗證口令檔案認證
設定SQLNET.ORA中引數SQLNET.AUTHENTICATION_SERVICES = (NONE)不設定,REMOTE_LOGIN_PASSWORDFILE = EXCLUSIVE或SHARED,然後進行下面的操作。
本地使用驗證OS認證,失敗
SQL*Plus: Release 10.2.0.1.0 - Production on Sat Jun 7 19:16:56 2008
Copyright (c) 1982, 2005, Oracle. All rights reserved.
ERROR:
ORA-01031: insufficient privileges
Enter user-name:
本地驗證口令檔案認證,成功
SQL*Plus: Release 10.2.0.1.0 - Production on Sat Jun 7 19:26:48 2008
Copyright (c) 1982, 2005, Oracle. All rights reserved.
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
SQL>
遠端使用口令檔案認證,成功
SQL*Plus: Release 10.2.0.4.0 - Production on Sat Jun 7 19:21:18 2008
Copyright (c) 1982, 2007, Oracle. All Rights Reserved.
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
SYS@192.168.0.201/orcl>
4、兩種認證都成功
設定SQLNET.ORA中引數SQLNET.AUTHENTICATION_SERVICES = (ALL),REMOTE_LOGIN_PASSWORDFILE = EXCLUSIVE,然後進行下面的操作。
本地使用驗證OS認證,成功
SQL*Plus: Release 10.2.0.1.0 - Production on Sat Jun 7 19:30:33 2008
Copyright (c) 1982, 2005, Oracle. All rights reserved.
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
SQL>
遠端使用口令檔案認證,成功
SQL*Plus: Release 10.2.0.4.0 - Production on Sat Jun 7 19:27:11 2008
Copyright (c) 1982, 2007, Oracle. All Rights Reserved.
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
SYS@192.168.0.201/orcl>
5、將SYSDBA/SYSOPER許可權授權給其它資料庫帳戶
先檢視口令檔案的修改時間
-rw-r----- 1 oracle oinstall 2560 Jun 7 19:04 orapworcl
用SYS登陸資料庫,建立新使用者test,並賦予SYSDBA許可權
SQL*Plus: Release 10.2.0.1.0 - Production on Sat Jun 7 21:41:36 2008
Copyright (c) 1982, 2005, Oracle. All rights reserved.
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
SQL>
User created.
SQL>grant sysdba to test;
Grant succeeded.
Disconnected from Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
再看口令檔案,已經修改了
-rw-r----- 1 oracle oinstall 2560 Jun 7 21:42 orapworcl
再用新的test帳號登陸,能成功的登陸
SQL*Plus: Release 10.2.0.4.0 - Production on Sat Jun 7 21:32:37 2008
Copyright (c) 1982, 2007, Oracle. All Rights Reserved.
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
SYS@192.168.0.201/orcl>
說明:如果要取消SYSDBA許可權只需要執行下面的語句就可以了
常見問題說明
1、如何查詢擁有SYSDBA或是SYSOPER許可權的使用者
使用檢視V$PWFILE_USERS,結果集中的SYSDB和SYSOP分別代表是否有SYSDBA和SYSOPER許可權。
/**
USERNAME SYSDB SYSOP
------------------------------ ----- -----
SYS TRUE TRUE
TEST TRUE FALSE
*/
2、授予許可權時出現”ORA-01994: GRANT failed: password file missing or disabled”
出現這種情況是因為沒有建立口令檔案,或者是口令檔案放置的目錄不正確,Oracle找不到。只要重建或將口令檔案置於$ORACLE_HOME/dbs/目錄中就可以了。
3、忘記了SYS帳號的密碼怎麼辦?
如果資料庫啟用的OS認證登陸,則可以用OS認證登陸資料庫,然後使用下面的命令進行修改
如果沒有啟用OS認證登陸,則需要用orapwd重建口令檔案
其中的password項所指定的就是SYS的密碼
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8183550/viewspace-662221/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle中兩種認證方式:OS認證與口令檔案認證Oracle
- Oracle OS 認證, 口令檔案Oracle
- 關於os認證和口令檔案認證
- os認證和口令檔案!
- oracle os認證和口令檔案認證的簡要解析Oracle
- 關於os認證和口令檔案認證(轉)
- os認證、口令檔案認證及兩個引數【轉】
- ASM認證與口令檔案ASM
- Oracle OS認證、口令檔案、密碼丟失處理Oracle密碼
- os認證以及口令檔案的(引用warehouse的)
- 【登陸認證】oracle的作業系統認證和口令檔案認證方式(轉載)Oracle作業系統
- OS認證以及口令檔案的一點總結(轉)
- 作業系統認證與ORACLE密碼檔案認證方式作業系統Oracle密碼
- Oracle中的鑑權口令認證Oracle
- Oracle基礎結構之OS驗證和口令檔案驗證Oracle
- Kerberos認證原理詳解ROS
- 重新認識口令檔案
- Oracle 認證網Oracle
- 【ORACLE】oracle 使用者(sysdba)遠端登入和口令認證Oracle
- OAuth 2.0 授權認證詳解OAuth
- squid 配置詳解+認證(轉)UI
- 關於ORACLE作業系統認證和ORAPWD密碼檔案認證SYSDBA許可權Oracle作業系統密碼
- Java身份證實名認證介面解鎖認證新速度Java
- Oracle 認證下載Oracle
- Oracle OCM 認證指南Oracle
- oracle account 外部認證Oracle
- SpringSecurity認證流程原始碼詳解SpringGse原始碼
- 今天安裝的資料庫出現作業系統認證可以透過,口令檔案認證不能透過的情況.資料庫作業系統
- 1.6.5. 使用密碼檔案認證密碼
- 【認證與授權】2、基於session的認證方式Session
- 瞭解JWT認證JWT
- WebApi身份認證解決方案(1):Basic基礎認證WebAPI
- 淺談oracle 使用者(sysdba)遠端登入和口令認證Oracle
- HTTP認證之基本認證——Basic(一)HTTP
- HTTP認證之基本認證——Basic(二)HTTP
- Oracle 認證大師(OCM)Oracle
- oracle登陸認證方式Oracle
- oracle的認證機制Oracle