今天下午遇到一個很怪異的問題,在windows平臺下sqlplus / as sysdba登錄數據庫,提示權限不足,linux
當時就納悶了,sys用戶登錄數據庫還能權限不足,問題出現了,就開始尋找解決方法唄sql
首先查看$ORACLE_HOME/network/admin/sqlnet.ora中SQLNET.AUTHENTICATION_SERVICES項的配置信息,數據庫
網上的大多數帖子一致結論爲:windows
在windows平臺上,SQLNET.AUTHENTICATION_SERVICES必須設置爲NTS或者ALL才能使用操做系統驗證,不設置或者設置爲其餘都能使用操做系統驗證oracle
在linux平臺上,SQLNET.AUTHENTICATION_SERVICES必須設置爲ALL或者不設才能使用操做系統驗證,設置爲其餘則不能使用操做系統驗證ide
好,那就先看sqlnet.ora操作系統
個人SQLNET.AUTHENTICATION_SERVICES是NTS啊,那又是什麼緣由呢,再找unix
再分析一下操做系統用戶登陸操做系統後再訪問數據庫實例的行爲。 blog
使用sysdba 身份鏈接數據庫實例,使用的認證方式是操做系統認證,而這一認證操做過程是操做系統根據它管理的信息去校驗該用戶是否能夠鏈接數據庫的過程。 圖片
所以,須要進一步分析的是,操做系統若是判斷oracle 用戶符合認證條件。很顯然,咱們這裏的oracle 用戶的權限被操做系統或者oracle 系統拒絕了。
Oracle 認爲,須要知足下列條件的用戶才能使用系統認證方式鏈接數據庫實例。
1 、系統用戶oracle 必須屬於一個特定的組
該用戶必須屬於OSDBA 組才能以sysdba 身份登陸。這裏的OSDBA 組在不一樣類型的操做系 統 上,名稱會不同。在unix 系統上名稱爲「dba 」 ,而在windows 系統上名稱則爲「ORA_DBA 」 。
2 、sqlnet.authentication_services 的參數必須設置正確
在unix 系統上,該參數值必須設置爲ALL ,或者不設置;在windows 上,它必須設置爲NTS
再看看,當前登陸用戶有沒有加入到ORA_DBA,
壞了,我當前以administrator用戶登錄,可是沒有將其加入到ORA_DBA組裏,緣由找到
將administrator用戶加入到ORA_DBA組裏
再登錄數據庫:sqlplus / as sysdba
ok,問題解決!