一个初学者困惑的Oracle的认证问题
總有初學者問這個問題為什么Oracle 不要密碼也可以進入。
其實這就是Oracle設計的精巧之處。
一.直接通過 sqlplus / as sysdba ?方式登錄。
當我們安裝了Oracle 之后,直接通過sql / as sysdba,就直接可以登錄Oracle,即使設置了SYS用戶的密碼,完全沒有效果。請注意該中情況只有在?
用戶已經登入OS ,完成了OS認證的情況下有效,如果通過 i sqlplus 是無法登錄。而且以
View Code 1 sqlplus sys123/123 as sysdba; --sys123這個用戶,123這個密碼都不存在。
2 sqlplus / as sysdba; --
這兩種可以正常登錄。是不是由于Oracle 的認證失效了?不是。
此時oracle 采用的默認 認證方式。即OS認證方式。
我們如果是NT,平臺,可以在用戶組中找到,oracle_dba這個用戶組,而且當前用戶正在這個這個組中。 說明用戶通過OS的認證方式,即也通過Orcle默認的認證方式。
問題:一般OS管理人員,和 Oracle DBA 是由不同的團隊組成的。這樣如果OS 管理人員如果 對Oracle稍有了解的話,就可直接登錄Oracle,而且是最高權限。存在很大的安全隱患。
解決辦法:
1.從OS中將 oracle_dba這個用戶組刪除掉,或者將當前用戶從改組中刪除。這樣Oracle 的OS認證無法通過。
2.取消Oracle 的 OS 認證方式。
在sqlnet.ora文件中有一個設置選項
SQLNET.AUTHENTICATION_SERVIES? 其有兩個值
SQLNET.AUTHENTICATION_SERVIES=(NTS) ?--啟用OS 認證模式
SQLNET.AUTHENTICATION_SERVIES=(NONE)-- 關閉OS 認證模式
? ? ? 關閉之后,通過 sqlplus / as sysdba;再也無法登錄進系統。
二. 通過 ?sqlplus sys/oracle 方式登錄可以通過,。而通過sqlplus sysdba/oracle 無法通過
首先區別DBA和 SYSDBA角色
dba是一種role角色,對應的是對Oracle實例里系統的操作權限的集合,是實實在在存在在Oracle里的物理對象而
sysdba是概念上的role,是一種登錄認證時的身份標識而已,在OS認證時用到。
系統中只有dba權限。Sysdba權限是沒有的。
--DBA具有的權限
select * from DBA_ROLES where role like 'DBA';
得到結果是具有DBA角色的用戶,剛安裝的會有sys用戶,sys用戶是數據庫的擁有者,可以授予其他用戶DBA角色。
?
--sysdba的權限
select * from DBA_ROLES where role like ‘SYSDBA';
?得到結果為空,因為SYSDBA這個角色根本不存在。
?
--查看那些對象有dba權限
Select * from dba_role_privs where granted_role like 'DBA';
Select * from dba_role_privs where granted_role like 'SYSDBA';
?
--查看那些用戶有sysdba權限是通過 v$pwfile_users
Select * from v$pwfile_users;
? 得到的結果是具有DBA角色的用戶。
所有,具有DBA角色的用戶,通過口令文件認證的。是將密碼通過加密后存入密碼文件中。
問題: 如果密碼忘記了怎么辦?
先將口令文件刪除,然后重建。
轉載于:https://www.cnblogs.com/jerryxing/archive/2012/04/08/2437986.html
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的一个初学者困惑的Oracle的认证问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: kvmweb管理工具_KVM web管理
- 下一篇: python列表修改元素_如何在Pyth