一、創建用戶
二、用戶授權
三、角色機制
四、配置模版及資源限制
附錄
數據庫安全的作用是控制用戶是否能夠對數據庫及其中的對象執行操作。要連接到 Oracle 數據庫,就需要創建一個用戶帳戶,該用戶可以根據需要授予不同的操作權限。
一、創建用戶 CREATE/ALTER/DROP USER xxxx [幫助文檔]
CREATE USER prod4
IDENTIFIED BY ssss
DEFAULT TABLESPACE users
TEMPORARY TABLESPACE temp;
刪除一個用戶時,會刪除該用戶所擁有的模式對象。DROP USER prod4 CASCADE;
二、用戶授權 GRANT/REVOKE [幫助文檔]
權限(privilege)即執行特定類型 SQL 語句的權利,若無任何權限,新創建用戶將無法登陸 Oracle 數據庫。
1、系統權限
系統權限(system privilege)允許用戶執行某些數據庫操作。
GRANT CONNECT,RESOURCE,DBA TO prod4
[WITH ADMIN OPTION];
CONNECT,RESOURCE,DBA 三個預定義的角色封裝了大部分系統權限;
WITH ADMIN OPTION 選項使 被授權的用戶 也可以把該權限賦予其他用戶。(級聯授權,A->B、B->C)
ps.更多的系統權限,請參考幫助文檔 GRANT - Table 18-1 System Privileges。
2、模式對象權限
模式對象權限(schema object privilege)允許用戶對某一特定對象執行特定操作。要授予對象權限,用戶必須滿足以下條件之一:
● 用戶擁有指定對象;
● 或者用戶已經擁有 GRANT OPTION (級聯授權)的能力。
sys:
GRANT SELECT ON sys.test TO prod
[WITH GRANT OPTION];
prod:
SELECT * FROM sys.test;
ps.更多的模式對象權限,請參考幫助文檔 GRANT - Table 18-3 Object Privileges Available for Particular Objects。
三、角色機制 CREATE/ALTER/DROP ROLE xxx [幫助文檔]
角色(role)類似于操作系統中的用戶組,它封裝了多個權限。用戶可以通過角色繼承權限,從而簡化權限的管理與控制。推薦使用基于角色授權,通過角色控制用戶。
角色的使用注意:
● 角色不屬于任何模式(schema)。因此,創建角色的用戶可以被移除而不會對角色有所影響。
● 角色可以被授予其他角色。但是角色不能授予其自身,角色間也不能形成閉環。例如,當角色 B 已經被授予角色 A 時,角色 A 就不能再授予角色 B。
-- 創建角色 myrole 并賦予權限,然后將該角色賦予用戶 prod(繼承該角色) --
CREATE ROLE myrole;
GRANT SELECT ON sys.test TO myrole;
GRANT SELECT ON sys.test4 TO myrole;
GRANT myrole TO prod;
四、配置模版及資源限制 CREATE/ALTER/DROP PROFILE xxx
每個用戶都對應一套配置模版(profile),其中描述了用戶使用多種系統資源時的限制,具體包括:
● 用戶能夠建立的并發會話(concurrent session)數
● 用戶會話及 SQL 語句對 Oracle 進行一次調用時可用的 CPU 處理時間
● 用戶會話及 SQL 語句對 Oracle 進行一次調用時可用的邏輯 I/O(logical I/O)量
● 用戶會話的最大空閑時間(idle time)
● 用戶會話的最大連接時間(connect time)
● 密碼限制規則:
多次嘗試登錄均失敗時對帳戶加鎖
密碼過期時間(expiration period)及寬限期(grace period)
密碼重用(reuse)及復雜度(complexity)限制規則
附錄
1、模式(schema):模式是指用戶與其擁有對象的邏輯集合。
2、[轉] Oracle 查看用戶權限
ORACLE中數據字典視圖分為3大類,用前綴區別,分別為:USER,ALL 和 DBA,許多數據字典視圖包含相似的信息。
● USER_*:有關用戶所擁有的對象信息,即用戶自己創建的對象信息
● ALL_*:有關用戶可以訪問的對象的信息,即用戶自己創建的對象的信息加上其他用戶創建的對象但該用戶有權訪問的信息
● DBA_*:有關整個數據庫中對象的信息
(這里的*可以為TABLES, INDEXES, OBJECTS, USERS等)
1.查看所有用戶:
select * from dba_user;
select * from all_users;
select * from user_users;
2.查看用戶系統權限:
select * from dba_sys_privs;
select * from all_sys_privs;
select * from user_sys_privs;
3.查看用戶對象權限:
select * from dba_tab_privs;
select * from all_tab_privs;
select * from user_tab_privs;
4.查看所有角色:
select * from dba_roles;
5.查看用戶所擁有的角色:
select * from dba_role_privs;
select * from user_role_privs;
6.查看當前用戶的缺省表空間
select username,default_tablespace from user_users;
7.查看某個角色的具體權限,如grant connect,resource,create session,create view to TEST;
查看RESOURCE具有那些權限,用SELECT * FROM DBA_SYS_PRIVS WHERE GRANTEE='RESOURCE';
3、[轉] 對象權限
模式對象/權限 | ALTER | DELETE | EXECUTE | INDEX | INSERT | READ | REFERENCE | SELECT | UPDATE |
Directory | √ | ||||||||
function | √ | ||||||||
procedure | √ | ||||||||
package | √ | ||||||||
DB Object | √ | ||||||||
Libary | √ | ||||||||
Operation | √ | ||||||||
Sequence | √ | ||||||||
Table | √ | √ | √ | √ | √ | √ | √ | ||
Type | √ | ||||||||
View | √ | √ | √ | √ |
對象由不止一個權限,特殊權限ALL可以被授予或撤銷。如TABLE的ALL權限就包括:
SELECT,INSERT,UPDATE和DELETE,還有INDEX,ALTER,和REFERENCE。
4、[轉] Oracle 9i預定義的角色
角色名稱 | 說明 |
CONNECT |
數據庫連接角色,用于連接數據庫,具有創建簇、數據庫鏈接、序列、同義詞、表和視圖,以及修改會話的權利 |
DBA |
數據庫管理員角色,具有所有使用ADMIN選項創建的系統權限,可以將系統權限授予其他用戶或角色 |
DELETE_CATALOG_ROLE |
刪除目錄角色,可以刪除或重建數據字典 |
EXECUTE_CATALOG_ROLE |
執行目錄角色,能夠執行所有系統包 |
EXP_FULL_DATABASE |
能夠使用導出程序執行數據庫的完全和增量導出 |
IMP_FULL_DATABASE |
能夠使用導入程序執行數據庫的完全導入 |
RESOURCE |
可以創建簇、表、序列以及PL/SQL編程用方案對象,包括過程、程序包、觸發器等 |
SELECT_CATALOG_ROLE |
查詢數據字典表或視圖 |
參考文章:
Oracle Concepts 中文版 (10g R2) -- 第 20 章,數據庫安全