Oracle數據庫安全管理

Oracle數據庫安全管理




目錄數據庫

+  1.數據庫安全控制策略概述安全

+  2.用戶管理網絡

+  3.資源限制與口令管理session

+  4.權限管理併發

+  5.角色管理oracle

+  6.審計ide


1.數據庫安全控制策略概述性能

安全性是評估一個數據庫的重要指標,Oracle數據庫從3個層次上採起安全控制策略:測試

  • 系統安全性。在系統級別上控制數據庫的存取和使用機制,包括有效的用戶名與口令、是否能夠鏈接數據庫、用戶能夠進行哪些系統操做等;
  • 數據安全性。在數據庫模式對象級別上控制數據庫的存取和使用機制。用戶要對某個模式對象進行操做,必需要有操做的權限;
  • 網絡安全性。Oracle經過分發Wallet、數字證書、SSL安全套接字和數據密鑰等辦法來保證數據庫的網絡傳輸安全性。

    數據庫的安全能夠從如下幾個方面進行管理:加密

  • 用戶帳戶管理
  • 用戶身份認證方式管理。Oracle提供多種級別的數據庫用戶身份認證方式,包括系統、數據庫、網絡3種類型的身份認證方式
  • 權限和角色管理。經過管理權限和角色,限制用戶對數據庫的訪問和操做
  • 數據加密管理。經過數據加密來保證網絡傳輸的安全性
  • 表空間設置和配額。經過設置用戶的存儲表空間、臨時表空間以及用戶在表空間上使用的配額,能夠有效控制用戶對數據庫存儲空間的使用
  • 用戶資源限制。經過概要文件設置,能夠限制用戶對數據庫資源的使用

數據庫審計。監視和記錄數據庫中的活動,包括審計全部的SQL語句、審計SQL權限、審計模式對象以及審計網絡活動等。

接下來將對數據庫安全管理方法進行一 一討論。

 2.用戶管理

用戶是數據庫的使用者和管理者,Oracle經過設置用戶及安全屬性來控制用戶對數據庫的訪問。Oracle的用戶分兩類,一類是建立數據庫時系統預約義的用戶,一類是根據應用由DBA建立的用戶。

2.1 預約義用戶

在oracle建立時建立的用戶,咱們稱爲預約義用戶,預約義用戶根據做用不一樣分爲3類:


  • 管理員用戶:包括SYS,SYSTEM,SYSMAN,DBSNMP等。SYS是數據庫中擁有最高權限的管理員,能夠啓動、關閉、修改數據庫,擁有數據字典;SYSTEM是一個輔助的數據庫管理員,不能啓動和關閉數據庫,可是能夠進行一些管理工做,如建立和刪除用戶;SYSMAN是OEM的管理員,能夠對OEM進行配置和管理;DBSNMP用戶是OEM代理,用來監視數據庫的。以上這些用戶都不能刪除。
  • 示例方案用戶:在安裝Oracle或使用odbc建立數據庫時,若是選擇了」示例方案」,會建立一些用戶,在這些用戶對應的schema中,有產生一些數據庫應用案例。這些用戶包括:BI、HR、OE、PM、IX、SH等。默認狀況下,這些用戶均爲鎖定狀態,口令過時。
  • 內置用戶:有一些Oracle特性或Oracle組件須要本身單獨的模式,所以爲他們建立了一些內置用戶。如APEX_PUBLIC_USER、DIP等。默認狀況下,這些用戶均爲鎖定狀態,口令過時。

此外還有2個特殊的用戶SCOTT和PUBLIC,SCOTT是一個用於測試網絡鏈接的用戶,PUBLIC實際是一個用戶組,數據庫中任何用戶都屬於該用戶組,若是要爲數據庫中的所有用戶授予某種權限,只須要對PUBLIC受權便可。

2.2 用戶屬性

在建立用戶時,必須使用安全屬性對用戶進行限制,用戶的安全屬性主要包括:

  • 用戶名:在同一個數據庫中,用戶名是惟一的,而且不能與角色名相同;
  • 用戶身份認證:Oracle採用多種方式進行身份認證,如數據庫認證、操做系統認證、網絡認證等;
  • 默認表空間:用戶建立數據庫對象時,若是沒有顯式指明存儲在哪一個表空間中,系統會自動將該數據庫對象存儲在當前用戶的默認表空間,在Oracle 11g中,若是沒有爲用戶指定默認表空間,則系統將數據庫的默認表空間做爲用戶的默認表空間;
  • 臨時表空間:臨時表空間分配與默認表空間類似,若是不顯式指定,系統會將數據庫的臨時表空間做爲用戶的臨時表空間;
  • 表空間配額:表空間配額限制用戶在永久表空間中可使用的存儲空間的大小,默認新建用戶在表空間都沒有配額,能夠爲每一個用戶在表空間上指定配額,也可授予用戶UMLIMITED TABLESPACE系統權限,使用戶在表空間的配額上不受限制。不須要分配臨時表空間的配額;
  • 概要文件:每一個用戶必須具備一個概要文件,從會話級和調用級兩個層次限制用戶對數據庫系統資源的使用,同時設置用戶的口令管理策略。若是沒有爲用戶指定概要文件,Oracle將自動爲用戶指定DEFAULT概要文件;
  • 設置用戶的默認角色
  • 帳戶狀態:建立用戶時,能夠設定用戶的初始狀態,包括口令是否過時和帳戶是否鎖定等。

能夠經過數據字典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 建立用戶

建立用戶語法以下:

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:新建立的用戶的名稱;

-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:指定用戶爲鎖定/非鎖定狀態,默認不鎖定。

2.4 修改用戶

修改用戶採用ALTER實現,語句與CREATE USER基本相同,惟一不一樣的是多了DEFAULT ROLE選項,用於指定用戶的默認角色:

ALTER USER user_name  
...
[DEFAULT ROLE [role_list] | [ALL [EXCEPT role_list]] | NONE ]
...
;


 

其中:

 

-role_list:指定角色列表;

-ALL:指定所有角色;

-EXCEPT role_list:除了role_list指定的角色以外的角色;

-NONE:不指定角色 .

2.5 鎖定與解鎖用戶

當用戶被鎖定後,就不能登陸數據庫了,可是用戶的全部數據庫對象仍然能夠繼續使用,當用戶解鎖後,用戶就能夠正常鏈接到數據庫。

在Oracle中,當帳戶再也不使用時,就能夠將其鎖定。一般,對於不用的帳戶,能夠進行鎖定,而不是刪除。

例子,鎖定與解鎖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帳戶,解鎖後登陸到數據庫*/ SQL> conn sys as sysdba
輸入口令:
已鏈接。
SQL> ALTER USER SCOTT ACCOUNT UNLOCK;

用戶已更改。

SQL> conn scott/tiger;
已鏈接。

複製代碼

2.6 刪除用戶

使用drop user刪除用戶,基本語法爲:

DROP USER user_name [CASCADE];

 

若是用戶擁有數據庫對象,則必須使用CASCADE選項,Oracle先刪除用戶的數據庫對象,再刪除該用戶。

2.7 查詢用戶信息

在Oracle中,包含用戶信息的數據字典以下:

視圖名稱 說明
DBA_USERS 包含數據庫的全部用戶的詳細信息(15項)
ALL_USERS 包含數據庫全部用戶的用戶名、用戶ID和用戶建立時間(3項)
USER_USERS 包含當前用戶的詳細信息(10項)
DBA_TS_QUOTAS 包含全部用戶的表空間配額信息
USER_TS_QUOTAS 包含當前用戶的表空間配額信息
V$SESSION 包含用戶會話信息
V$SESSTAT 包含用戶會話統計信息

3.資源限制與口令管理

在數據庫中,對用戶的資源限制與用戶口令管理是經過數據庫概要文件(PROFILE)實現的,每一個數據庫用戶必須具備一個概要文件,一般DBA將用戶分爲幾種類型,爲每種類型的用戶單首創建一個概要文件。概要文件不是一個具體的文件,而是存儲在SYS模式的幾個表中的信息的集合。

3.1 資源限制

概要文件經過一系列資源管理參數,從會話級和調用級兩個級別對用戶使用資源進行限制。會話資源限制是對用戶在一個會話過程當中所能使用的資源進行限制,調用資源限制是對一條SQL語句在執行過程當中所能使用的資源總量進行限制。資源限制的參數以下:

  • CPU使用時間:在一個會話或調用過程當中使用CPU的總量;
  • 邏輯讀:在一個會話或一個調用過程當中讀取物理磁盤和邏輯內存數據塊的總量;
  • 每一個用戶的併發會話數;
  • 用戶鏈接數據庫的最長時間;

下面是scott用戶的資源限制信息:

resource

3.2 口令管理

oracle概要文件用於數據庫口令管理的主要參數以下:

  • FAILED_LOGIN_ATTEMPTS:限制用戶失敗次數,一旦達到失敗次數,帳戶鎖定;
  • PASSWORD_LOCK_TIME:用戶登陸失敗後,帳戶鎖定的時間長度;
  • PASSWORD_LIFE_TIME:用戶口令的有效天數,達到設定天數後,口令過時,須要從新設置新的口令;

下圖是scott用戶的口令管理參數設置信息:

passwordmanager

3.3 查詢概要文件信息

在Oracle 11g中,包含概要信息的數據字典以下:

視圖名稱 說明
DBA_USERS 包含數據庫中全部用戶屬性信息,包括使用的概要文件(profile)
DBA_PROFILES 包含數據庫中全部的概要文件及其資源設置、口令管理設置等信息
USER_PASSWORD_LIMITS 包含當前用戶的概要文件的口令限制參數設置信息
USER_RESOURCE_LIMITS 包含當前用戶的概要文件的資源限制參數設置信息
RESOURCE_COST 每一個會話使用資源的統計信息


4.權限管理

在Oracle數據庫中,用戶權限主要分爲系統權限與對象權限兩類。系統權限是指在數據庫基本執行某些操做的權限,或針對某一類對象進行操做的權限,對象權限主要是針對數據庫對象執行某些操做的權限,如對錶的增刪(刪除數據)查改等。

4.1 系統權限

(4.1.1)系統權限概述

在Oracle 11g中,一共有200多項系統權限,可經過數據字典system_privilege_map得到全部的系統權限。

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)系統權限的授予

授予用戶系統權限的SQL語法爲:

GRANT system_privilege_list | [ALL PRIVILEGES] TO user_name_list | role_list | PUBLIC [WITH ADMIN OPTION];

 

其中:

-system_privilege_list:系統權限列表,以逗號分隔;

-ALL PRIVILEGES:全部系統權限;

-user_name_list:用戶列表,以逗號分隔;

-role_list:角色列表,以逗號分隔;

-PUBLIC:給數據庫中全部用戶受權;

-WITH ADMIN OPTION:容許系統權限接收者再將權限授予其它用戶

在授予用戶系統權限時,須要注意:

  • 只有DBA用戶纔有alter database;
  • 應用開發者通常須要擁有create table、create view、create index等系統權限;
  • 普通用戶通常只需具備create session權限
  • 在受權用戶時帶有with admin option子句時,用戶能夠將得到的權限再授予其它用戶。

(4.1.3)系統權限的回收

回收用戶系統權限的SQL語法以下:

REVOKE system_privilege_list | [ALL PRIVILEGES] FROM user_name_list | role_list | PUBLIC

 

回收用戶系統權限須要注意如下3點:

  • 多個管理員授予同一個用戶相同的權限,其中一個管理員回收其授予用戶的系統權限,該用戶將再也不具備該系統權限;
  • 爲了回收用戶系統權限的傳遞性(受權時使用了with admin option),須先回收該系統權限,在從新授予用戶該權限;
  • 若是一個用戶的權限具備傳遞性,而且給其它用戶受權,那麼該用戶系統權限被收回後,其它用戶的系統權限並不會受影響;

4.2 對象權限

對象權限是指對某個特定模式對象的操做權限。數據庫模式對象全部者擁有該對象的全部對象權限,對象權限的管理其實是對象全部者對其餘用戶操做該對象的權限管理。在Oracle數據庫中,不一樣類型的對象具備不一樣的對象權限,而有的對象並無對象權限,只能經過系統權限進行管理,如簇、索引、觸發器、數據庫連接等。

(1)對象權限的授予

在Oracle數據庫中,用戶能夠直接訪問同名Schema下的數據庫對象,若是須要訪問其它Schema下的數據庫對象,就須要具備相應的對象權限。對象權限授予的SQL語法爲:

GRANT object_privilege_list | ALL [PRIVILEGES] [ (column,...) ] ON [schema.]object TO user_name_list | role_list | PUBLIC [WITH GRANT OPTION];

 

其中:

-object_privilege_list:對象權限列表,以逗號分隔;

-ALL PRIVILEGES:所有權限;

-[schema.]object:待受權的對象;

-user_name_list:用戶列表,以逗號分隔;

-role_list:角色列表,以逗號分隔;

-PUBLIC:全部用戶

(2)對象權限的回收

回收對象權限的SQL語法爲:

REVOKE object_privilege_list | ALL [PRIVILEGES] ON [schema.]object FROM user_name_list | role_list | PUBLIC [CASCADE CONSTRAINTS] | [FORCE];

 

其中:

-CASCADE CONSTRAINTS:當回收REFERENCE對象權限或回收ALL PRIVILEGES,刪除利用REFERENCES對象權限建立的外鍵約束;

-FORCE:當回收在表中被使用的用戶自定義對象類型的EXECUTE權限時,必須指定FORCE關鍵字。

回收對象權限須要注意如下3點:

  • 多個管理員授予同一個用戶相同的對象權限,一個管理員將該對象權限回收後,該用戶再也不具備該對象權限;
  • 爲了回收用戶對象權限的傳遞性,須先回收該對象權限,再從新賦予給用戶該對象權限;
  • 若是一個用戶的對象權限具備傳遞性,而且已經給其它用戶受權,那麼該用戶的對象權限被回收後,其它用戶的對象權限也將被收回。(值得注意的是,這一條與系統權限傳遞性的回收不相同)。

4.3 查詢權限信息

視圖名稱 說明
DBA_SYS_PRIVS 包含全部用戶和角色得到的系統權限信息
ALL_SYS_PRIVS 包含當前用戶可見的所有用戶和角色得到的系統權限信息
USER_SYS_PRIVS 當前用戶得到的系統權限信息
DBA_TAB_PRIVS 包含全部用戶和角色得到的對象權限信息
ALL_TAB_PRIVS 包含當前用戶可見的所有用戶和角色得到的對象權限信息
USER_TAB_PRIVS 當前用戶得到的對象權限信息
DBA_COL_PRIVS 包含數據庫中全部列對象的權限信息
ALL_COL_PRIVS 包含當前用戶可見的全部列對象的權限信息
USER_COL_PRIVS 當前用戶擁有的或授予其它用戶的全部列對象的權限信息
SESSION_PRIVS 當前會話可使用的全部權限信息

5.角色管理

假如咱們直接給每個用戶賦予權限,這將是一個巨大又麻煩的工做,同時也不方便DBA進行管理。經過採用角色,使得:

  • 權限管理更方便。將角色賦予多個用戶,實現不一樣用戶相同的受權。若是要修改這些用戶的權限,只需修改角色便可;
  • 角色的權限能夠激活和關閉。使得DBA能夠方便的選擇是否賦予用戶某個角色;
  • 提升性能,使用角色減小了數據字典中受權記錄的數量,經過關閉角色使得在語句執行過程當中減小了權限的確認。

image

                     圖. 用戶、角色、權限關係圖

因爲我的接觸的數據庫用戶較少,沒有單首創建角色,故角色的建立、修改、刪除、激活、禁用、授予、回收再也不一一講述,只要知道如何查詢角色信息便可。

在Oracle中,包含角色的數據字典以下:

視圖名稱 說明
DBA_ROLE_PRIVS 包含數據庫中全部用戶擁有的角色信息
USER_ROLE_PRIVS 包含當前用戶擁有的角色信息
ROLE_ROLE_PRIVS 角色擁有的角色信息
ROLE_SYS_PRIVS 角色擁有的系統權限信息
ROLE_TAB_PRIVS 角色擁有的對象權限信息
DBA_ROLES 當前數據庫中全部角色及其描述信息
SESSION_ROLES 當前會話所具備的角色信息

6.審計

審計相關見另外2篇文章:

1.Audit(一)--認識Audit

2.Audit(二)--清理Audit數據

相關文章
相關標籤/搜索