[Oracle]Oracle數據庫任何用戶密碼都能以sysdba角色登入


 

* 本文相關環境:Windows 10,64位操作系統;Oracle 11gR2;toad for Oracle12.1

      最近在學習Oracle數據庫,使用Toad for Oracle來查看數據庫的信息,發現在以sysdba角色登錄數據庫時,無論輸入什么密碼,均可以連接到數據庫,以為是數據庫又出故障了,帶着疑問,查找資料。發現里面有很多的學問,下面簡單記述一下。

      Oracle認證用戶有兩種方式:操作系統認證與口令認證。操作系統認證也叫本地認證。

  • 操作系統認證:Oracle認為操作系統用戶是可靠的,那么既然你能登錄到操作系統,必然也能登錄到數據庫;
  • 口令文件認證:Oracle認為操作系統用戶是不可靠的,如果要訪問數據庫,必須再次使用密碼認證。

(一)操作系統認證

要使用操作系統認證,需要設置兩處:

(1)在sqlnet.ora文件中設置:

SQLNET.AUTHENTICATION_SERVICES= (NTS)

如下圖(第8行):

sqlnet

NTS特指的是windows系統。

(2)在windows中建立ora_dba組,然后把需要使用操作系統認證的用戶加到這個組中,組的打開方式為:

控制面板->管理工具->計算機管理->本地用戶和組->組。打開后我們可以看到相關信息:

image

點開Ora_dba用戶組,可以看到:

image

這就可以解釋為什么我們在使用Toad for Oracle或sqlplus等客戶端工具登錄數據庫時,密碼錯誤仍然可以登入:我們在安裝數據庫時,采用了默認的安裝方式,使用操作系統認證登錄到數據庫,所以在使用sysdba方式認證登錄時,無論密碼對錯,均可以登錄到數據庫。這里要注意的一點是,在使用了操作系統用戶組ora_dba里面的用戶登錄才會采用操作系統用戶登錄,如果用戶不在ora_dba里面,則無法使用操作系統用戶登錄。

登陸后,可以在 SQL Plus中執行下面語句 select user from dual來查看當前用戶:

image

發現數據庫的用戶為SYS而不是SCOTT。經過多次測試,發現從CMD以sqlplus / as sysdba登錄也是相同的結果。最后發現,無論使用哪個賬戶,只要以as sysdba登錄到數據庫,最終數據庫的user均為SYS。

 

(二)口令文件認證

Oracle的密碼文件包含了被授予SYSDBA和SYSOPER權限的用戶的用戶名和密碼,如果要使用用戶名和密碼登錄,則把sqlnet.ora文件的AUTHENTICATION_SERVICES=none,或者將這句刪除或屏蔽(前面加“#”號)。使用操作系統登錄數據庫的方式就會失去作用,只有給出正確的用戶名和密碼才能登錄。

SQL*Plus: Release 11.2.0.1.0 Production on 星期日 12月 18 23:01:31 2016

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

請輸入用戶名:  scott as sysdba      /*以管理員方式登錄*/
輸入口令:           /*輸入錯誤的口令*/   
ERROR:
ORA-01031: insufficient privileges


請輸入用戶名:  scott as sysdba     /*以管理員方式登錄*/ 
輸入口令:     /*輸入正確的口令*/ 
ERROR:
ORA-01031: insufficient privileges


請輸入用戶名:  scott       /*以normal方式登錄*/ 
輸入口令:    /*輸入正確的口令*/ 

連接到:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL>

 

-完-


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM