利用DATABASE VAULT保護敏感資料

dbhelper發表於2015-01-13

對於大部分企業而言,核心資料庫中儲存的資料對於企業都是極為重要的。這些資料使得企業擁有核心競爭力,有的資料甚至涉及商業機密。

對於社保系統就更是如此,很多敏感資料的查詢許可權都是十分嚴格的。而且社保系統內部又分為社保、醫保、就業、工傷、生育五個子系統。各個系統有各自獨立的資料,也有共享的資料,普通的資料庫許可權管理功能已經很難滿足越來越複雜、越來越嚴格的安全性要求了。

Oracle推出了DATABASE VAULT。在VAULT中,資料庫的安全性方面得到極大的增強。

 

 

下面是一個真實的例子,看完這個例子,就可以明白為什麼VAULT對於保護敏感資料如此重要了。

作為政府部門重要的對外服務視窗,M市的社會保障局一直表現良好。客戶的滿意度也很不錯。從日常的五保工作,到定期舉辦的人才培訓和人才交流,市場和社會反響良好。除了源於大家努力的工作態度,後面還有一個執行安全可靠的應用系統來支撐。

一天下午,正在主持工作例會的M市社保局長突然接到一個電話,電話來自公安系統,內容是接到銀行報案,懷疑有人突入社保應用系統內部修改系統資料,並涉嫌冒領養老金,請社保局協助調查相關案情。

作為局長几乎有點不相信眼前的事情。因為作為一個準金融單位,系統安全是他們設計時第一優先考慮的事,業務流程也有嚴格的規定和管理。按理說這種情況是不可能發生的。

事情的確令人費解。社會保障應用系統為了系統安全起見,從社保大廳視窗,到最後的主機系統,設立了包括防火牆,入侵檢測,作業系統,密碼保護等等軟的,硬的設施共12道。正常情況下,保護措施可以令到連蒼蠅都飛不進來。

可最後透過調查發現,是單位內部的系統管理維護人員,繞過了所有的這十二道防護措施,直接將數十個已經去世的參保人狀態改成存活,然後將轉賬賬戶改成自己的號碼。這樣每個月嫌疑人就可以坐收這些死人養老金了。

幾個月後,銀行也是無意中發現,多個個人養老金髮放,怎麼會流向同一個賬戶呢?展開調查後,才使得真相大白。

從這個例子不難看到,雖然企業部署了嚴格的硬體、軟體安全策略,但是絕大部分是針對外部使用者的,而對於內部使用者,尤其是系統管理員,資料庫管理員而言,這些安全策略形同虛設、不堪一擊。正所謂日防夜防,家賊難防。

從企業角度講,對於這種系統核心人員,確實應該做到用人不疑,疑人不用。但是企業又不能將自己所有的核心機密僅僅建立在信任之上。而目前的資料庫產品對於系統管理員和資料庫管理員的約束很少,除了一些資料庫加密之外的功能外,沒有什麼能限制資料庫管理員的操作。加強審計、加強監控倒是可以找到最終的罪魁禍首,但是這兩種手段都屬於事後諸葛亮,對於阻止破壞性事務的發生並沒有實質性的幫助。

而從DBA角度講,尤其是產品DBA,負責資料庫的安裝、維護、最佳化、備份、遷移、升級等等維護管理性的操作,其實對資料庫中儲存的資訊的含義並不關心。只是工作性質決定了DBA所具有資料庫中最高的許可權,而DBA一般也不需要透過這種許可權來訪問敏感業務資料。那麼一旦發生了敏感的資料洩漏的事情,擁有最高許可權的DBA首先被放到了被懷疑的位置上,這對於DBA來說又很“冤枉”。

從上面的分析不難看到,企業需要DBA和系統管理員來管理資料庫,保證資料庫高效、安全的執行,又不希望核心的敏感資料被擁有高許可權的人員修改或檢視。而DBA需要很高的許可權來管理、維護資料庫,但是又不需要訪問業務資料的許可權。那麼最簡單的方法就是資料庫可以提供這樣的功能,使得DBA有足夠的許可權來管理、維護資料庫,又沒有許可權去隨意的修改、檢視業務使用者下的資料。

ORACLE DATABASE VAULT元件就具備這樣的功能:

SQL> CONN SYS@YTK111 AS SYSDBA
輸入口令: ****
已連線。
SQL> SHOW USER
USER
"SYS"
SQL> SELECT * FROM V$OPTION
  2  WHERE PARAMETER = 'Oracle Database Vault';

PARAMETER                                VALUE
---------------------------------------- -------------------------
Oracle Database Vault                    TRUE

SQL> CREATE USER TEST IDENTIFIED BY TEST;
CREATE USER TEST IDENTIFIED BY TEST
                               *
1 行出現錯誤:
ORA-01031:
許可權不足


SQL> GRANT CONNECT, RESOURCE TO YANGTK;
GRANT CONNECT, RESOURCE TO YANGTK
*
1 行出現錯誤:
ORA-00604:
遞迴 SQL 級別 1 出現錯誤
ORA-47401: grant role privilege (
CONNECT.  ) 的領域違規
ORA-06512:
"DVSYS.AUTHORIZE_EVENT", line 55
ORA-06512:
line 31

可以看到,在ORACLE DATABASE VAULT的預設情況下,SYS使用者甚至連建立使用者和授權的許可權都沒有了。

當前SYS還是可以做一些資料庫級或例項級的維護和管理操作的:

SQL> SHOW PARAMETER OPEN_CURSORS

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
open_cursors                         integer     300
SQL> ALTER SYSTEM SET OPEN_CURSORS = 500;

系統已更改。

SQL> ALTER SYSTEM SWITCH LOGFILE;

系統已更改。

SQL> CREATE TABLESPACE TEST DATAFILE 'E:\ORACLE\ORADATA\YTK111\TEST01.DBF' SIZE 100M;

表空間已建立。

只是和使用者建立、授權等相關的許可權從SYSSYSTEMDBA使用者中被移除。在VAULT中,有了一個新增的使用者DVSYS專門負責這部分許可權的管理:

SQL> CONN DVSYS@YTK111
輸入口令: ****
已連線。
SQL> CREATE USER TEST IDENTIFIED BY TEST DEFAULT TABLESPACE TEST;

使用者已建立。

SQL> GRANT CONNECT TO TEST;

授權成功。

SQL> CONN SYS@YTK111 AS SYSDBA
輸入口令: ****
已連線。
SQL> GRANT RESOURCE TO TEST;

授權成功。

SYSDVSYS二者各司其職,SYS沒有建立使用者、賦予CONNECT角色的許可權,而DVSYS則沒有許可權授予UNLIMITED TABLESPACECREATE TABLE等系統許可權。

SQL> CONN TEST@YTK111
輸入口令: ****
已連線。
SQL> CREATE TABLE T (ID NUMBER);

表已建立。

SQL> INSERT INTO T VALUES (1);

已建立 1 行。

SQL> COMMIT;

提交完成。

SQL> CONN SYS@YTK111 AS SYSDBA
輸入口令: ****
已連線。
SQL> SELECT * FROM TEST.T;

        ID
----------
         1

預設情況下SYS是可以訪問其他使用者下物件的。

下面透過建立REALM,使得使用者資料得到保護:

SQL> CONN DVSYS@YTK111
輸入口令: ****
已連線。
SQL> EXEC DBMS_MACADM.CREATE_REALM('TEST_REALM', 'REAML FOR TEST', 'Y', 0)

PL/SQL 過程已成功完成。

SQL> EXEC DBMS_MACADM.ADD_OBJECT_TO_REALM('TEST_REALM', 'TEST', '%', '%')

PL/SQL 過程已成功完成。

建立了一個名為TEST_REALMREALM,然後將TEST使用者的所有物件放到這個REALM中,下面再次嘗試利用SYS訪問TEST使用者下的物件:

SQL> CONN SYS@YTK111 AS SYSDBA
輸入口令: ****
已連線。
SQL> SELECT * FROM TEST.T;
SELECT * FROM TEST.T
                   *
1 行出現錯誤:
ORA-01031:
許可權不足

可以看到,這時SYS已經沒有許可權去訪問TEST使用者下的物件了。這說明透過VAULTREALM的保護,DBA已經沒有許可權看到業務使用者下的敏感資料了。

這裡展示的只是VAULT包含敏感資料的一個小例子,VAULT在安全性方面的功能遠不止這些,比如VAULT可以限制訪問為本地訪問、可以限制訪問的時間區域,可以限制訪問的IP範圍等等。

社保系統包括社保、醫保、就業、工傷、生育五個系統,其中這些系統中又包括共享的公共資訊。如果將這些系統都獨立到不同的資料庫,確實可以保證各個子系統的資料安全。但是這種方式不利於公共資訊資料的共享,而為了達到資料共享的目的所部署的複製、同步環境又將帶來新的不安全因素。

如果使用了DATABASE VAULT,那麼問題就簡單多了。對於社保系統而言,可以建立6REALM,分別對應社保、醫保、就業、工傷、生育和公共資訊6個使用者組。透過新增資料庫使用者到REALM,使得社保、醫保、就業、工傷和生育對應的使用者均只能訪問各自的業務資料以及公共資訊業務資料。而公共資訊對應的使用者則只能訪問公共資訊。對於系統管理員,可以根據需要來進行設定,可以允許系統管理員訪問業務資料或公共資訊,也可以完全禁止系統管理員訪問任何的業務資料。

總的來說,Oracle Database Vault在資料庫的基礎上增加了強大的安全性支援,充分的利用Vault所提供的功能,可以確保企業核心敏感資料不會被任何不必要的人所訪問,無論這個人是在企業外部還是在企業內部,甚至是系統管理員或者資料庫管理員。

 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8494287/viewspace-1400637/,如需轉載,請註明出處,否則將追究法律責任。

相關文章