ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 数据安全之权限控制

数据安全之权限控制

原创 Linux操作系统 作者:buptdream 时间:2013-05-12 15:35:41 0 删除 编辑

灾难描述:

生产环境某一个产品库被研发人员truncate一张非常重要的表,研发总监知道后非常生气,要求严格控制研发人员的权限问题,要求每个人用自己的用户名称操作数据库,审计每个人的操作权限,将每个研发人员对生产库的操作继续记录。

案例分析:

在这种情况下,需要严格控制研发人员的DDL 权限,这种情况下,需要限制用户对数据库进行DDL,DML某些操作。如果单纯的进行限制,可以通过触发器来进行控制,语句如下:

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操作,如果想要禁止delete的DML操作,也可以用触发器来实现。

      在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博客 ” ,链接:https://blog.itpub.net/10701850/viewspace-760877/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2008-12-04

  • 博文量
    25
  • 访问量
    344517