DB2系统目录视图存在着安全隐患,那么其安全性该如何提高呢?下面提出了两个建议,供您参考,希望可以对您有所帮助。
第一个是比较简单的处理方法,即从public中撤销对系统默认视图的select特权。然后给需要访问这些信息的用户再授予他们对于这些系统默认视图的select查询权限。在DB2数据库中这些DB2系统目录视图也是视图的一种,所以无论是授权还是撤销权限都是跟其他任何普通视图的授予与撤销权限的方法是一致的。
唯一的区别就是操作用户权限上的区别。对于普通的视图,只要视图的所有者或者具有视图权限控制的用户都可以更改视图的相关权限。而对于DB2系统目录视图来说,操作员必须有sysadm或者DBADM的权限,才能够更改系统目录视图的权限。即收回某些用户的特权,或者重新赋予某些用户具有对系统目录视图的查询权限。
第二个方法实现起来比较复杂,但是比较实用。简单的说,就是按照Oracle数据库系统的解决方式,将系统目录视图分为三类。第一类是user系统目录视图。即在查询系统目录视图的时,以当前用户为查询条件,在系统目录视图中反映出来的是用户自己建立的对象。其他用户建立的对象,即使这个用户具有查询或者其他更加高级的权限,在这个视图中也无法显示出来。
这对于用户维护自己创建的对象比较方便。第二类视图是ALL视图。这个视图在运行时,也是以当前用户为查询条件。不过在这个视图中主要反映两类信息。一是反映用户自己所创建的对象,二是当前用户具有查询等相关权限的对象信息。也就说,只要用户有权查询的对象都会在这个类别的系统目录视图中列出来。
第三类视图是DBA视图,即显示所有数据库对象以及相关的授权信息。这类视图只有数据库管理员才有查询权限,其他用户不具有这个视图的查询权限。分类分好后,可以先取消所有用户对DB2系统目录视图Select权限。注意在授权的时候,不是将系统目录视图的查询权限赋予给其他的用户。
而是以DB2系统目录视图为基本对象,在此基础上再根据上面的分类来建立对应的视图。然后在授权的时候,笔者是将这些新建立的视图权限赋予给相关的用户。也就说,用户并不是直接查询系统目录视图,而是通过查询数据库管理员所建立的视图来查询DB2系统目录视图中的相关内容。
这不仅可以在系统目录视图与用户之间多建立一道安全的屏障,而且还可以实现对目录视图内容更加精细的控制。为了操作上的方便,笔者建议将建立视图和赋予权限的语句保存下来。以后若需要重新部署数据库,或者数据库管理员跳槽后需要维护一个新的DB2数据库系统,那么可以直接通过这个语句来重建相关的视图。
如果DB2数据库部署比较简单,只有一个数据库管理员的话,那么只需要采用第一种简便的处理方式既可。但是如果DB2数据库应用比较复杂,有多个数据库管理员各司其职,共同负责数据库应用的时候,笔者建议采用第二种处理方式。添加了过滤条件之后,即可以保障DB2系统目录视图数据的安全,还方便了用户的操作。
此时即使某个数据库管理员的帐号与密码被泄露,那么其最终受影响的也只有这个数据库管理员创建或者拥有查询等权限的对象。而不会将其他用户创建的对象或者这个用户具有查询等权限的对象信息泄露给其他人。其实这第二种方案只是第一次操作的时候比较复杂。
以后还有机会再次维护数据库系统的话,只需要直接执行第一次保存下来的SQL语句即可。所以不少有经验的数据库管理员,还都是比较乐于使用第二种解决方案的。因为对于他们来说,可能第二种解决方案比第一种解决方案更加的简单,使用起来更加的方便。