關(guān)于Oracle數(shù)據(jù)庫(kù)的安全管理
數(shù)據(jù)庫(kù)安全控制策略概述
安全性是評(píng)估一個(gè)數(shù)據(jù)庫(kù)的重要指標(biāo),Oracle 數(shù)據(jù)庫(kù)從 3 個(gè)層次上采取安全控制策略:
1、系統(tǒng)安全性。在系統(tǒng)級(jí)別上控制數(shù)據(jù)庫(kù)的存取和使用機(jī)制,包括有效的用戶名與口令、是否可以連接數(shù)據(jù)庫(kù)、用戶可以進(jìn)行哪些系統(tǒng)操作等;
2、數(shù)據(jù)安全性。在數(shù)據(jù)庫(kù)模式對(duì)象級(jí)別上控制數(shù)據(jù)庫(kù)的存取和使用機(jī)制。用戶要對(duì)某個(gè)模式對(duì)象進(jìn)行操作,必須要有操作的權(quán)限;
3、網(wǎng)絡(luò)安全性。Oracle 通過(guò)分發(fā) Wallet、數(shù)字證書(shū)、SSL 安全套接字和數(shù)據(jù)密鑰等辦法來(lái)保證數(shù)據(jù)庫(kù)的網(wǎng)絡(luò)傳輸安全性。
數(shù)據(jù)庫(kù)的安全可以從以下幾個(gè)方面進(jìn)行管理
1、用戶賬戶管理
2、用戶身份認(rèn)證方式管理。Oracle 提供多種級(jí)別的數(shù)據(jù)庫(kù)用戶身份認(rèn)證方式,包括系統(tǒng)、數(shù)據(jù)庫(kù)、網(wǎng)絡(luò) 3 種類型的身份認(rèn)證方式
3、權(quán)限和角色管理。通過(guò)管理權(quán)限和角色,限制用戶對(duì)數(shù)據(jù)庫(kù)的訪問(wèn)和操作
4、數(shù)據(jù)加密管理。通過(guò)數(shù)據(jù)加密來(lái)保證網(wǎng)絡(luò)傳輸?shù)陌踩?/p>
5、表空間設(shè)置和配額。通過(guò)設(shè)置用戶的存儲(chǔ)表空間、臨時(shí)表空間以及用戶在表空間上使用的配額,可以有效控制用戶對(duì)數(shù)據(jù)庫(kù)存儲(chǔ)空間的使用
6、用戶資源限制。通過(guò)概要文件設(shè)置,可以限制用戶對(duì)數(shù)據(jù)庫(kù)資源的使用
7、數(shù)據(jù)庫(kù)審計(jì)。監(jiān)視和記錄數(shù)據(jù)庫(kù)中的活動(dòng),包括審計(jì)所有的 SQL 語(yǔ)句、審計(jì) SQL 權(quán)限、審計(jì)模式對(duì)象以及審計(jì)網(wǎng)絡(luò)活動(dòng)等。
接下來(lái)將對(duì)用戶管理、權(quán)限和角色管理等方法一 一討論。
用戶管理
用戶是數(shù)據(jù)庫(kù)的使用者和管理者,Oracle 通過(guò)設(shè)置用戶及安全屬性來(lái)控制用戶對(duì)數(shù)據(jù)庫(kù)的訪問(wèn)。Oracle 的用戶分兩類,一類是創(chuàng)建數(shù)據(jù)庫(kù)時(shí)系統(tǒng)預(yù)定義的用戶,一類是根據(jù)應(yīng)用由 DBA 創(chuàng)建的用戶。
1、預(yù)定義用戶
在 oracle 創(chuàng)建時(shí)創(chuàng)建的用戶,我們稱為預(yù)定義用戶,預(yù)定義用戶根據(jù)作用不同分為 3 類:
1). 管理員用戶:包括 SYS,SYSTEM,SYSMAN,DBSNMP 等。SYS 是數(shù)據(jù)庫(kù)中擁有最高權(quán)限的管理員,可以啟動(dòng)、關(guān)閉、修改數(shù)據(jù)庫(kù),擁有數(shù)據(jù)字典;SYSTEM 是一個(gè)輔助的數(shù)據(jù)庫(kù)管理員,不能啟動(dòng)和關(guān)閉數(shù)據(jù)庫(kù),但是可以進(jìn)行一些管理工作,如創(chuàng)建和刪除用戶;SYSMAN 是 OEM 的管理員,可以對(duì) OEM 進(jìn)行配置和管理;DBSNMP 用戶是 OEM 代理,用來(lái)監(jiān)視數(shù)據(jù)庫(kù)的。以上這些用戶都不能刪除。
2). 示例方案用戶:在安裝 Oracle 或使用 odbc 創(chuàng)建數(shù)據(jù)庫(kù)時(shí),如果選擇了” 示例方案”,會(huì)創(chuàng)建一些用戶,在這些用戶對(duì)應(yīng)的 schema 中,有產(chǎn)生一些數(shù)據(jù)庫(kù)應(yīng)用案例。這些用戶包括:BI、HR、OE、PM、IX、SH 等。默認(rèn)情況下,這些用戶均為鎖定狀態(tài),口令過(guò)期。
3). 內(nèi)置用戶:有一些 Oracle 特性或 Oracle 組件需要自己?jiǎn)为?dú)的模式,因此為他們創(chuàng)建了一些內(nèi)置用戶。如 APEX_PUBLIC_USER、DIP 等。默認(rèn)情況下,這些用戶均為鎖定狀態(tài),口令過(guò)期。
此外還有 2 個(gè)特殊的用戶 SCOTT 和 PUBLIC,SCOTT 是一個(gè)用于測(cè)試網(wǎng)絡(luò)連接的用戶,PUBLIC 實(shí)際是一個(gè)用戶組,數(shù)據(jù)庫(kù)中任何用戶都屬于該用戶組,如果要為數(shù)據(jù)庫(kù)中的全部用戶授予某種權(quán)限,只需要對(duì) PUBLIC 授權(quán)即可。
2、用戶屬性
在創(chuàng)建用戶時(shí),必須使用安全屬性對(duì)用戶進(jìn)行限制,用戶的安全屬性主要包括:
1). 用戶名:在同一個(gè)數(shù)據(jù)庫(kù)中,用戶名是唯一的,并且不能與角色名相同;
2). 用戶身份認(rèn)證:Oracle 采用多種方式進(jìn)行身份認(rèn)證,如數(shù)據(jù)庫(kù)認(rèn)證、操作系統(tǒng)認(rèn)證、網(wǎng)絡(luò)認(rèn)證等;
3). 默認(rèn)表空間:用戶創(chuàng)建數(shù)據(jù)庫(kù)對(duì)象時(shí),如果沒(méi)有顯式指明存儲(chǔ)在哪個(gè)表空間中,系統(tǒng)會(huì)自動(dòng)將該數(shù)據(jù)庫(kù)對(duì)象存儲(chǔ)在當(dāng)前用戶的默認(rèn)表空間,在 Oracle 11g 中,如果沒(méi)有為用戶指定默認(rèn)表空間,則系統(tǒng)將數(shù)據(jù)庫(kù)的默認(rèn)表空間作為用戶的默認(rèn)表空間;
4). 臨時(shí)表空間:臨時(shí)表空間分配與默認(rèn)表空間相似,如果不顯式指定,系統(tǒng)會(huì)將數(shù)據(jù)庫(kù)的臨時(shí)表空間作為用戶的臨時(shí)表空間;
5). 表空間配額:表空間配額限制用戶在永久表空間中可以使用的存儲(chǔ)空間的大小,默認(rèn)新建用戶在表空間都沒(méi)有配額,可以為每個(gè)用戶在表空間上指定配額,也可授予用戶 UMLIMITED TABLESPACE 系統(tǒng)權(quán)限,使用戶在表空間的配額上不受限制。不需要分配臨時(shí)表空間的配額;
6). 概要文件:每個(gè)用戶必須具有一個(gè)概要文件,從會(huì)話級(jí)和調(diào)用級(jí)兩個(gè)層次限制用戶對(duì)數(shù)據(jù)庫(kù)系統(tǒng)資源的使用,同時(shí)設(shè)置用戶的口令管理策略。如果沒(méi)有為用戶指定概要文件,Oracle 將自動(dòng)為用戶指定 DEFAULT 概要文件;
7). 設(shè)置用戶的默認(rèn)角色
8). 賬戶狀態(tài):創(chuàng)建用戶時(shí),可以設(shè)定用戶的初始狀態(tài),包括口令是否過(guò)期和賬戶是否鎖定等。
可以通過(guò)數(shù)據(jù)字典 dba_users 查詢各個(gè)用戶的屬性(這里只截取了前面幾列):
3、創(chuàng)建用戶
創(chuàng)建用戶語(yǔ)法如下:
其中:
-user_name:新創(chuàng)建的用戶的名稱;-IDENTIFIED:指明用戶認(rèn)證方式;-BY password:采用數(shù)據(jù)庫(kù)身份認(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è)置用戶臨時(shí)表空間 / 表空間組;-QUOTA n K|M|UNLIMITED ON tablespace_name:指定用戶在特定表空間上的配額;-PROFILE profile_name:為用戶指定概要文件;-PASSWORD EXPIRE:指定用戶密碼到期,用戶首次登陸時(shí)系統(tǒng)會(huì)要求改密碼;-ACCOUNT LOCK|UNLOCK:指定用戶為鎖定 / 非鎖定狀態(tài),默認(rèn)不鎖定。
4、修改用戶
修改用戶采用 ALTER 實(shí)現(xiàn),語(yǔ)句與 CREATE USER 基本相同,唯一不同的是多了 DEFAULT ROLE 選項(xiàng),用于指定用戶的默認(rèn)角色:
其中:
-role_list:指定角色列表;-ALL:指定全部角色;-EXCEPT role_list:除了 role_list 指定的角色之外的角色;-NONE:不指定角色 .
5、鎖定與解鎖用戶
當(dāng)用戶被鎖定后,就不能登錄數(shù)據(jù)庫(kù)了,但是用戶的所有數(shù)據(jù)庫(kù)對(duì)象仍然可以繼續(xù)使用,當(dāng)用戶解鎖后,用戶就可以正常連接到數(shù)據(jù)庫(kù)。
在 Oracle 中,當(dāng)賬戶不再使用時(shí),就可以將其鎖定。通常,對(duì)于不用的賬戶,可以進(jìn)行鎖定,而不是刪除。
例子,鎖定與解鎖 scott 用戶:
6、刪除用戶
使用 drop user 刪除用戶,基本語(yǔ)法為:
如果用戶擁有數(shù)據(jù)庫(kù)對(duì)象,則必須使用 CASCADE 選項(xiàng),Oracle 先刪除用戶的數(shù)據(jù)庫(kù)對(duì)象,再刪除該用戶。
7、查詢用戶信息
在 Oracle 中,包含用戶信息的數(shù)據(jù)字典如下:
資源限制與口令管理
在數(shù)據(jù)庫(kù)中,對(duì)用戶的資源限制與用戶口令管理是通過(guò)數(shù)據(jù)庫(kù)概要文件(PROFILE)實(shí)現(xiàn)的,每個(gè)數(shù)據(jù)庫(kù)用戶必須具有一個(gè)概要文件,通常 DBA 將用戶分為幾種類型,為每種類型的用戶單獨(dú)創(chuàng)建一個(gè)概要文件。概要文件不是一個(gè)具體的文件,而是存儲(chǔ)在 SYS 模式的幾個(gè)表中的信息的集合。
1、資源限制
概要文件通過(guò)一系列資源管理參數(shù),從會(huì)話級(jí)和調(diào)用級(jí)兩個(gè)級(jí)別對(duì)用戶使用資源進(jìn)行限制。會(huì)話資源限制是對(duì)用戶在一個(gè)會(huì)話過(guò)程中所能使用的資源進(jìn)行限制,調(diào)用資源限制是對(duì)一條 SQL 語(yǔ)句在執(zhí)行過(guò)程中所能使用的資源總量進(jìn)行限制。資源限制的參數(shù)如下:
1).CPU 使用時(shí)間:在一個(gè)會(huì)話或調(diào)用過(guò)程中使用 CPU 的總量;
2). 邏輯讀:在一個(gè)會(huì)話或一個(gè)調(diào)用過(guò)程中讀取物理磁盤(pán)和邏輯內(nèi)存數(shù)據(jù)塊的總量;
3). 個(gè)用戶的并發(fā)會(huì)話數(shù);
4). 用戶連接數(shù)據(jù)庫(kù)的最長(zhǎng)時(shí)間;
下面是 scott 用戶的資源限制信息:
2、口令管理
oracle 概要文件用于數(shù)據(jù)庫(kù)口令管理的主要參數(shù)如下:
1.FAILED_LOGIN_ATTEMPTS:限制用戶失敗次數(shù),一旦達(dá)到失敗次數(shù),賬戶鎖定;
2.PASSWORD_LOCK_TIME:用戶登錄失敗后,賬戶鎖定的時(shí)間長(zhǎng)度;
3.PASSWORD_LIFE_TIME:用戶口令的有效天數(shù),達(dá)到設(shè)定天數(shù)后,口令過(guò)期,需要重新設(shè)置新的口令;
下圖是 scott 用戶的口令管理參數(shù)設(shè)置信息:
3、查詢概要文件信息
在 Oracle 11g 中,包含概要信息的數(shù)據(jù)字典如下:
權(quán)限管理
在 Oracle 數(shù)據(jù)庫(kù)中,用戶權(quán)限主要分為系統(tǒng)權(quán)限與對(duì)象權(quán)限兩類。系統(tǒng)權(quán)限是指在數(shù)據(jù)庫(kù)基本執(zhí)行某些操作的權(quán)限,或針對(duì)某一類對(duì)象進(jìn)行操作的權(quán)限,對(duì)象權(quán)限主要是針對(duì)數(shù)據(jù)庫(kù)對(duì)象執(zhí)行某些操作的權(quán)限,如對(duì)表的增刪(刪除數(shù)據(jù))查改等。
1、系統(tǒng)權(quán)限
(1)系統(tǒng)權(quán)限概述
在 Oracle 11g 中,一共有 200 多項(xiàng)系統(tǒng)權(quán)限,可通過(guò)數(shù)據(jù)字典 system_privilege_map 獲得所有的系統(tǒng)權(quán)限。
(2)系統(tǒng)權(quán)限的授予
授予用戶系統(tǒng)權(quán)限的 SQL 語(yǔ)法為:
其中:
-system_privilege_list:系統(tǒng)權(quán)限列表,以逗號(hào)分隔;-ALL PRIVILEGES:所有系統(tǒng)權(quán)限;-user_name_list:用戶列表,以逗號(hào)分隔;-role_list:角色列表,以逗號(hào)分隔;-PUBLIC:給數(shù)據(jù)庫(kù)中所有用戶授權(quán);-WITH ADMIN OPTION:允許系統(tǒng)權(quán)限接收者再將權(quán)限授予其它用戶
在授予用戶系統(tǒng)權(quán)限時(shí),需要注意:
1. 只有 DBA 用戶才有 alter database;
2. 應(yīng)用開(kāi)發(fā)者一般需要擁有 create table、create view、create index 等系統(tǒng)權(quán)限;
3. 普通用戶一般只需具有 create session 權(quán)限
4. 在授權(quán)用戶時(shí)帶有 with admin option 子句時(shí),用戶可以將獲得的權(quán)限再授予其它用戶。
(3)系統(tǒng)權(quán)限的回收
回收用戶系統(tǒng)權(quán)限的 SQL 語(yǔ)法如下:
回收用戶系統(tǒng)權(quán)限需要注意以下 3 點(diǎn):
1. 多個(gè)管理員授予同一個(gè)用戶相同的權(quán)限,其中一個(gè)管理員回收其授予用戶的系統(tǒng)權(quán)限,該用戶將不再具有該系統(tǒng)權(quán)限;
2. 為了回收用戶系統(tǒng)權(quán)限的傳遞性(授權(quán)時(shí)使用了 with admin option),須先回收該系統(tǒng)權(quán)限,在重新授予用戶該權(quán)限‘
3.’如果一個(gè)用戶的權(quán)限具有傳遞性,并且給其它用戶授權(quán),那么該用戶系統(tǒng)權(quán)限被收回后,其它用戶的系統(tǒng)權(quán)限并不會(huì)受影響;
2、對(duì)象權(quán)限
對(duì)象權(quán)限是指對(duì)某個(gè)特定模式對(duì)象的操作權(quán)限。數(shù)據(jù)庫(kù)模式對(duì)象所有者擁有該對(duì)象的所有對(duì)象權(quán)限,對(duì)象權(quán)限的管理實(shí)際上是對(duì)象所有者對(duì)其他用戶操作該對(duì)象的權(quán)限管理。在 Oracle 數(shù)據(jù)庫(kù)中,不同類型的對(duì)象具有不同的對(duì)象權(quán)限,而有的對(duì)象并沒(méi)有對(duì)象權(quán)限,只能通過(guò)系統(tǒng)權(quán)限進(jìn)行管理,如簇、索引、觸發(fā)器、數(shù)據(jù)庫(kù)鏈接等。
(1)對(duì)象權(quán)限的授予
在 Oracle 數(shù)據(jù)庫(kù)中,用戶可以直接訪問(wèn)同名 Schema 下的數(shù)據(jù)庫(kù)對(duì)象,如果需要訪問(wèn)其它 Schema 下的數(shù)據(jù)庫(kù)對(duì)象,就需要具有相應(yīng)的對(duì)象權(quán)限。對(duì)象權(quán)限授予的 SQL 語(yǔ)法為:
其中:
-object_privilege_list:對(duì)象權(quán)限列表,以逗號(hào)分隔;
-ALL PRIVILEGES:全部權(quán)限;
-[schema.]object:待授權(quán)的對(duì)象;
-user_name_list:用戶列表,以逗號(hào)分隔;
-role_list:角色列表,以逗號(hào)分隔;
-PUBLIC:所有用戶
(2)對(duì)象權(quán)限的回收
回收對(duì)象權(quán)限的 SQL 語(yǔ)法為:
其中:
-CASCADE CONSTRAINTS:當(dāng)回收 REFERENCE 對(duì)象權(quán)限或回收 ALL PRIVILEGES,刪除利用 REFERENCES 對(duì)象權(quán)限創(chuàng)建的外鍵約束;
-FORCE:當(dāng)回收在表中被使用的用戶自定義對(duì)象類型的 EXECUTE 權(quán)限時(shí),必須指定 FORCE 關(guān)鍵字。
回收對(duì)象權(quán)限需要注意以下 3 點(diǎn):
1. 多個(gè)管理員授予同一個(gè)用戶相同的對(duì)象權(quán)限,一個(gè)管理員將該對(duì)象權(quán)限回收后,該用戶不再具有該對(duì)象權(quán)限;
2. 為了回收用戶對(duì)象權(quán)限的傳遞性,須先回收該對(duì)象權(quán)限,再重新賦予給用戶該對(duì)象權(quán)限;
3. 如果一個(gè)用戶的對(duì)象權(quán)限具有傳遞性,并且已經(jīng)給其它用戶授權(quán),那么該用戶的對(duì)象權(quán)限被回收后,其它用戶的對(duì)象權(quán)限也將被收回。(值得注意的是,這一條與系統(tǒng)權(quán)限傳遞性的回收不相同)。
3、查詢權(quán)限信息
角色管理
假如我們直接給每一個(gè)用戶賦予權(quán)限,這將是一個(gè)巨大又麻煩的工作,同時(shí)也不方便 DBA 進(jìn)行管理。通過(guò)采用角色,使得:
1、權(quán)限管理更方便。將角色賦予多個(gè)用戶,實(shí)現(xiàn)不同用戶相同的授權(quán)。如果要修改這些用戶的權(quán)限,只需修改角色即可;
2、角色的權(quán)限可以激活和關(guān)閉。使得 DBA 可以方便的選擇是否賦予用戶某個(gè)角色;
3、提高性能,使用角色減少了數(shù)據(jù)字典中授權(quán)記錄的數(shù)量,通過(guò)關(guān)閉角色使得在語(yǔ)句執(zhí)行過(guò)程中減少了權(quán)限的確認(rèn)。
圖. 用戶、角色、權(quán)限關(guān)系圖
由于個(gè)人接觸的數(shù)據(jù)庫(kù)用戶較少,沒(méi)有單獨(dú)創(chuàng)建角色,故角色的創(chuàng)建、修改、刪除、激活、禁用、授予、回收不再一一講述,只要知道如何查詢角色信息即可。
在 Oracle 中,包含角色的數(shù)據(jù)字典如下: