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