這裡將介紹Oracle修改用戶權限的實現過程,包括一些權限管理方面的東西。希望通過本文能對大家了解Oracle修改用戶權限有所幫助。
Oracle數據庫用戶與權限管理
Oracle是多用戶系統,它允許許多用戶共享系統資源。為了保證數據庫系統的安全,數據庫管理系統配置了良好的安全機制。
2. 1 Oracle數據庫安全策略
建立系統級的安全保證
系統級特權是通過授予用戶系統級的權利來實現,系統級的權利(系統特權)包括:建立表空間、建立用戶、修改用戶的權利、刪除用戶等。系統特權可授予用戶,也可以隨時回收。Oracle系統特權有80多種。
建立對象級的安全保證
對象級特權通過授予用戶對數據庫中特定的表、視圖、序列等進行操作(查詢、增、刪改)的權利來實現。
建立用戶級的安全保證
用戶級安全保障通過用戶口令和角色機制(一組權利)來實現。引入角色機制的目的是簡化對用戶的授權與管理。做法是把用戶按照其功能分組,為每個用戶建立角色,然後把角色分配給用戶,具有同樣角色的用戶有相同的特權。
2.2 用戶管理
Oracle用戶管理的內容主要包括用戶的建立、修改和刪除
用戶的建立
- SQL>CREATE USER jxzy
- >IDENTIFIED BY jxzy_passWord
- >DEFAULT TABLESPACE system
- >QUATA 5M ON system; //供用戶使用的最大空間限額
Oracle修改用戶權限
- SQL>CREATE USER jxzy
- >IDENTIFIED BY jxzy_pw
- >QUATA 10M ON system;
刪除用戶及其所建對象
- SQL>DROP USER jxzy CASCADE; //同時刪除其建立的實體
2.3系統特權管理與控制
Oracle 提供了80多種系統特權,其中每一個系統特權允許用戶執行一個或一類數據庫操作。
授予系統特權
- SQL>GRANT CREATE USER,ALTER USER,DROP USER
- >TO jxzy_new
- >WITH ADMIN OPTION;
回收系統特權
- SQL>REVOKE CREATE USER,ALTER USER,DROP USER
- >FROM jxzy_new
- //但沒有級聯回收功能
顯示已被授予的系統特權(某用戶的系統級特權)
- SQL>SELECT*FROM sys.dba_sys_privs
2.4 對象特權管理與控制
Oracle對象特權指用戶在指定的表上進行特殊操作的權利。這些特殊操作包括增、刪、改、查看、執行(存儲過程)、引用(其它表字段作為外鍵)、索引等。
授予對象特權
- SQL>GRANT SELECT,INSERT(office_num,Office_name),
- >UPDATE(desc)ON Office_organization
- >TO new_adminidtrator
- >WITH GRANT OPTION;
- //級聯授權
- SQL>GRANT ALL ON Office_organization
- >TO new_administrator
回收對象特權
- SQL>REVOKE UPDATE ON Office_orgaization
- >FROM new_administrator
- //有級聯回收功能
- SQL>REVOKE ALL ON Office_organization
- >FROM new_administrator
顯示已被授予的全部對象特權
- SQL>SELECT*FROM sys.dba_tab_privs
2.5 角色的管理
ORACLE的角色是命名的相關特權組(包括系統特權與對象特權),Oracle用它來簡化特權管理,可把它授予用戶或其它角色。
Oracle數據庫系統預先定義了CONNECT 、RESOURCE、 DBA、 EXP_FULL_DATABASE、 IMP_FULL_DATABASE五個角色。CONNECT具有創建表、視圖、序列等特權;RESOURCE具有創建過程、觸發器、表、序列等特權、DBA具有全部系統特權;EXP_FULL_DATABASE、 IMP_FULL_DATABASE具有卸出與裝入數據庫的特權。
通過查詢sys.dba_sys_privs可以了解每種角色擁有的權利。
授予用戶角色
- SQL>GRANT DBA TO new_administractor
- >WITH GRANT OPTION;
- ==============================================================
Oracle 的用戶根據所被授予的權限分為系統權限和對象權限。其中最高的權限是sysdba。 Sysdba具有控制Oracle一切行為的特權,諸如創建、啟動、關閉、恢復數據庫,使數據庫歸檔/非歸檔,備份表空間等關鍵性的動作只能通過具有sysdba權限的用戶來執行。這些任務即使是普通DBA角色也不行。Sysoper是一個與sysdba相似的權限,只不過比sysdba少了SYSOPER privileges WITH ADMIN OPTION,CREATE DATABASE,RECOVER DATABASE UNTIL這幾個權限而已。這兩者的認證方式是相同的辦法,所以下面只介紹sysdba的認證管理。
一般對sysdba的管理有兩種方式: *** 作系統認證和密碼文件認證。具體選擇那一種認證方式取決於:你是想在Oracle運行的機器上維護數據庫,還是在一台機器上管理分布於不同機器上的所有的Oracle數據庫。若選擇在本機維護數據庫,則選擇 *** 作系統認證可能是一個簡單易行的辦法;若有好多數據庫,想進行集中管理,則可以選擇passWord文件認證方式。
下圖比較直觀的說明了這個選擇權衡過程:
使用 *** 作系統認證方式的配置過程:
1. 在 *** 作系統中建立一個合法帳戶。
具體來說,在NT上,首先建立一個本地用戶組,取名為ORA__DBA,其中SID為該數據庫實例的SID,或者建立一個ORA_DBA地組,該組不對應於任何一個單獨的Oracle實例。這樣當一個NT上有好幾個Oracle實例時,不用分別管理。然後再NT上建立一個用戶,並且把它歸入該組中。但是實際上這兩步在Oracle8I安裝過程中已經自動完成了,一般不用手動進行。
第三步:在sqlnet.ora(位於$Oracle_HOME/NETWORK/ADMIN目錄中)中,把SQLNET.AUTHENTICATION _SERVICES 設置為SQLNET.AUTHENTICATION_SERVICES= (NTS),意思為使用NT認證方式。
第四步,在INIT.ORA中,把REMOTE_LOGIN_PASSWORD設置為NONE,意思是不用passWord認證方式。
完成以上步驟後,就可以在登錄到NT後,直接在SQL*Plus 和SERVER MANAGER中CONNECT INTERNAL (CONNECT / AS SYSDBA)來作為超級用戶登錄到Oracle中,執行一些只有超級用戶才能進行的 *** 作。
在Unix下,情況有些不同。畢竟這是兩個完全不同的 *** 作系統。
首先,在安裝Oracle之前,建立一個DBA組,這一步不用說了,不然是裝不上Oracle的。一般還建立一個名為Oracle的用戶,並把它加入到DBA組中。
第二步, 設置REMOTE_LOGIN_PASSWord為NONE。在Oracle8.1以後,該參數默認為EXCLUSIVE。一定要記得改過來。
第三步, 用該用戶名登錄Unix,運行SQL*Plus 或者SERVER MANAGER,輸入以下命令:CONNECT INTERNAL(CONNECT / AS SYSDBA)來登錄到Oracle中。
使用passWord文件認證的具體步驟:
Oracle提供orapwd實用程序來創建passWord 文件,運用orapwd建立該認證方式的具體步驟如下:
1. 使用Orapwd實用程序來創建一個PASSWord文件。語法:
orapwd file=文件名 passWord=internal用戶密碼 entried=entrIEs.
詳細解釋:
文件名要包含完整的全路徑名,如果不指定,Oracle把它默認放置$ORACLE_HOME/dbs(Unix下)或者$Oracle_HOME/DATABASE(NT下)下。
用戶密碼是用戶internal的密碼。當然後來還可以再向裡邊加入別的超級用戶。
EntrIEs表示最大允許有的超級用戶數目。這個是一個可選的。前兩者是必須指定的。一般會把它設置的比實際需要大一些,以免不夠。
2. 把INIT.ORA中REMOTE_LOGIN_PASSWORD設置為EXCLUSIVE 或SHARED.使用EXCLUSIVE表示只有當前INSTANCE使用這個passWord文件。而且允許有別的用戶作為sysdba登錄進系統裡邊,而若選擇了SHARED,則表明不止一個實例使用這個密碼文件,伴隨著一個很強的約束:sysdba權限只能授予sys和internal這兩個用戶名。(其實internal不是一個實際用戶,而只是sys作為sysdba登錄時的一個別名。)
同時還要記得把sqlnet.ora文件中SQLNET.AUTHENTICATION _SERVICES設置為NONE。一般在Unix下它是默認設置。在NT下,若選擇典型安裝時,會使用OS認證,而自定義時會使用密碼文件認證方式。在安裝過程中會提示輸入INTERNAL密碼。這樣的話,就不用在手工創建密碼文件和設定INTERNAL的密碼了。
3. 用SQL*Plus 或SERVER MANAGER運行下面命令登錄進系統:CONNECT INTERNAL/密碼。
注意點:
1.在Oracle8.1.6安裝在WIN2000下創建數據庫時,常常會發生憑證檢索失敗的錯誤。這是由於Oracle不能應用OS認證的結果。一般可以通過修改sqlnet.ora中SQLNET.AUTHENTICATION _SERVICES為NONE來解決。這時,Oracle將采用密碼文件認證方式。
2.由於Oracle有幾個系統預建的用戶,所以最好在安裝完成以後馬上改變這些用戶的密碼。系統默認得密碼分別為:internal/Oracle , sys/change_on_install, system/manager.
3.當選擇密碼文件認證方式時,可以再向系統中加入其他超級用戶。比如用以下語句把用戶SCOTT加入超級用戶之中:(由具有sysdba權限的人執行)
SQL>GRANT SYSDBA TO SCOTT;這樣SCOTT用戶就具有了sysdba權限。注意,此時SCOTT用戶可以以兩種身份登錄:SCOTT , SYS.當SCOTT在登錄時沒有輸入AS SYSDBA時,SCOTT是作為普通用戶登錄的。而當登錄時輸入了AS SYSDBA時,此時SCOTT登錄進去的用戶實際上為sys。
4. 當前系統中的具有sysdba權限的用戶名可以從數據字典視圖v$pwfile_user中查詢得到:
SELECT * FROM V$PWFILE_USERS; 如上圖所示。
5. 系統中最大的具有sysdba權限的用戶數由創建密碼文件時的ENTRIES參數決定。當需要創建更多的具有sysdba權限的用戶時,就需要刪除原有的密碼文件,重新創建一個。這需要關閉數據庫,刪除密碼文件,重新創建一個新的密碼文件,在entrIEs中輸入足夠大的數目。再啟動Oracle。這時,所有原來北授權的超級用戶都不再存在,需要重新授權。所以在重新創建密碼文件前,先要查詢該視圖,記下用戶名,再在創建完密碼文件後重新授權。
6. Internal用戶密碼忘記的處理方法:
有兩種辦法:
1. ALTER USER SYS IDENTIFIED BY 新密碼;//這同時也改變了Internal的密碼,在Oracle8I中通過
2. 重新創建一個新的密碼文件,指定一個新的密碼。