資料安全之許可權控制

buptdream發表於2013-05-12

災難描述:

生產環境某一個產品庫被研發人員truncate一張非常重要的表,研發總監知道後非常生氣,要求嚴格控制研發人員的許可權問題,要求每個人用自己的使用者名稱稱運算元據庫,審計每個人的操作許可權,將每個研發人員對生產庫的操作繼續記錄。

案例分析:

在這種情況下,需要嚴格控制研發人員的DDL 許可權,這種情況下,需要限制使用者對資料庫進行DDLDML某些操作。如果單純的進行限制,可以通過觸發器來進行控制,語句如下:

CREATE OR REPLACE TRIGGER DDL_RESTRICT
  BEFORE DROP OR CREATE OR TRUNCATE OR ALTER ON DATABASE
  DECLARE
   BEGIN
  IF ORA_SYSEVENT() IN (
'DROP', 'CREATE', 'ALTER','TRUNCATE')
     AND ORA_DICT_OBJ_OWNER() IN (
'BUPTDREAM' AND
     ORA_DICT_OBJ_TYPE IN (
'TABLE')   AND       
      ORA_DICT_OBJ_NAME() NOT LIKE
'%a%' AND    
     ORA_DICT_OBJ_NAME() NOT LIKE
'%b%' AND     
     ORA_DICT_OBJ_NAME() NOT LIKE
'%c%' THEN
    RAISE_APPLICATION_ERROR(NUM => -
20000,
                            MSG =>
'禁止 ' || ORA_SYSEVENT() || '  ' ||
                                   ORA_DICT_OBJ_OWNER() ||
'使用者下的' ||
                                   ORA_DICT_OBJ_NAME() ||
'表,請與DBA聯絡');
  END IF;
END;

 

通過觸發器可以實現控制開發人員對生產庫的DDL操作,如果想要禁止deleteDML操作,也可以用觸發器來實現。

      Oracle中對使用者的管理是使用許可權的方式來管理的,也就是說,如果直接將生產庫的許可權給某個使用者,但是我們必須要已授權的表的名稱前鍵入該表所有者的名稱,所以這比較麻煩。

Oracle資料庫中同義詞是資料庫方案物件的一個別名,經常用於簡化物件訪問和提高物件訪問的安全性。在使用同義詞時,Oracle資料庫將它翻譯成對應方案物件的名字。與檢視類似,同義詞並不佔用實際儲存空間,只有在資料字典中儲存了同義詞的定義。在Oracle資料庫中的大部分資料庫物件,如表、檢視、同義詞、序列、儲存過程、包等等,資料庫管理員都可以根據實際情況為他們定義同義詞。 

      批量建立同義詞的語句如下:

select ' create public synonym ' || OBJECT_NAME ||
       
' for CMAPP_PRODUCTION.' || OBJECT_NAME || ';'
   from user_objects
  where object_type in
        (
'TABLE', 'VIEW', 'PROCEDURE', 'TRIGGER', 'FUNCTION', 'PACKAGE');

同義詞賦權的語句如下:


    SELECT
'grant select,insert,update,delete  on ' ||
           OBJECT_NAME ||
' to buptdream;'
      FROM USER_OBJECTS
     WHERE OBJECT_TYPE =
'TABLE';
    SELECT
'grant select,insert,update,delete on ' || OBJECT_NAME ||
          
' to buptdream;'
      FROM USER_OBJECTS
     WHERE OBJECT_TYPE =
'VIEW';
   
    SELECT
'grant EXECUTE on ' || OBJECT_NAME || ' to buptdream;'
      FROM USER_OBJECTS
     WHERE OBJECT_TYPE =
'PROCEDURE';
   
    SELECT
'grant EXECUTE on ' || OBJECT_NAME || ' to buptdream;'
      FROM USER_OBJECTS
     WHERE OBJECT_TYPE =
'FUNCTION';
   
    SELECT
'grant select on ' || OBJECT_NAME || ' to buptdream;'
      FROM USER_OBJECTS
     WHERE OBJECT_TYPE =
'SEQUENCE';

通過上述方法,我們可以控制研發人員對生產庫的操作,在這個過程中,我們可以採用審計方式記錄下每個操作,一旦許可權被控制,很多資料庫的風險被大大降低。

 在資料庫開發過程中,如果研發人員很多,進行相關的許可權管理是非常重要的事情,可以大大減少資料庫誤操作的安全問題,觸發器是一個方法,另外通過同義詞,可以為每個使用者單獨建立使用者,提高研發人員運算元據庫時的專心程度,防止誤操作的發生。

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

相關文章