* 本文相關環境: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行):
NTS特指的是windows系統。
(2)在windows中建立ora_dba組,然后把需要使用操作系統認證的用戶加到這個組中,組的打開方式為:
控制面板->管理工具->計算機管理->本地用戶和組->組。打開后我們可以看到相關信息:
點開Ora_dba用戶組,可以看到:
這就可以解釋為什么我們在使用Toad for Oracle或sqlplus等客戶端工具登錄數據庫時,密碼錯誤仍然可以登入:我們在安裝數據庫時,采用了默認的安裝方式,使用操作系統認證登錄到數據庫,所以在使用sysdba方式認證登錄時,無論密碼對錯,均可以登錄到數據庫。這里要注意的一點是,在使用了操作系統用戶組ora_dba里面的用戶登錄才會采用操作系統用戶登錄,如果用戶不在ora_dba里面,則無法使用操作系統用戶登錄。
登陸后,可以在 SQL Plus中執行下面語句 select user from dual來查看當前用戶:
發現數據庫的用戶為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>
-完-