資料庫的安全性主要包括兩個方面的含義:一方面是防止非法使用者對資料庫的通路,未授權的使用者不能登入資料庫;另一方面是每個資料庫使用者都有不同的操作權限,隻能進行自己權限範圍内的操作。Oracle資料庫的安全可以分為兩類:
1)系統安全性
系統安全性是指在系統級控制資料庫的存取和使用的機制,包括有效的使用者名與密碼的組合、使用者是否被授權可連接配接資料庫、使用者建立資料庫對象時可以使用的磁盤空間大小、使用者的資源限制、是否啟動了資料庫審計功能,以及使用者可進行哪些系統操作等。
2)資料安全性
資料安全性是指在對象級控制資料庫的存取和使用機制,包括使用者可存取的模式對象和在該對象上允許進行的操作等。
Oracle資料安全控制機制
使用者管理:合法身份的使用者才能通路資料庫
權限管理:使用者登入後隻能進行權限範圍内的操作
角色管理:友善實作使用者權限的授予與回收
表空間設定和配額:控制使用者對資料庫存儲空間的使用
使用者資源限制:通過概要檔案,限制使用者對資料庫資源的使用
資料庫審計:監視和記錄使用者在資料庫中的活動
1、 使用者管理
(1)概述:
1)Oracle資料庫初始使用者,密碼公開,處于封鎖狀态,需要解鎖并重設密碼:
SYS:是資料庫中具有最高權限的資料庫管理者,可以啟動、修改和關閉資料庫,擁有資料字典;
SYSTEM:是一個輔助的資料庫管理者,不能啟動和關閉資料庫,但可以進行其他一些管理工作,如建立使用者、删除使用者等。
SCOTT:是一個用于測試網絡連接配接的使用者,其密碼為TIGER。
PUBLIC:實質上是一個使用者組,資料庫中任何一個使用者都屬于該組成員。要為資料庫中每個使用者都授予某個權限,隻需把權限授予PUBLIC就可以了。
2)使用者的安全屬性
為防止非授權使用者對資料庫進行操作,在建立資料庫時,必須用安全屬性對使用者進行限制。安全屬性包括:使用者身份認證方式、預設表空間、臨時表空間、表空間配額 、概要檔案 、賬戶狀态。
① 使用者身份認證方式(三種)
資料庫身份認證:資料庫使用者密碼以加密方式儲存在資料庫内部,當使用者連接配接資料庫時必須輸入使用者名和密碼,通過資料庫認證後才可以登入資料庫。
外部身份認證:當使用外部身份認證時,使用者的賬戶由Oracle資料庫管理,但密碼管理和身份驗證由外部服務完成。外部服務可以是作業系統或網絡服務。當使用者試圖建立與資料庫的連接配接時,資料庫不會要求使用者輸入使用者名和密碼,而從外部服務中擷取目前使用者的登入資訊。
全局身份認證:當使用者試圖建立與資料庫連接配接時,Oracle使用網絡中的安全管理伺服器(OracleEnterprise Security Manager)對使用者進行身份認證。Oracle的安全管理伺服器可以提供全局範圍内管理資料庫使用者的功能。
② 預設表空間
當使用者在建立資料庫對象時,如果沒有顯式地指明該對象在哪個表空間中存儲,系統會自動将該資料庫對象存儲在目前使用者的預設表空間中。如果沒有為使用者指定預設表空間,則系統将資料庫的預設表空間作為使用者的預設表空間。
③ 臨時表空間
當使用者進行排序、彙總和執行連接配接、分組等操作時,系統首先使用記憶體中的排序區SORT_AREA_SIZE,如果該區域記憶體不夠,則自動使用使用者的臨時表空間。在Oracle10g中,如果沒有為使用者指定臨時表空間,則系統将資料庫的預設臨時表空間作為使用者的臨時表空間。
④ 表空間配額
表空間配額限制使用者在永久表空間中可以使用的存儲空間的大小,預設情況下,建立使用者在任何表空間中都沒有任何配額。使用者在臨時表空間中不需要配額。
⑤ 概要檔案
每個使用者都必須有一個概要檔案,從會話級和調用級兩個層次限制使用者對資料庫系統資源的使用,同時設定使用者的密碼管理政策。如果沒有為使用者指定概要檔案,Oracle将為使用者自動指定DEFAULT概要檔案。
⑥ 賬戶狀态
在建立使用者的同時,可以設定使用者的初始狀态,包括使用者密碼是否過期以及賬戶是否鎖定等。Oracle允許任何時候對帳戶進行鎖定或解鎖。鎖定賬戶後,使用者就不能與Oracle資料庫建立連接配接,必須對賬戶解鎖後才允許使用者通路資料庫。
(2)建立使用者
基本文法
CREATE USER user_name
IDENTIFIED [BY password|EXTERNALLY|GLOBALLYAS 'external_name']
[DEFAULT TABLESPACE tablespace_name]
[TEMPORARY TABLESPACE temp_tablesapce_name]
[QUOTA n K|M|UNLIMITED ON tablespace_name]
[PROFILE profile_name]
[PASSWORD EXPIRE]
[ACCOUNT LOCK|UNLOCK];
參數說明
user_name:用于設定建立使用者名,在資料庫中使用者名必須是唯一的;
IDENTIFIED:用于指明使用者身份認證方式;
BY password:用于設定使用者的資料庫身份認證,其中password為使用者密碼;
EXTERNALLY:用于設定使用者的外部身份認證;
GLOBALLYAS'external_name':用于設定使用者的全局身份認證,其中external_name為Oracle的安全管理伺服器相關資訊;
DEFAULTTABLESPACE:用于設定使用者的預設表空間,如果沒有指定,Oracle将資料庫預設表空間作為使用者的預設表空間;
TEMPORARYTABLESPACE:用于設定使用者的臨時表空間;
QUOTA:用于指定使用者在特定表空間上的配額,即使用者在該表空間中可以配置設定的最大空間;
PROFILE:用于為使用者指定概要檔案,預設值為DEFAULT,采用系統預設的概要檔案;
PASSWORDEXPIRE:用于設定使用者密碼的初始狀态為過期,使用者在首次登入資料庫時必須修改密碼;
ACCOUNTLOCK:用于設定使用者初始狀态為鎖定,預設為不鎖定;
ACCOUNTUNLOCK:用于設定使用者初始狀态為不鎖定或解除使用者的鎖定狀态
注意:
在建立新使用者後,必須為使用者授予适當的權限,使用者才可以進行相應的資料庫操作。例如,授予使用者CREATESESSION權限後,使用者才可以連接配接到資料庫
示例:
① 建立一個使用者user3,密碼為user3,預設表空間為USERS,在該表空間的配額為10 MB,初始狀态為鎖定。
SQL>CREATE USER user3 IDENTIFIED BY user3
DEFAULT TABLESPACE USERS QUOTA 10MON USERS ACCOUNT LOCK;
② 建立一個使用者user4,密碼為user4,預設表空間為USERS,在該表空間的配額為10 MB。密碼設定為過期狀态,即首次連接配接資料庫時需要修改密碼。概要檔案為example_profile(假設該概要檔案已經建立)。
SQL>CREATE USER user4 IDENTIFIED BY user4
DEFAULT TABLESPACE USERS
QUOTA 10M ON USERS
PROFILE example_profile
PASSWORD EXPIRE;
(3)修改使用者
基本文法
ALTER USER user_name [IDENTIFIED]
[BY password|EXTERNALLY|GLOBALLYAS 'external_name']
[DEFAULT TABLESPACEtablespace_name]
[TEMPORARY TABLESPACEtemp_tablesapce_name]
[QUOTA n K|M|UNLIMITED ONtablespace_name]
[PROFILE profile_name]
[DEFAULT ROLE role_list|ALL[EXCEPT role_list] |NONE]
[PASSWORD EXPIRE]
[ACCOUNT LOCK|UNLOCK];
參數說明
role_list:角色清單;
ALL :表示所有角色;
EXCEPTrole_list:表示除了role_list清單中的角色之外的其他角色;
NONE:表示沒有預設角色
注意:
指定的角色必須是使用GRANT指令直接授予該使用者的角色。
示例:
① 将使用者user3的密碼修改為newuser3,同時将該使用者解鎖。
SQL>ALTER USER user3 IDENTIFIED BYnewuser3 ACCOUNT UNLOCK;
② 修改使用者user4的預設表空間為ORCLTBS1,在該表空間的配額為20 MB,在USERS表空間的配額為10 MB。
SQL>ALTER USER user4 DEFAULT TABLESPACEORCLTBS1
QUOTA 20M ON ORCLTBS1
QUOTA 10M ON USERS;
(4)删除使用者
當一個使用者被删除時,其所擁有的所有對象也被删除。先删除使用者所擁有的對象,再删除使用者,将參照該使用者對象的其他資料庫對象标志為INVALID。若使用者擁有資料庫對象,則必須用CASCADE 選項。
基本文法:DROPUSER user_name [ CASCADE ];
(5)查詢使用者資訊
ALL_USERS:包含資料庫所有使用者的使用者名、使用者ID和使用者建立時間。
DBA_USERS:包含資料庫所有使用者的詳細資訊。
USER_USERS:包含目前使用者的詳細資訊。
DBA_TS_QUOTAS:包含所有使用者的表空間配額資訊。
USER_TS_QUOTAS:包含目前使用者的表空間配額資訊。
V$SESSION:包含使用者會話資訊。
V$OPEN_CURSOR:包含使用者執行的SQL語句資訊。
示例:
檢視資料庫所有使用者名及其預設表空間。
SQL>SELECT SERNAME, DEFAULT_TABLESPACEFROM DBA_USERS;
檢視資料庫中各使用者的登入時間、會話号。
SQL>SELECT SID, SERIAL#, LOGON_TIME, USERNAMEFROM V$SESSION;
2、權限管理
所謂權限就是執行特定類型SQL指令或通路其他使用者的對象的權利。使用者在資料庫中可以執行什麼樣的操作,以及可以對哪些對象進行操作,完全取決于該使用者所擁有的權限。
分為如下兩類:
系統權限:系統權限是指在資料庫級别執行某種操作的權限,或針對某一類對象執行某種操作的權限。例如,CREATESESSION權限、CREATEANY TABLE權限。
對象權限:對象權限是指對某個特定的資料庫對象執行某種操作的權限。例如,對特定表的插入、删除、修改、查詢的權限。
授權方法:
直接授權:利用GRANT指令直接為使用者授權。
間接授權:先将權限授予角色,然後再将角色授予使用者。
(1)系統權限管理
1)系統權限分類
一類是對資料庫某一類對象的操作能力,通常帶有ANY關鍵字。例如,CREATEANY INDEX,ALTER ANY INDEX,DROP ANY INDEX 。
另一類是資料庫級别的某種操作能力。例如,CREATE SESSION。
2)系統權限的授權
GRANT sys_priv_list TOuser_list|role_list|PUBLIC [WITH ADMIN OPTION];
參數說明:
sys_priv_list:表示系統權限清單,以逗号分隔;
user_list:表示使用者清單,以逗号分隔;
role_list:表示角色清單,以逗号分隔;
PUBLIC:表示對系統中所有使用者授權;
WITH ADMIN OPTION:表示允許系統權限接收者再把此權限授予其他使用者。
注意:
隻有DBA才應當擁有ALTER DATABASE 系統權限。
應用程式開發者一般需要擁有CREATE TABLE、CREATEVIEW和CREATEINDEX等系統權限。
普通使用者一般隻具有CREATE SESSION系統權限。
隻有授權時帶有WITH ADMIN OPTION子句時,使用者才可以将獲得的系統權限再授予其他使用者,即系統權限的傳遞性。
示例:
① 為PUBLIC使用者組授予CREATESESSION系統權限。
SQL>GRANT CREATE SESSION TO PUBLIC;
② 為使用者user1授予CREATESESSION,CREATETABLE,CREATEINDEX系統權限。
SQL>GRANT CREATE SESSION,CREATETABLE,CREATE VIEW TO user1;
③ 為使用者user2授予CREATESESSION,CREATETABLE ,CREATEINDEX系統權限。user2獲得權限後,為使用者user3授予CREATE TABLE權限。
SQL>GRANT CREATE SESSION,CREATE TABLE,CREATEVIEW TO user2 WITH ADMIN OPTION;
SQL>CONNECT user2/user2 @ORCL
SQL>GRANT CREATE TABLE TO user3;
3)系統權限的回收
REVOKE sys_priv_list FROM user_list|role_list|PUBLIC;
注意事項:
多個管理者授予使用者同一個系統權限後,其中一個管理者回收其授予該使用者的系統權限時,該使用者将不再擁有相應的系統權限。
為了回收使用者系統權限的傳遞性(授權時使用了WITH ADMIN OPTION子句),必須先回收其系統權限,然後再授予其相應(原擁有)的系統權限。
示例:
SQL>connect system/manager @ORCL
SQL>revokecreate session,create table from user2;
SQL>grant create session,create table touser2;
如果一個使用者獲得的系統權限具有傳遞性,并且給其他使用者授權,那麼該使用者系統權限被回收後,其他使用者的系統權限并不受影響。
(2)對象權限管理
1)對象權限分類
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIml2ZuwGOolWM3UDOwgTOxMTMfBzLchjMvwFMxETMwIzLcRnbl1GajFGd0F2LcRXZu5ibkN3YukGavw1LcpDc0RHaiojIsJye.gif)
2)對象權限的授權
GRANT obj_priv_list|ALL ON [schema.]object TOuser_list|role_list [WITH GRANT OPTION];
參數說明
obj_priv_list:表示對象權限清單,以逗号分隔;
[schema.]object:表示指定的模式對象,預設為目前模式中的對象;
user_list:表示使用者清單,以逗号分隔;
role_list:表示角色清單,以逗号分隔;
WITHGRANT OPTION:表示允許對象權限接收者把此對象權限授予其他使用者。
示例:
① 将scott模式下的emp表的SELECT,UPDATE,INSERT權限授予user1使用者。
SQL>GRANTSELECT,INSERT,UPDATE ON scott.emp TO user1;
② 将scott模式下的emp表的SELECT,UPDATE,INSERT權限授予user2使用者。user2使用者再将emp表的SELECT,UPDATE權限授予user3使用者。
SQL>GRANTSELECT,INSERT,UPDATE ON scott.emp TO user2 WITH GRANT OPTION;
SQL>CONNECTuser2/[email protected]
SQL>GRANTSELECT,UPDATE ON scott.emp TO user3;
3)對象權限的回收
REVOKE obj_priv_list| ALL ON [schema.]object FROM user_list|role_list;
注意事項:
多個管理者授予使用者同一個對象權限後,其中一個管理者回收其授予該使用者的對象權限時,該使用者不再擁有相應的對象權限。
為了回收使用者對象權限的傳遞性(授權時使用了WITH GRANT OPTION子句),必須先回收其對象權限,然後再授予其相應的對象權限。
如果一個使用者獲得的對象權限具有傳遞性(授權時使用了WITH GRANT OPTION子句),并且給其他使用者授權,那麼該使用者的對象權限被回收後,其他使用者的對象權限也被回收。
WITH ADMIN OPTION與WITH GRANT OPTION比較
WITH ADMIN OPTION:
當甲使用者授權給乙使用者,且激活該選項,則被授權的乙使用者具有管理該權限的能力:或者能把得到的權限再授給其他使用者丙,或者能回收授出去的權限。
當甲使用者收回乙使用者的權限後,乙使用者曾經授給丙使用者的權限仍然存在
WITH GRANT OPTION:
當甲使用者授權給乙使用者,且激活該選項,則被授權的乙使用者具有管理該權限的能力:或者能把得到的權限再授給其他使用者丙,或者能回收授出去的權限。
當甲使用者收回乙使用者的權限後,乙使用者曾經授給丙使用者的權限也被回收。
(3)查詢權限資訊
DBA_TAB_PRIVS:包含資料庫所有對象的授權資訊
ALL_TAB_PRIVS:包含資料庫所有使用者和PUBLIC使用者組的對象授權資訊
USER_TAB_PRIVS:包含目前使用者對象的授權資訊
DBA_COL_PRIVS:包含所有字段已授予的對象權限
ALL_COL_PRIVS:包含所有字段已授予的對象權限資訊
USER_COL_PRIVS:包含目前使用者所有字段已授予的對象權限資訊。
DBA_SYS_PRIVS:包含授予使用者或角色的系統權限資訊
USER_SYS_PRIVS:包含授予目前使用者的系統權限信。
3、角色管理
所謂角色就是一系列相關權限的集合,角色權限的授予與回收和使用者權限的授予與回收完全相同,如下圖:
預定義角色
預定義角色是指在Oracle資料庫建立時由系統自動建立的一些常用的角色,這些角色已經由系統授予了相應的權限。
DBA可以直接利用預定義的角色為使用者授權,也可以修改預定義角色的權限。
Oracle資料庫中有30多個預定義角色。
可以通過資料字典視圖DBA_ROLES查詢目前資料庫中所有的預定義角色,通過DBA_SYS_PRIVS查詢各個預定義角色所具有的系統權限。
部分預定義角色的權限見下表:
自定義角色
(1)建立角色
CREATE ROLE role_name [NOTIDENTIFIED][IDENTIFIED BY password];
參數說明 :
role_name:用于指定自定義角色名稱,該名稱不能與任何使用者名或其他角色相同;
NOT IDENTIFIED:用于指定該角色由資料庫授權,使該角色生效時不需要密碼;
IDENTIFIED BYpassword:用于設定角色生效時的認證密碼。
示例:建立不同類型的角色。
SQL>CREATE ROLE high_manager_role;
SQL>CREATE ROLE middle_manager_roleIDENTIFIED BY middlerole;
SQL>CREATE ROLE low_manager_roleIDENTIFIED BY lowrole;
(2)角色權限的授予與回收
給角色授予适當的系統權限、對象權限或已有角色。在資料庫運作過程中,可以為角色增權重限,也可以回收其權限。給角色授權時應該注意,一個角色可以被授予另一個角色,但不能授予其本身,不能産生循環授權。
示例:
SQL>GRANTCONNECT,CREATE TABLE,CREATE VIEW TO low_manager_role;
SQL>GRANTCONNECT,CREATE TABLE,CREATE VIEW TO middle_manager_role;
SQL>GRANTCONNECT,RESOURCE,DBA TO high_manager_role;
SQL>GRANTSELECT,UPDATE,INSERT,DELETE ON scott.emp TO high_manager_role;
SQL>REVOKECONNECT FROM low_manager_role;
SQL>REVOKECREATE TABLE,CREATE VIEW FROM middle_manager_role;
SQL>REVOKEUPDATE,DELETE ,INSERT ON scott.emp FROM high_manager_role;
(3)修改角色
修改角色是指修改角色生效或失效時的認證方式,也就是說,是否必須經過Oracle确認才允許對角色進行修改。
修改角色的文法
ALTER ROLE role_name [NOTIDENTIFIED]|[IDENTIFIED BY password];
示例 :
SQL>ALTER ROLE high_manager_roleIDENTIFIED BY highrole;
SQL>ALTER ROLE middle_manager_role NOTIDENTIFIED;
(4)角色的生效與失效
所謂角色的失效是指角色暫時不可用。當一個角色生效或失效時,使用者從角色中獲得的權限也生效或失效。是以,通過設定角色的生效或失效,可以動态改變使用者的權限。在進行角色生效或失效設定時,需要輸入角色的認證密碼,避免非法設定。
SETROLE [role_name [IDENTIFIED BY password]]|[ALL [EXCEPT role_name]]|[NONE];
參數說明 :
role_name:表示進行生效或失效設定的角色名稱;
IDENTIFIED BY password:用于設定角色生效或失效時的認證密碼;
ALL:表示使目前使用者所有角色生效;
EXCEPT role_name:表示除了特定角色外,其餘所有角色生效;
NONE:表示使目前使用者所有角色失效。
示例:
SQL>SET ROLE NONE;
SQL>SET ROLE high_manager_role IDENTIFIEDBY highrole;
SQL>SET ROLEmiddle_manager_role,low_manager_low IDENTIFIED BY lowrole;
SQL>SET ROLE ALL EXCEPTlow_manager_role,middle_manager_role;
(5)删除角色
DROP ROLE role_name;
如果某個角色不再需要,則可以使用DROP ROLE語句删除角色。角色被删除後,使用者通過該角色獲得的權限被回收。
利用角色進行權限管理
(1)給使用者或角色授予角色
GRANT role_list TO user_list|role_list;
例如,将CONNECT,high_manager_role角色授予使用者user1,将RESOURCE,CONNECT角色授予角色middle_manager_role。
SQL>GRANT CONNECT, high_manager_role TOuser1;
SQL>GRANT RESOURCE, CONNECT TOmiddle_manager_role;
(2)從使用者或角色回收角色
REVOKE role_list FROM user_list|role_list;
例如,回收角色middle_manager_role的RESOURCE,CONNECT角色。
SQL>REVOKE RESOURCE, CONNECT FROMmiddle_manager_role;
(3)使用者角色的激活或屏蔽
ALTERUSER user_name DEFAULT ROLE [role_name]|[ALL [EXCEPT role_name]]|[NONE];
示例
SQL>ALTER USER user1 DEFAULT ROLE NONE; //激活所有的角色
SQL>ALTER USER user1 DEFAULT ROLECONNECT,DBA;
SQL>ALTER USER user1 DEFAULT ROLE ALL;
SQL>ALTER USER user1 DEFAULT ROLE ALLEXCEPT DBA;//激活除了DBA外的所有角色
查詢角色資訊
DBA_ROLES:包含資料庫中所有角色及其描述;
DBA_ROLE_PRIVS:包含為資料庫中所有使用者和角色授予的角色資訊;
USER_ROLE_PRIVS:包含為目前使用者授予的角色資訊;
ROLE_ROLE_PRIVS:為角色授予的角色資訊;
ROLE_SYS_PRIVS:為角色授予的系統權限資訊;
ROLE_TAB_PRIVS:為角色授予的對象權限資訊;
SESSION_PRIVS:目前會話所具有的系統權限資訊;
SESSION_ROLES:目前會話所具有的角色資訊。
示例:
查詢角色CONNECT所具有的系統權限資訊。
SQL>SELECT * FROM ROLE_SYS_PRIVS WHEREROLE='CONNECT';
查詢DBA角色被授予的角色資訊。
SQL>SELECT * FROM ROLE_ROLE_PRIVS WHEREROLE='DBA';
4、概要檔案管理
(1)概要檔案的作用
概要檔案(PROFILE)是資料庫和系統資源限制的集合,是Oracle資料庫安全政策的重要組成部分。
利用概要檔案,可以限制使用者對資料庫和系統資源的使用,同時還可以對使用者密碼進行管理。
在Oracle資料庫建立的同時,系統會建立一個名為DEFAULT的預設概要檔案。如果沒有為使用者顯式地指定一個概要檔案,系統預設将DEFAULT概要檔案作為使用者的概要檔案。
(2)資源限制級别和類型
資源限制級别
會話級資源限制:對使用者在一個會話過程中所能使用的資源進行限制。
調用級資源限制:對一條SQL語句在執行過程中所能使用的資源進行限制。
資源限制類型
CPU使用時間;邏輯讀;每個使用者的并發會話數;使用者連接配接資料庫的空閑時間;使用者連接配接資料庫的時間;私有SQL區和PL/SQL區的使用。
(3)啟用或停用資源限制
① 資料庫啟動前啟用或停用資源限制
将資料庫初始化參數檔案中的參數RESOURCE_LIMIT的值設定為TRUE或FALSE(預設),來啟用或停用系統資源限制。
② 在資料庫啟動後啟用或停用資源限制
使用ALTER SYSTEM語句修改RESOURCE_LIMIT的參數值為TRUE或FALSE,來啟動或關閉系統資源限制。
如:SQL>ALTER SYSTEM SET RESOURCE_LIMIT=TRUE;
(4)概要檔案的參數
1)資源限制參數
CPU_PER_SESSION:限制使用者在一次會話期間可以占用的CPU 時間總量,機關為百分之一秒。當達到該時間限制後,使用者就不能在會話中執行任何操作了,必須斷開連接配接,然後重建立立連接配接。
CPU_PER_CALL:限制每個調用可以占用的CPU 時間總量,機關為百分之一秒。當一個SQL語句執行時間達到該限制後,該語句以錯誤資訊結束。
CONNECT_TIME:限制每個會話可持續的最大時間值,機關為分鐘。當資料庫連接配接持續時間超出該設定時,連接配接被斷開。
IDLE_TIME:限制每個會話處于連續空閑狀态的最大時間值,機關為分鐘。當會話空閑時間超過該設定時,連接配接被斷開。
SESSIONS_PER_USER:限制一個使用者打開資料庫會話的最大數量。
LOGICAL_READS_PER_SESSION:允許一個會話讀取資料塊的最大數量,包括從記憶體中讀取的資料塊和從磁盤中讀取的資料塊的總和。
LOGICAL_READS_PER_CALL:允許一個調用讀取的資料塊的最大數量,包括從記憶體中讀取的資料塊和從磁盤中讀取的資料塊的總和。
PRIVATE_SGA:在共享伺服器操作模式中,執行SQL語句或PL/SQL程式時,Oracle将在SGA中建立私有SQL區。該參數限制在SGA中一個會話可配置設定私有SQL區的最大值。
COMPOSITE_LIMIT:稱為“綜合資源限制”,是一個使用者會話可以消耗的資源總限額。該參數由CPU_PER_SESSION,LOGICAL_READS_PER_SESSION, PRIVATE_SGA,CONNECT_TIME幾個參數綜合決定。
2)密碼管理參數
FAILED_LOGIN_ATTEMPTS:限制使用者在登入Oracle資料庫時允許失敗的次數。一個使用者嘗試登入資料庫的次數達到該值時,該使用者的賬戶将被鎖定,隻有解鎖後才可以繼續使用。
PASSWORD_LOCK_TIME:設定當使用者登入失敗後,使用者賬戶被鎖定的時間長度。
PASSWORD_LIFE_TIME:設定使用者密碼的有效天數。達到限制的天數後,該密碼将過期,需要設定新密碼。
PASSWORD_GRACE_TIME:用于設定提示密碼過期的天數。在這幾天中,使用者将接收到一個關于密碼過期需要修改密碼的警告。當達到規定的天數後,原密碼過期。
PASSWORD_REUSE_TIME:指定一個使用者密碼被修改後,必須經過多少天後才可以重新使用該密碼。
PASSWORD_REUSE_MAX:指定一個密碼被重新使用前,必須經過多少次修改。
PASSWORD_VERIFY_FUNCTION:設定密碼複雜性校驗函數。該函數會對密碼進行校驗,以判斷密碼是否符合最低複雜程度或其他校驗規則。
(5)概要檔案的管理
1)建立概要檔案
CREATEPROFILE profile_name LIMIT resource_parameters|password_parameters;
參數說明:
profile_name:用于指定要建立的概要檔案名稱;
resource_parameter:用于設定資源限制參數,形式為
resource_parameter_name integer|UNLIMITED|DEFALUT
password_parameters:用于設定密碼參數,形式為
password_parameter_name integer|UNLIMITED|DEFALUT
示例:
① 建立一個名為res_profile的概要檔案,要求每個使用者最多可以建立4個并發會話;每個會話持續時間最長為60分鐘;如果會話在連續20分鐘内空閑,則結束會話;每個會話的私有SQL區為100 KB;每個SQL語句占用CPU時間總量不超過10秒。
SQL>CREATE PROFILE res_profile LIMIT
SESSIONS_PER_USER4 CONNECT_TIME 60
IDLE_TIME20 PRIVATE_SGA 100K
CPU_PER_CALL 100;
② 建立一個名為pwd_profile的概要檔案,如果使用者連續4次登入失敗,則鎖定該賬戶,10天後該賬戶自動解鎖。
SQL>CREATE PROFILE pwd_profile LIMIT FAILED_LOGIN_ATTEMPTS 4 PASSWORD_LOCK_TIME10;
2)将概要檔案配置設定給使用者
可以在建立使用者時為使用者指定概要檔案
SQL>CREATE USER user5 IDENTIFIED BY user5PROFILE res_profile;
也可以在修改使用者時為使用者指定概要檔案。
SQL>ALTER USER user5 PROFILE pwd_profile;
3)修改概要檔案
ALTERPROFILE profile_name LIMIT resource_parameters|password_parameters;
對概要檔案的修改隻有在使用者開始一個新的會話時才會生效。
示例:
修改pwd_profile概要檔案,将使用者密碼有效期設定為10天。
SQL>ALTER PROFILE pwd_profile LIMIT PASSWORD_LIFE_TIME10;
4)删除概要檔案
DROP PROFILE profile_name [CASCADE];
如果要删除的概要檔案已經指定給使用者,則必須在DROP PROFILE語句中使用CASCADE子句。如果為使用者指定的概要檔案被删除,則系統自動将DEFAULT概要檔案指定給該使用者。
删除概要檔案pwd_profile。
SQL>DROP PROFILE pwd_profile CASCADE;
5)查詢概要檔案
USER_PASSWORD_LIMITS:包含通過概要檔案為使用者設定的密碼政策資訊。
USER_RESOURCE_LIMITS:包含通過概要檔案為使用者設定的資源限制參數。
DBA_PROFILES:包含所有概要檔案的基本資訊。
5、審計
審計是監視和記錄使用者對資料庫所進行的操作,以供DBA進行統計和分析。一條審計記錄中包含使用者名、會話辨別、終端辨別、所通路的模式對象名稱、執行的操作、操作的完整語句代碼、日期和時間戳、所使用的系統權限等。
利用審計可以完成:調查資料庫中的可疑活動;監視和收集特定資料庫活動的資料。
(1)審計的分類
語句審計(Statement Auditing):對特定的SQL語句進行審計,不指定具體對象。
權限審計(Privilege Auditing):對特定的系統權限使用情況進行審計。
對象審計(Object Auditing):對特定的模式對象上執行的特定語句進行審計。
精細審計(Fine-Grained Auditing,FGA):對基于内容的各種SQL語句進行審計,可以使用布爾表達式對列級别上的内容進行審計。
根據使用者執行的語句是否成功,審計分為:
成功執行語句的審計
不成功執行語句的審計
無論語句是否執行成功都進行審計
根據對同一個語句審計次數的不同,審計分為:
會話級審計:對某一個使用者或所有使用者的同一個語句隻審計一次,形成一條審計記錄;
存取方式審計:對某一個使用者或所有使用者的同一個語句每執行一次便審計一次,即同一條語句形成多個審計記錄。
(2)審計的啟動
通過修改靜态參數AUDIT_TRAIL值來啟動或關閉資料庫的審計功能。AUDIT_TRAIL參數可以取值:為DB,OS,NONE,TRUE,FALSE,DB_EXTENDED,XML或EXTENDED。
DB表示啟動審計功能,審計資訊寫入SYS.AUD$資料字典中;
OS表示啟動審計功能,審計資訊寫入作業系統檔案中;
預設為NONE,表示不啟動審計功能;
TRUE功能與DB選項一樣;
FALSE表示不啟動審計功能,但Oracle會監視特定活動并寫入作業系統檔案,如例程的啟動、關閉以及DBA連接配接資料庫等。
示例:
SQL>ALTER SYSTEM SET audit_trail ='DB'SCOPE=SPFILE;
(3)語句審計
1)概述
語句審計是指對特定類型的SQL語句進行審計,與具體的對象沒有關系。可以審計某個使用者或所有使用者的SQL語句;可以是會話級審計或存取方式審計;可以對成功執行的SQL語句、沒有成功執行的SQL語句或無論是否成功執行的SQL語句進行審計。
基本文法:
AUDITsql_statement|sql_statement_option
[BY user1,user2…]
[BY SESSION|ACCESS]
[WHENEVER [NOT] SUCCESSFUL]
參數說明:
sql_statement:被審計的SQL語句
sql_statement_option:被審計的SQL語句選項
BY user:指定審計的使用者,如果沒有指定,則審計所有使用者;
BY SESSION:語句級審計,同一個SQL語句隻審計一次(預設);
BY ACCESS:存取方式審計,同一個SQL語句執行幾次審計幾次;
WHENEVER SUCCESSFUL:隻審計成功的SQL語句;
WHENEVER NOT SUCCESSFUL:隻審計不成功的SQL語句。
示例:
SQL>AUDIT TABLE BY scott BYACCESS;
SQL>AUDIT VIEW BY scott BYSESSION;
SQL>AUDIT ALTER TABLE BYscott,sfd BY SESSION WHENEVER SUCCESSFUL;
SQL>AUDIT SESSION BY sfd;
SQL>CONN scott/tiger
SQL>CREATE TABLE test_audit(snoNUMBER,sname CHAR(20));
SQL>ALTER TABLE test_audit ADD(sex CHAR(2));
SQL>CONN / AS SYSDBA
SQL>SELECT * FROM aud$;
2)查詢語句審計資訊
如果要了解目前資料庫對哪些使用者進行了語句審計,以及審計設定資訊,可以通過查詢資料字典視圖DBA_STMT_AUDIT_OPTS獲得。
SQL>SELECT user_name,audit_option,success FROMdba_stmt_audit_opts;
3)取消語句審計
取消對某個語句的審計,隻需将AUDIT指令改為NOAUDIT指令就可以了。
(4)權限審計
1)概述
權限審計是指對特定系統權限的使用情況進行審計。
AUDIT system_privilege
[BY user1,user2…]
[BY SESSION|ACCESS]
[WHENEVER [NOT] SUCCESSFUL]
示例:
SQL>AUDIT CREATE ANY TABLE,CREATE ANY VIEWBY scott,sfd;
SQL>AUDIT ALTER ANY TABLE BY sfd BYSESSION WHENEVER SUCCESSFUL;
2)權限審計資訊查詢
如果要了解目前資料庫對哪些使用者的系統權限進行了審計以及審計設定資訊,可以通過查詢資料字典DBA_PRIV_AUDIT_OPTS獲得。
SQL>SELECT user_name,privilege,successFROM dba_priv_audit_opts;
3)取消權限設計
取消對某個系統權限的審計,隻需将AUDIT指令改為NOAUDIT指令就可以了。
(5)對象審計
1)概述
對象審計是指對特定模式對象執行的特點操作進行審計,與使用者沒有關系。
AUDIT object_privilege ON schema.object_name
[BY user1,user2…][BY SESSION|ACCESS][WHENEVER [NOT]SUCCESSFUL]
參數說明 :
object_privilege:特定的對象權限
schema.object_name:特定模式對象。
示例:
對scott模式下的emp表、dept表進行審計。
SQL>AUDIT SELECT,UPDATE ON scott.emp BYACCESS;
SQL>AUDIT INSERT,DELETE ON scott.dept BYSESSION WHENEVER NOT SUCCESSFUL;
2)查詢對象審計資訊
如果要了解目前資料庫對哪些模式對象進行了審計以及審計設定資訊,可以通過查詢資料字典視圖DBA_OBJ_AUDIT_OPTS獲得。
SQL>SELECTowner,object_type,ins,upd,sel,del FROM dba_obj_audit_opts;
3)取消對象審計
如果要取消對某個模式對象的審計,隻需将AUDIT指令改為NOAUDIT指令就可以了。
(6)精細審計
1)概述
精細審計是Oracle 10g的新特性,可以對表或視圖上執行的SELECT,INSERT,UPDATE,DELETE操作建立審計政策。通過DBMA_FGA包對審計政策進行管理。
DBMA_FGA包中定義了下列4個用于精細審計政策管理的子程式
ADD_POLICY:建立一個審計政策
DROP_POLICY:删除一個審計政策
ENABLE_POLICY:啟用一個審計政策
DISABLE_POLICY:禁用一個審計政策
基本文法:
DBMS_FGA.ADD_POLICY(
object_schemaVARCHAR2,
object_nameVARCHAR2,
policy_nameVARCHAR2,
audit_conditionVARCHAR2,
audit_columnVARCHAR2,
handler_schemaVARCHAR2,
handler_moduleVARCHAR2,
enableBOOLEAN,
statement_typesVARCHAR2,
audit_trailBINARY_INTEGER IN DEFAULT,
audit_column_optsBINARY_INTEGER IN DEFAULT);
DBMS_FGA.DROP_POLICY(
object_schemaVARCHAR2,
object_nameVARCHAR2,
policy_nameVARCHAR2 );
DBMS_FGA.ENABLE_POLICY(
object_schemaVARCHAR2,
object_nameVARCHAR2,
policy_nameVARCHAR2,
enableBOOLEAN);
DBMS_FGA.DISABLE_POLICY(
object_schemaVARCHAR2,
object_nameVARCHAR2,
policy_nameVARCHAR2 );
2)精細審計的步驟:
首先建立一個精細審計政策,然後啟動精細審計政策
示例:對 scott模式下emp表中20号部門員工工資的查詢進行審計。
① 建立精細審計政策
BEGIN
DBMS_FGA.ADD_POLICY(
object_schema=>'scott',
object_name=>'emp',
policy_name=>'audit_emp_sal',
audit_condition=>'deptno=10',
audit_column=>'sal',
handler_schema=>NULL,
handler_module=>NULL,
enable=>TRUE,
statement_types=>'select');
END;
② 啟動精細審計政策
BEGIN
DBMS_FGA.ENABLE_POLICY(
object_schema=>'scott',
object_name=>'emp',
policy_name=>'audit_emp_sal');
END;
③ 禁用精細審計政策
BEGIN
DBMS_FGA.DISABLE_POLICY(
object_schema=>'scott',
object_name=>'emp',
policy_name=>'audit_emp_sal');
END;
④ 删除精細審計政策
BEGIN
DBMS_FGA.DROP_POLICY(
object_schema=>'scott',
object_name=>'emp',
policy_name=>'audit_emp_sal');
END;
3)查詢精細審計政策
了解目前資料庫中有哪些精細審計政策,以及審計設定資訊,查詢資料字典視圖DBA_FGA_AUDIT_TRAIL
示例
SQL>SELECTpolicy_name,object_name,object_schema,sql_text FROM dba_fga_audit_trail;