關於 SQLNET.AUTHENTICATION_SERVICES 驗證方式的說明,sqlnet.ora

來源:互聯網
上載者:User

關於 SQLNET.AUTHENTICATION_SERVICES 驗證方式的說明,sqlnet.ora
今天去客戶那裡巡檢,客戶提出為了提高資料庫安全性考慮,需要修改sys/system密碼,並通過資料庫驗證方式來取代預設的作業系統方式,現在我來把這兩種驗證方式總結一下。


作業系統驗證,即通過作業系統賬戶的許可權訪問資料庫,舉個例子,如果已經擁有了windows下的系統管理員administrator的許可權,那麼當採用該方式驗證的話,無需輸入使用者/密碼就可以訪問,比如:sqlplus / as sysdba;哪怕是任意輸入的使用者名稱和密碼,也無所謂,比如:sqlplus abc/efg as sysdba;


C:\Documents and Settings\Administrator>sqlplus / as sysdba


SQL*Plus: Release 10.2.0.1.0 - Production on 星期四 8月 28 21:02:25 2014


Copyright (c) 1982, 2005, Oracle.  All rights reserved.




串連到:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options


SQL> exit
從 Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options 斷開


C:\Documents and Settings\Administrator>sqlplus abc/efg as sysdba


SQL*Plus: Release 10.2.0.1.0 - Production on 星期四 8月 28 21:02:33 2014


Copyright (c) 1982, 2005, Oracle.  All rights reserved.




串連到:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options


SQL>


當然,這僅限於sys使用者,對於其他使用者,哪怕是system,也是必須輸入使用者名稱和密碼才能訪問資料庫的


C:\Documents and Settings\Administrator>sqlplus system/123456


SQL*Plus: Release 10.2.0.1.0 - Production on 星期四 8月 28 21:05:07 2014


Copyright (c) 1982, 2005, Oracle.  All rights reserved.


ERROR:
ORA-01017: 使用者名稱/口令無效; 登入被拒絕




請輸入使用者名稱:


我的環境中,預設sys和system使用者的密碼都是"oracle",資料庫sys使用者的密碼,是存放在PWD<SID>.ora中的(Unix/Linux中為oraPW<SID>),想知道sys使用者是否有密碼,可以通過以下語句查詢:
SQL> select * from v$pwfile_users;


USERNAME                       SYSDB SYSOP
------------------------------ ----- -----
SYS                            TRUE  TRUE


顯然,對於採用作業系統驗證來訪問資料庫,安全性還是有一定隱患的,通常在大公司,SA和DBA都是分權管理的,如果資料庫因為採用了作業系統驗證方式,而使SA可以隨意訪問資料庫那也是不太合適的。基於這種情境,那麼我們就可以採用資料庫驗證方式來限制sys使用者必須輸入正確的使用者名稱和密碼才能夠訪問資料庫。這樣的話,當SA沒有DBA的sys密碼,就無法訪問資料庫了。


在windows中,是通過sqlnet.ora這個檔案來實現驗證機制控制的,當你裝完資料庫並用netca建立了監聽,就會產生這個檔案,通常預設是以下內容:
# This file is actually generated by netca. But if customers choose to 
# install "Software Only", this file won't exist and without the native 
# authentication, they will not be able to connect to the database on NT.


SQLNET.AUTHENTICATION_SERVICES = (NTS)


也就是說,預設就是採用作業系統驗證的,也許Oracle認為,擁有了SA許可權,就擁有了系統最高許可權,所以資料庫DBA的sys使用者也無需再驗證密碼了


如果設定成(NONE),就表示採用資料庫身分識別驗證,還可以設定成(NONE,NTS),其實這樣設也沒有意義了,只要括弧中有NTS,就會採用作業系統驗證,NONE就沒有用了


這裡要指出一點,有些文章中說還可以設定成(ALL),但我設計測試下來,如果設定成(ALL),會提示ERROR:
C:\Documents and Settings\Administrator>sqlplus / as sysdba


SQL*Plus: Release 10.2.0.1.0 - Production on 星期四 8月 28 21:26:06 2014


Copyright (c) 1982, 2005, Oracle.  All rights reserved.


ERROR:
ORA-12641: 驗證服務無法初始化


請輸入使用者名稱:


如,以下這段描述:
Use the parameter SQLNET.AUTHENTICATION_SERVICES to enable one or more authentication services.
If authentication has been installed,it is recommended that this parameter be set to either none or to one of the authentication methods.
 
NONE for no authentication methods. A valid username and password can be used to access the database.
ALL for all authentication methods
NTS for Windows NT native authentication(An authentication method that enables
a client single login access to a Windows NT server and a database running on the server)


雖然這裡說到了有ALL,不過我親自測試過,確實不行,也許和版本有關,我的版本是10.2.0.1 windows 32bit的


--修改為(NONE)後登陸
C:\Documents and Settings\Administrator>sqlplus / as sysdba


SQL*Plus: Release 10.2.0.1.0 - Production on 星期四 8月 28 21:50:49 2014


Copyright (c) 1982, 2005, Oracle.  All rights reserved.


ERROR:
ORA-01031: 許可權不足




請輸入使用者名稱:  sys as sysdba
輸入口令: --此處輸入正確的密碼“oracle”


串連到:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options

SQL>


--中斷連線,把(NONE)改為(NTS)直接連接
SQL> disc
從 Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options 斷開
SQL> conn abc/123 as sysdba
ERROR:
ORA-01031: 許可權不足


由於沒有退出SQLPLUS,剛才改的(NTS)還未生效,可見sqlnet.ora檔案是在進入SQLPLUS時才去讀取的


--仍然保持(NTS),退出SQLPLUS後重新登陸
SQL> exit


C:\Documents and Settings\Administrator>sqlplus / as sysdba


SQL*Plus: Release 10.2.0.1.0 - Production on 星期四 8月 28 21:54:52 2014


Copyright (c) 1982, 2005, Oracle.  All rights reserved.




串連到:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options


SQL>


現在又是作業系統驗證了


注意,如果改成(NONE)以後,當使用RMAN時,system使用者就不能操作了,輸入正確的密碼也不行,只有sys使用者並輸入密碼才可以,測試如下:


--設定為(NTS)的時候登陸RMAN
C:\Documents and Settings\Administrator>rman target /


復原管理員: Release 10.2.0.1.0 - Production on 星期四 8月 28 22:02:07 2014


Copyright (c) 1982, 2005, Oracle.  All rights reserved.


串連到目標資料庫: ORCL10G (DBID=1041171248)


RMAN> exit




復原管理員完成。


C:\Documents and Settings\Administrator>rman target system/oracle


復原管理員: Release 10.2.0.1.0 - Production on 星期四 8月 28 22:02:33 2014


Copyright (c) 1982, 2005, Oracle.  All rights reserved.


串連到目標資料庫: ORCL10G (DBID=1041171248)


RMAN> exit




復原管理員完成。


--修改為(NONE)後,再用密碼登陸一次RMAN
C:\Documents and Settings\Administrator>rman target system/oracle--注意,這裡密碼是正確的


復原管理員: Release 10.2.0.1.0 - Production on 星期四 8月 28 22:03:06 2014


Copyright (c) 1982, 2005, Oracle.  All rights reserved.


RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-00554: 內部復原管理員程式包初始化失敗
RMAN-04005: 目標資料庫中存在錯誤:
ORA-01031: 許可權不足


C:\Documents and Settings\Administrator>rman target /


復原管理員: Release 10.2.0.1.0 - Production on 星期四 8月 28 22:08:47 2014


Copyright (c) 1982, 2005, Oracle.  All rights reserved.


RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-00554: 內部復原管理員程式包初始化失敗
RMAN-04005: 目標資料庫中存在錯誤:
ORA-01031: 許可權不足


C:\Documents and Settings\Administrator>rman target sys/oracle


復原管理員: Release 10.2.0.1.0 - Production on 星期四 8月 28 22:03:16 2014


Copyright (c) 1982, 2005, Oracle.  All rights reserved.


串連到目標資料庫: ORCL10G (DBID=1041171248)


RMAN>


很顯然,在採用資料庫身分識別驗證以後,system使用者被禁止使用RMAN了,只有擁有資料庫最高許可權的sys使用者,才能登陸RMAN,而且必須是輸入密碼的方式登陸


總結:


在windows下,SQLNET.AUTHENTICATION_SERVICES必須設定為NTS才能使用OS認證,不設定(如,把該行語句加#注釋符號)或者設定為其他任何值都不能使用OS認證。
主要是以下幾種情況:
1. sqlnet.ora檔案為空白,或用#注釋掉              --基於Oracle密碼檔案驗證
2. SQLNET.AUTHENTICATION_SERVICES = (NTS)       --基於作業系統驗證
3. SQLNET.AUTHENTICATION_SERVICES = (NONE)      --基於Oracle密碼檔案驗證
4. SQLNET.AUTHENTICATION_SERVICES = (NONE,NTS)  --基於作業系統驗證(前後順序顛倒也一樣)


注意:預設情況下,Unix/Linux下的sqlnet.ora檔案是沒有SQLNET.AUTHENTICATION_SERVICES參數的,似乎連sqlnet.ora這個檔案也沒有,這和windows有很大的不同
此時是作業系統驗證和Oracle密碼驗證並存,如果加上SQLNET.AUTHENTICATION_SERVICES這個參數後,不管是設定為(NONE)、(NTS)或(NONE,NTS),都是基於Oracle密碼驗證。





GMP的驗證;證明任何操作規(或方法)生產工藝或系統可以夠達到預期結果的一系列活動,舉例說明驗證的概念

這個,簡單的說,你已經把定義都說出來了,要是詳細說的話,驗證都夠寫多少本書了。
 
為何用sql developer可以登oracle sql plus卻不可以

oracle登陸認證方式
Oracle登入認證有兩種方式,基於作業系統的登入認證,基於oracle的驗證。
第一:Windows下基於作業系統的登入認證
1 Windows下設定oracle登入驗證為作業系統驗證方式的方法:
1:把os使用者加到ora_dba組
2:設定sqlnet.ora SQLNET.AUTHENTICATION_SERVICES = (NTS)
SQLNET.AUTHENTICATION_SERVICES= (NTS)是基於作業系統驗證;
SQLNET.AUTHENTICATION_SERVICES= (NONE)是基於Oracle驗證;
SQLNET.AUTHENTICATION_SERVICES= (NONE,NTS)是二者共存。

2 windows作業系統中作業系統認證方式登入的原理:
1: 在命令列下敲入compmgmt.msc 進入電腦管理
2: 選擇本機使用者和組—>組(有一個組的名字叫做ORA_DBA )
3: 雙擊可以看到裡面是不是有administrator使用者
4: 再進入Oracle安裝目錄(即$ORACLE_HOME 一般是D:"oracle)"ora92"network"admin
找到sqlnet.ora檔案看看裡面的是不是有SQLNET.AUTHENTICATION_SERVICES= (NTS)
5: 如果這些都對的話,你就能已作業系統認證的方式(connect / as sysdba)來登入Oracle

3 windows作業系統中禁止作業系統認證的方法:
1:SQLNET.AUTHENTICATION_SERVICES= (NTS)改為SQLNET.AUTHENTICATION_SERVICES=none即可
 

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.