1.數(shù)據(jù)庫安全控制策略概述
安全性是評估一個數(shù)據(jù)庫的重要指標(biāo),Oracle數(shù)據(jù)庫從3個層次上采取安全控制策略:
系統(tǒng)安全性。在系統(tǒng)級別上控制數(shù)據(jù)庫的存取和使用機(jī)制,包括有效的用戶名與口令、是否可以連接數(shù)據(jù)庫、用戶可以進(jìn)行哪些系統(tǒng)操作等;
數(shù)據(jù)安全性。在數(shù)據(jù)庫模式對象級別上控制數(shù)據(jù)庫的存取和使用機(jī)制。用戶要對某個模式對象進(jìn)行操作,必須要有操作的權(quán)限;
網(wǎng)絡(luò)安全性。Oracle通過分發(fā)Wallet、數(shù)字證書、SSL安全套接字和數(shù)據(jù)密鑰等辦法來保證數(shù)據(jù)庫的網(wǎng)絡(luò)傳輸安全性。
數(shù)據(jù)庫的安全可以從以下幾個方面進(jìn)行管理:
用戶賬戶管理
用戶身份認(rèn)證方式管理。Oracle提供多種級別的數(shù)據(jù)庫用戶身份認(rèn)證方式,包括系統(tǒng)、數(shù)據(jù)庫、網(wǎng)絡(luò)3種類型的身份認(rèn)證方式
權(quán)限和角色管理。通過管理權(quán)限和角色,限制用戶對數(shù)據(jù)庫的訪問和操作
數(shù)據(jù)加密管理。通過數(shù)據(jù)加密來保證網(wǎng)絡(luò)傳輸?shù)陌踩?/p>
表空間設(shè)置和配額。通過設(shè)置用戶的存儲表空間、臨時表空間以及用戶在表空間上使用的配額,可以有效控制用戶對數(shù)據(jù)庫存儲空間的使用
用戶資源限制。通過概要文件設(shè)置,可以限制用戶對數(shù)據(jù)庫資源的使用
數(shù)據(jù)庫審計。監(jiān)視和記錄數(shù)據(jù)庫中的活動,包括審計所有的SQL語句、審計SQL權(quán)限、審計模式對象以及審計網(wǎng)絡(luò)活動等。
接下來將對數(shù)據(jù)庫安全管理方法進(jìn)行一 一討論。
2.用戶管理
用戶是數(shù)據(jù)庫的使用者和管理者,Oracle通過設(shè)置用戶及安全屬性來控制用戶對數(shù)據(jù)庫的訪問。Oracle的用戶分兩類,一類是創(chuàng)建數(shù)據(jù)庫時系統(tǒng)預(yù)定義的用戶,一類是根據(jù)應(yīng)用由DBA創(chuàng)建的用戶。
2.1 預(yù)定義用戶
在oracle創(chuàng)建時創(chuàng)建的用戶,我們稱為預(yù)定義用戶,預(yù)定義用戶根據(jù)作用不同分為3類:
管理員用戶:包括SYS,SYSTEM,SYSMAN,DBSNMP等。SYS是數(shù)據(jù)庫中擁有最高權(quán)限的管理員,可以啟動、關(guān)閉、修改數(shù)據(jù)庫,擁有數(shù)據(jù)字典;SYSTEM是一個輔助的數(shù)據(jù)庫管理員,不能啟動和關(guān)閉數(shù)據(jù)庫,但是可以進(jìn)行一些管理工作,如創(chuàng)建和刪除用戶;SYSMAN是OEM的管理員,可以對OEM進(jìn)行配置和管理;DBSNMP用戶是OEM代理,用來監(jiān)視數(shù)據(jù)庫的。以上這些用戶都不能刪除。
示例方案用戶:在安裝Oracle或使用odbc創(chuàng)建數(shù)據(jù)庫時,如果選擇了”示例方案”,會創(chuàng)建一些用戶,在這些用戶對應(yīng)的schema中,有產(chǎn)生一些數(shù)據(jù)庫應(yīng)用案例。這些用戶包括:BI、HR、OE、PM、IX、SH等。默認(rèn)情況下,這些用戶均為鎖定狀態(tài),口令過期。
內(nèi)置用戶:有一些Oracle特性或Oracle組件需要自己單獨(dú)的模式,因此為他們創(chuàng)建了一些內(nèi)置用戶。如APEX_PUBLIC_USER、DIP等。默認(rèn)情況下,這些用戶均為鎖定狀態(tài),口令過期。
此外還有2個特殊的用戶SCOTT和PUBLIC,SCOTT是一個用于測試網(wǎng)絡(luò)連接的用戶,PUBLIC實(shí)際是一個用戶組,數(shù)據(jù)庫中任何用戶都屬于該用戶組,如果要為數(shù)據(jù)庫中的全部用戶授予某種權(quán)限,只需要對PUBLIC授權(quán)即可。
2.2 用戶屬性
在創(chuàng)建用戶時,必須使用安全屬性對用戶進(jìn)行限制,用戶的安全屬性主要包括:
用戶名:在同一個數(shù)據(jù)庫中,用戶名是唯一的,并且不能與角色名相同;
用戶身份認(rèn)證:Oracle采用多種方式進(jìn)行身份認(rèn)證,如數(shù)據(jù)庫認(rèn)證、操作系統(tǒng)認(rèn)證、網(wǎng)絡(luò)認(rèn)證等;
默認(rèn)表空間:用戶創(chuàng)建數(shù)據(jù)庫對象時,如果沒有顯式指明存儲在哪個表空間中,系統(tǒng)會自動將該數(shù)據(jù)庫對象存儲在當(dāng)前用戶的默認(rèn)表空間,在Oracle 11g中,如果沒有為用戶指定默認(rèn)表空間,則系統(tǒng)將數(shù)據(jù)庫的默認(rèn)表空間作為用戶的默認(rèn)表空間;
臨時表空間:臨時表空間分配與默認(rèn)表空間相似,如果不顯式指定,系統(tǒng)會將數(shù)據(jù)庫的臨時表空間作為用戶的臨時表空間;
表空間配額:表空間配額限制用戶在永久表空間中可以使用的存儲空間的大小,默認(rèn)新建用戶在表空間都沒有配額,可以為每個用戶在表空間上指定配額,也可授予用戶UMLIMITED TABLESPACE系統(tǒng)權(quán)限,使用戶在表空間的配額上不受限制。不需要分配臨時表空間的配額;
概要文件:每個用戶必須具有一個概要文件,從會話級和調(diào)用級兩個層次限制用戶對數(shù)據(jù)庫系統(tǒng)資源的使用,同時設(shè)置用戶的口令管理策略。如果沒有為用戶指定概要文件,Oracle將自動為用戶指定DEFAULT概要文件;
設(shè)置用戶的默認(rèn)角色
賬戶狀態(tài):創(chuàng)建用戶時,可以設(shè)定用戶的初始狀態(tài),包括口令是否過期和賬戶是否鎖定等。
可以通過數(shù)據(jù)字典dba_users查詢各個用戶的屬性(這里只截取了前面幾列):
SQL> select * from dba_users; USERNAME USER_ID PASSWORD ACCOUNT_STATUS LOCK_DATE EXPIRY_DATE DEFAULT_TABLESPACE TEMPORARY_TABLESPACE CREATED ------------ ---------- ---------- ----------------- ----------- ----------- ------------------- ---------------------- ----------- SCOTT 84 OPEN 2017/8/20 0 USERS TEMP 2009/8/15 0 LIJIAMAN 91 OPEN 2017/10/31 USERS TEMP 2017/2/25 1 ORACLE_OCM 21 EXPIRED & LOCKED 2009/8/15 0 2009/8/15 0 USERS TEMP 2009/8/15 0 XS$NULL 2147483638 EXPIRED & LOCKED 2009/8/15 0 2009/8/15 0 USERS TEMP 2009/8/15 0
2.3 創(chuàng)建用戶
創(chuàng)建用戶語法如下:
CREATE USER user_name IDENTIFIED[BY password] |[EXTERNALLY [AS ‘certificate_DN’ | ‘kerberos_principal_name'] ] |[GLOBALLY [AS 'directory_DN'] ][DEFAULT TABLESPACE tablespace_name][TEMPORARY TABLESPACE tablespace_name | tablespace_group_name][QUOTA n K | M | UNLIMITED ON tablespace_name ][PROFILE profile_name][PASSWORD EXPIRE][ACCOUNT LOCK | UNLOCK];
其中:
-user_name:新創(chuàng)建的用戶的名稱;
-IDENTIFIED:指明用戶認(rèn)證方式;
-BY password:采用數(shù)據(jù)庫身份認(rèn)證,password為用戶密碼;
-EXTERNALLY:指定用戶采用外部認(rèn)證,其中:①AS ‘certificate_DN’指定用戶采用ssl外部身份認(rèn)證;②AS ‘kerberos_principal_name’指定用戶采用kerberos外部身份認(rèn)證;
-GLOBALLY AS ‘directory_DN’:指定用戶采用全局身份認(rèn)證;
-DEFAULT TABLESPACE tablespace_name:設(shè)置用戶的默認(rèn)表空間;
-TEMPORARY TABLESPACE tablespace_name | tablespace_group_name:設(shè)置用戶臨時表空間/表空間組;
-QUOTA n K|M|UNLIMITED ON tablespace_name:指定用戶在特定表空間上的配額;
-PROFILE profile_name:為用戶指定概要文件;
-PASSWORD EXPIRE:指定用戶密碼到期,用戶首次登陸時系統(tǒng)會要求改密碼;
-ACCOUNT LOCK|UNLOCK:指定用戶為鎖定/非鎖定狀態(tài),默認(rèn)不鎖定。
2.4 修改用戶
修改用戶采用ALTER實(shí)現(xiàn),語句與CREATE USER基本相同,唯一不同的是多了DEFAULT ROLE選項,用于指定用戶的默認(rèn)角色:
ALTER USER user_name ...[DEFAULT ROLE [role_list] | [ALL [EXCEPT role_list]] | NONE ] ... ;
其中:
-role_list:指定角色列表;
-ALL:指定全部角色;
-EXCEPT role_list:除了role_list指定的角色之外的角色;
-NONE:不指定角色 .
2.5 鎖定與解鎖用戶
當(dāng)用戶被鎖定后,就不能登錄數(shù)據(jù)庫了,但是用戶的所有數(shù)據(jù)庫對象仍然可以繼續(xù)使用,當(dāng)用戶解鎖后,用戶就可以正常連接到數(shù)據(jù)庫。
在Oracle中,當(dāng)賬戶不再使用時,就可以將其鎖定。通常,對于不用的賬戶,可以進(jìn)行鎖定,而不是刪除。
例子,鎖定與解鎖scott用戶:
/*使用SYS鎖定SCOTT賬戶,鎖定之后無法在登錄*/SQL> show user;USER 為 "SYS" SQL> ALTER USER SCOTT ACCOUNT LOCK; 用戶已更改。 SQL> conn scott/tiger ERROR: ORA-28000: the account is locked 警告: 您不再連接到 ORACLE。/*解鎖SCOTT賬戶,解鎖后登錄到數(shù)據(jù)庫*/SQL> conn sys as sysdba 輸入口令: 已連接。 SQL> ALTER USER SCOTT ACCOUNT UNLOCK; 用戶已更改。 SQL> conn scott/tiger; 已連接。
2.6 刪除用戶
使用drop user刪除用戶,基本語法為:
DROP USER user_name [CASCADE];
如果用戶擁有數(shù)據(jù)庫對象,則必須使用CASCADE選項,Oracle先刪除用戶的數(shù)據(jù)庫對象,再刪除該用戶。
2.7 查詢用戶信息
在Oracle中,包含用戶信息的數(shù)據(jù)字典如下:
視圖名稱 | 說明 |
DBA_USERS | 包含數(shù)據(jù)庫的所有用戶的詳細(xì)信息(15項) |
ALL_USERS | 包含數(shù)據(jù)庫所有用戶的用戶名、用戶ID和用戶創(chuàng)建時間(3項) |
USER_USERS | 包含當(dāng)前用戶的詳細(xì)信息(10項) |
DBA_TS_QUOTAS | 包含所有用戶的表空間配額信息 |
USER_TS_QUOTAS | 包含當(dāng)前用戶的表空間配額信息 |
V$SESSION | 包含用戶會話信息 |
V$SESSTAT | 包含用戶會話統(tǒng)計信息 |
3.資源限制與口令管理
在數(shù)據(jù)庫中,對用戶的資源限制與用戶口令管理是通過數(shù)據(jù)庫概要文件(PROFILE)實(shí)現(xiàn)的,每個數(shù)據(jù)庫用戶必須具有一個概要文件,通常DBA將用戶分為幾種類型,為每種類型的用戶單獨(dú)創(chuàng)建一個概要文件。概要文件不是一個具體的文件,而是存儲在SYS模式的幾個表中的信息的集合。
3.1 資源限制
概要文件通過一系列資源管理參數(shù),從會話級和調(diào)用級兩個級別對用戶使用資源進(jìn)行限制。會話資源限制是對用戶在一個會話過程中所能使用的資源進(jìn)行限制,調(diào)用資源限制是對一條SQL語句在執(zhí)行過程中所能使用的資源總量進(jìn)行限制。資源限制的參數(shù)如下:
CPU使用時間:在一個會話或調(diào)用過程中使用CPU的總量;
邏輯讀:在一個會話或一個調(diào)用過程中讀取物理磁盤和邏輯內(nèi)存數(shù)據(jù)塊的總量;
每個用戶的并發(fā)會話數(shù);
用戶連接數(shù)據(jù)庫的最長時間;
等
下面是scott用戶的資源限制信息:
3.2 口令管理
oracle概要文件用于數(shù)據(jù)庫口令管理的主要參數(shù)如下:
FAILED_LOGIN_ATTEMPTS:限制用戶失敗次數(shù),一旦達(dá)到失敗次數(shù),賬戶鎖定;
PASSWORD_LOCK_TIME:用戶登錄失敗后,賬戶鎖定的時間長度;
PASSWORD_LIFE_TIME:用戶口令的有效天數(shù),達(dá)到設(shè)定天數(shù)后,口令過期,需要重新設(shè)置新的口令;
等
下圖是scott用戶的口令管理參數(shù)設(shè)置信息:
3.3 查詢概要文件信息
在Oracle 11g中,包含概要信息的數(shù)據(jù)字典如下:
視圖名稱 | 說明 |
DBA_USERS | 包含數(shù)據(jù)庫中所有用戶屬性信息,包括使用的概要文件(profile) |
DBA_PROFILES | 包含數(shù)據(jù)庫中所有的概要文件及其資源設(shè)置、口令管理設(shè)置等信息 |
USER_PASSWORD_LIMITS | 包含當(dāng)前用戶的概要文件的口令限制參數(shù)設(shè)置信息 |
USER_RESOURCE_LIMITS | 包含當(dāng)前用戶的概要文件的資源限制參數(shù)設(shè)置信息 |
RESOURCE_COST | 每個會話使用資源的統(tǒng)計信息 |
4.權(quán)限管理
在Oracle數(shù)據(jù)庫中,用戶權(quán)限主要分為系統(tǒng)權(quán)限與對象權(quán)限兩類。系統(tǒng)權(quán)限是指在數(shù)據(jù)庫基本執(zhí)行某些操作的權(quán)限,或針對某一類對象進(jìn)行操作的權(quán)限,對象權(quán)限主要是針對數(shù)據(jù)庫對象執(zhí)行某些操作的權(quán)限,如對表的增刪(刪除數(shù)據(jù))查改等。
4.1 系統(tǒng)權(quán)限
(4.1.1)系統(tǒng)權(quán)限概述
在Oracle 11g中,一共有200多項系統(tǒng)權(quán)限,可通過數(shù)據(jù)字典system_privilege_map獲得所有的系統(tǒng)權(quán)限。
SQL> select * from system_privilege_map; PRIVILEGE NAME PROPERTY---------- ---------------------------------------- ---------- -3 ALTER SYSTEM 0 -4 AUDIT SYSTEM 0 -5 CREATE SESSION 0 -6 ALTER SESSION 0 ... ... ...208 rows selected
(4.1.2)系統(tǒng)權(quán)限的授予
授予用戶系統(tǒng)權(quán)限的SQL語法為:
GRANT system_privilege_list | [ALL PRIVILEGES]TO user_name_list | role_list | PUBLIC [WITH ADMIN OPTION];
其中:
-system_privilege_list:系統(tǒng)權(quán)限列表,以逗號分隔;
-ALL PRIVILEGES:所有系統(tǒng)權(quán)限;
-user_name_list:用戶列表,以逗號分隔;
-role_list:角色列表,以逗號分隔;
-PUBLIC:給數(shù)據(jù)庫中所有用戶授權(quán);
-WITH ADMIN OPTION:允許系統(tǒng)權(quán)限接收者再將權(quán)限授予其它用戶
在授予用戶系統(tǒng)權(quán)限時,需要注意:
只有DBA用戶才有alter database;
應(yīng)用開發(fā)者一般需要擁有create table、create view、create index等系統(tǒng)權(quán)限;
普通用戶一般只需具有create session權(quán)限
在授權(quán)用戶時帶有with admin option子句時,用戶可以將獲得的權(quán)限再授予其它用戶。
(4.1.3)系統(tǒng)權(quán)限的回收
回收用戶系統(tǒng)權(quán)限的SQL語法如下:
REVOKE system_privilege_list | [ALL PRIVILEGES]FROM user_name_list | role_list | PUBLIC
回收用戶系統(tǒng)權(quán)限需要注意以下3點(diǎn):
多個管理員授予同一個用戶相同的權(quán)限,其中一個管理員回收其授予用戶的系統(tǒng)權(quán)限,該用戶將不再具有該系統(tǒng)權(quán)限;
為了回收用戶系統(tǒng)權(quán)限的傳遞性(授權(quán)時使用了with admin option),須先回收該系統(tǒng)權(quán)限,在重新授予用戶該權(quán)限;
如果一個用戶的權(quán)限具有傳遞性,并且給其它用戶授權(quán),那么該用戶系統(tǒng)權(quán)限被收回后,其它用戶的系統(tǒng)權(quán)限并不會受影響;
4.2 對象權(quán)限
對象權(quán)限是指對某個特定模式對象的操作權(quán)限。數(shù)據(jù)庫模式對象所有者擁有該對象的所有對象權(quán)限,對象權(quán)限的管理實(shí)際上是對象所有者對其他用戶操作該對象的權(quán)限管理。在Oracle數(shù)據(jù)庫中,不同類型的對象具有不同的對象權(quán)限,而有的對象并沒有對象權(quán)限,只能通過系統(tǒng)權(quán)限進(jìn)行管理,如簇、索引、觸發(fā)器、數(shù)據(jù)庫鏈接等。
(1)對象權(quán)限的授予
在Oracle數(shù)據(jù)庫中,用戶可以直接訪問同名Schema下的數(shù)據(jù)庫對象,如果需要訪問其它Schema下的數(shù)據(jù)庫對象,就需要具有相應(yīng)的對象權(quán)限。對象權(quán)限授予的SQL語法為:
GRANT object_privilege_list | ALL [PRIVILEGES] [ (column,...) ] ON [schema.]object TO user_name_list | role_list | PUBLIC [WITH GRANT OPTION];
其中:
-object_privilege_list:對象權(quán)限列表,以逗號分隔;
-ALL PRIVILEGES:全部權(quán)限;
-[schema.]object:待授權(quán)的對象;
-user_name_list:用戶列表,以逗號分隔;
-role_list:角色列表,以逗號分隔;
-PUBLIC:所有用戶
(2)對象權(quán)限的回收
回收對象權(quán)限的SQL語法為:
REVOKE object_privilege_list | ALL [PRIVILEGES]ON [schema.]objectFROM user_name_list | role_list | PUBLIC [CASCADE CONSTRAINTS] | [FORCE];
其中:
-CASCADE CONSTRAINTS:當(dāng)回收REFERENCE對象權(quán)限或回收ALL PRIVILEGES,刪除利用REFERENCES對象權(quán)限創(chuàng)建的外鍵約束;
-FORCE:當(dāng)回收在表中被使用的用戶自定義對象類型的EXECUTE權(quán)限時,必須指定FORCE關(guān)鍵字。
回收對象權(quán)限需要注意以下3點(diǎn):
多個管理員授予同一個用戶相同的對象權(quán)限,一個管理員將該對象權(quán)限回收后,該用戶不再具有該對象權(quán)限;
為了回收用戶對象權(quán)限的傳遞性,須先回收該對象權(quán)限,再重新賦予給用戶該對象權(quán)限;
如果一個用戶的對象權(quán)限具有傳遞性,并且已經(jīng)給其它用戶授權(quán),那么該用戶的對象權(quán)限被回收后,其它用戶的對象權(quán)限也將被收回。(值得注意的是,這一條與系統(tǒng)權(quán)限傳遞性的回收不相同)。
4.3 查詢權(quán)限信息
視圖名稱 | 說明 |
DBA_SYS_PRIVS | 包含所有用戶和角色獲得的系統(tǒng)權(quán)限信息 |
ALL_SYS_PRIVS | 包含當(dāng)前用戶可見的全部用戶和角色獲得的系統(tǒng)權(quán)限信息 |
USER_SYS_PRIVS | 當(dāng)前用戶獲得的系統(tǒng)權(quán)限信息 |
DBA_TAB_PRIVS | 包含所有用戶和角色獲得的對象權(quán)限信息 |
ALL_TAB_PRIVS | 包含當(dāng)前用戶可見的全部用戶和角色獲得的對象權(quán)限信息 |
USER_TAB_PRIVS | 當(dāng)前用戶獲得的對象權(quán)限信息 |
DBA_COL_PRIVS | 包含數(shù)據(jù)庫中所有列對象的權(quán)限信息 |
ALL_COL_PRIVS | 包含當(dāng)前用戶可見的所有列對象的權(quán)限信息 |
USER_COL_PRIVS | 當(dāng)前用戶擁有的或授予其它用戶的所有列對象的權(quán)限信息 |
SESSION_PRIVS | 當(dāng)前會話可以使用的所有權(quán)限信息 |
5.角色管理
假如我們直接給每一個用戶賦予權(quán)限,這將是一個巨大又麻煩的工作,同時也不方便DBA進(jìn)行管理。通過采用角色,使得:
權(quán)限管理更方便。將角色賦予多個用戶,實(shí)現(xiàn)不同用戶相同的授權(quán)。如果要修改這些用戶的權(quán)限,只需修改角色即可;
角色的權(quán)限可以激活和關(guān)閉。使得DBA可以方便的選擇是否賦予用戶某個角色;
提高性能,使用角色減少了數(shù)據(jù)字典中授權(quán)記錄的數(shù)量,通過關(guān)閉角色使得在語句執(zhí)行過程中減少了權(quán)限的確認(rèn)。
圖. 用戶、角色、權(quán)限關(guān)系圖
由于個人接觸的數(shù)據(jù)庫用戶較少,沒有單獨(dú)創(chuàng)建角色,故角色的創(chuàng)建、修改、刪除、激活、禁用、授予、回收不再一一講述,只要知道如何查詢角色信息即可。
在Oracle中,包含角色的數(shù)據(jù)字典如下:
視圖名稱 | 說明 |
DBA_ROLE_PRIVS | 包含數(shù)據(jù)庫中所有用戶擁有的角色信息 |
USER_ROLE_PRIVS | 包含當(dāng)前用戶擁有的角色信息 |
ROLE_ROLE_PRIVS | 角色擁有的角色信息 |
ROLE_SYS_PRIVS | 角色擁有的系統(tǒng)權(quán)限信息 |
ROLE_TAB_PRIVS | 角色擁有的對象權(quán)限信息 |
DBA_ROLES | 當(dāng)前數(shù)據(jù)庫中所有角色及其描述信息 |
SESSION_ROLES | 當(dāng)前會話所具有的角色信息 |
6.審計
審計相關(guān)見另外2篇文章:
2.Audit(二)--清理Audit數(shù)據(jù)
http://www.cnblogs.com/lijiaman/p/6915694.html