设为首页 收藏本站
查看: 1362|回复: 0

[经验分享] DB2数据库安全的12条军规

[复制链接]

尚未签到

发表于 2016-11-18 10:58:38 | 显示全部楼层 |阅读模式
   本文描述了用于 DB2 for Linux、UNIX 和 Windows 的十二种最佳安全实践。这些最佳实践专门注重于可以通过数据库管理和编程进行控制的一些元素,但是不包括其他可应用于系统中更大范围内的安全技术或策略。本文中列出的最佳实践不分先后顺序,它们的重要性相当,都有助于提高 DB2 数据服务器的总体安全级别。


  简介  在过去几年中,很多详细谈论大范围的系统安全问题的报道成为新闻的一大热点。通常,敏感的个人数据,例如社会保险号(SSN)、信用卡号和银行账号都是从不安全的系统中被窃取的,随之带来的后果是出现身份盗用、金融诈骗、未经授权地使用信息等现象。因此,系统管理员必须不断地监控他们的系统,确保系统中采取了适当的安全预防措施。
  可在系统架构的不同级别上应用安全性。例如,可以通过安装防火墙来防止外部网络对服务器的未经授权的访问。可以使用一些安全网络协议技术,例如 IPSec,来保证网络上计算机间通信信道的安全性。又如,可以实行严格的密码策略,要求用户选择一个强密码,并经常更换密码。数据库级的安全措施,包括身份验证和授权,也可以用于加强应用程序的安全性。
  PUBLIC 撤销隐式的权限和特权
  DB2 在内部使用一个名为 PUBLIC 的伪组,对于 PUBLIC,可以为之授予特权,也可以撤销它的特权。PUBLIC 实际上不是在外部安全设施中定义的一个组,但通过它可以为通过 DB2 认证的用户授予特权。
  当创建一个新数据库时,某些数据库权限和特权就会自动授予 PUBLIC,如 表 1 所示。
  表 1. 创建数据库后被授予 PUBLIC 的权限和特权列表


权限或特权

描述

BINDADD

允许用户在数据库中创建新的包

CREATETAB

允许用户在数据库中创建新的表

CONNECT

允许用户连接到数据库

IMPLICIT_SCHEMA

允许用户在不存在的模式中创建对象(动态地创建模式)

USERSPACE1 上的 USE 特权

允许用户在 USERSPACE1 表空间中创建表或索引

NULLID 模式上的 CREATEIN

允许用户在 NULLID 模式中创建对象

模式 SQLJ 上的 CREATEIN

允许用户在 SQLJ 模式中创建对象

SYSPROC 模式上所有函数和过程上的 EXECUTE WITH GRANT 特权

允许用户调用 SYSPROC 模式中的存储过程和执行该模式中的函数,并且可以将该许可授给其他用户

SQLJ 模式中所有过程上的 EXECUTE WITH GRANT 特权

允许用户调用 SYSPROC 模式中的存储过程

NULLID 模式中创建的所有包上的 BIND 和 EXECUTE 特权

允许用户绑定(BIND)和执行(EXECUTE)NULLID 模式中的包

SYSIBM 模式中表上的 SELECT 特权

允许用户查看系统编目表中的信息

SYSCAT 模式中视图上的 SELECT 特权

允许用户查看系统编目视图中的信息

SYSIBMADM 模式中管理视图上的 SELECT 特权

允许用户查看这些管理视图中的信息

SYSSTAT 模式中编目视图上的 SELECT 特权

允许用户查看系统编目视图中的信息

SYSTAT 模式中视图上的 UPDATE 特权

允许用户更新这些系统编目视图中的统计信息

  
作为一项最佳实践,在创建一个新的数据库之后,应立即撤销这些被授给PUBLIC 的隐式特权。
  例如,您可以执行 清单 1 中显示的语句来撤销系统编目视图上的特权和其他被授予 PUBLIC 的隐式特权。不过这个清单还不是最全的。
  清单 1. 创建数据库后撤销 PUBLIC 的隐式特权
CREATE DATABASE testdb;
CONNECT TO testdb;

REVOKE BINDADD ON DATABASE FROM PUBLIC;
REVOKE CREATETAB ON DATABASE FROM PUBLIC;
REVOKE CONNECT ON DATABASE FROM PUBLIC;
REVOKE IMPLICIT_SCHEMA ON DATABASE FROM PUBLIC;
REVOKE USE OF TABLESPACE USERSPACE1 FROM PUBLIC;
REVOKE SELECT ON TABLE SYSCAT.COLAUTH FROM PUBLIC;
REVOKE SELECT ON TABLE SYSCAT.DBAUTH FROM PUBLIC;
REVOKE SELECT ON TABLE SYSCAT.INDEXAUTH FROM PUBLIC;
REVOKE SELECT ON TABLE SYSCAT.PACKAGEAUTH FROM PUBLIC;
REVOKE SELECT ON TABLE SYSCAT.PASSTHRUAUTH FROM PUBLIC;
REVOKE SELECT ON TABLE SYSCAT.ROUTINEAUTH FROM PUBLIC;
REVOKE SELECT ON TABLE SYSCAT.SCHEMAAUTH FROM PUBLIC;
REVOKE SELECT ON TABLE SYSCAT.SECURITYLABELACCESS FROM PUBLIC;
REVOKE SELECT ON TABLE SYSCAT.SECURITYPOLICYEXEMPTIONS FROM PUBLIC;
REVOKE SELECT ON TABLE SYSCAT.SEQUENCEAUTH FROM PUBLIC;
REVOKE SELECT ON TABLE SYSCAT.SURROGATEAUTHIDSFROM PUBLIC;
REVOKE SELECT ON TABLE SYSCAT.TABAUTH FROM PUBLIC;
REVOKE SELECT ON TABLE SYSCAT.TBSPACEAUTH FROM PUBLIC;
REVOKE SELECT ON TABLE SYSCAT.XSROBJECTAUTHFROM PUBLIC;
REVOKE SELECT ON TABLE SYSCAT.AUTHORIZATIONIDS FROM PUBLIC;
REVOKE SELECT ON TABLE SYSCAT.OBJECTOWNERS FROM PUBLIC;
REVOKE SELECT ON TABLE SYSCAT.PRIVILEGES FROM PUBLIC;
...
...

  从 DB2 V9.1 开始,CREATE DATABASE 命令语法增加了 RESTRICTIVE 选项。如果该命令中包括了 RESTRICTIVE 选项,那么会导致 RESTRICT_ACCESS 数据库配置参数被设置为 YES,同时不自动授予 PUBLIC 任何特权。如果忽略了 RESTRICTIVE 选项,那么 RESTRICT_ACCESS 数据库配置参数被设置为 NO,前述所有特权都将自动授予 PUBLIC。
    SYSxxx_GROUP 参数使用显式值  DB2 定义了一个超级用户权限层次结构(SYSADM、SYSCTRL、 SYSMAINT 和 SYSMON),每个权限可以执行一个子集的管理操作,例如创建数据库、强制使用户离开系统、进行数据库备份。与它们相关联的实例级参数(SYSADM_GROUP、SYSCTRL_GROUP、SYSMAIN_GROUP 和 SYSMON_GROUP)用于控制哪些用户可以继承那样的权限。
  每个参数可以被设置为拥有该权限的一个用户组(在外部安全设施中定义)的名称。设置好之后,指定组中的所有用户就继承了该权限。
  例如,如果有一个名为 DBAGRP1 的操作系统组,所有 DBA 用户都是这个组的成员,如果使用 清单 2 中所示的命令将 SYSADM_GROUP 实例参数的值设为 DBAGRP1,那么这个组中的所有用户都将继承 SYSADM 权限。
  清单 2. 更新 SYSADM_GROUP 实例参数
  UPDATE DBM CFG USING SYSADM_GROUP dbagrp1
  db2stop
  db2start
  在 Windows 上进行缺省的 DB2 安装时,这些参数的值被缺省地设置为 NULL。这意味着超级用户权限被授给属于本地 Administrators 组的所有有效用户账户。在 Linux 和 UNIX 平台上,NULL 值被缺省地赋给实例所有者的主组,完成安装后,缺省情况下这个组只包含用户 ID 和实例所有者。
  作为一项最佳实践,应该将每个实例级权限参数的缺省值改为一个显式的组名,以防止意料之外的超级用户访问。
  在小型企业中,一个 DBA 扮演着多种角色,那么这些参数可以设置为相同的组名。而在大型环境中,由多个 DBA 负责一个系统,因此可以使用不同的组名。除了确保这些参数具有显式值以外,还应该尽量确保参数值所指定的组中的所有用户都确实有必要成为这个组的成员。如果没有这个必要,那么应该从这个组中删除!由于用户和组账户的管理是在 DB2 之外处理的,因此 DB2 不会仔细检查用户应不应该成为一个组的成员。
  跟踪隐式的特权
  如前所述,创建一个新的数据库时,PUBLIC 被隐式地授予一些特权。实际上,并不是只有此时才会授予隐式的特权。在某些情况下,当一个用户创建一个数据库对象,例如一个表或者包的时候,或者当授予 DBADM 权限级别的时候,数据库管理器会隐式地将一些特权授给用户。理解被隐式授予的特权有哪些,这些隐式特权所蕴涵的安全意义,这一点非常重要。
  表 2. 授予不同动作的隐式特权小结


动作

授予执行该动作的用户的隐式特权

创建新的数据库



  • 将 GRANT of DBADM 权限以及 BINDADD、CONNECT、CREATETAB、CREATE_EXTERNAL_ROUTINE、CREATE_NOT_FENCED_ROUTINE、IMPLICIT_SCHEMA、LOAD 和 QUIESCE_CONNECT 权限授予创建者(SYSADM 或 SYSCTRL)
  • 将 GRANT of BINDADD、CREATETAB、CONNECT 和 IMPLICIT_SCHEMA 授予 PUBLIC
  • 将 USERSPACE1 表空间上的 USE 特权授予 PUBLIC
  • 将 SYSPROC 模式中所有过程和函数的 EXECUTE WITH GRANT 特权授予 PUBLIC
  • 将 SQLJ 模式中所有过程上的 EXECUTE withGRANT 特权授予 PUBLIC
  • 将 NULLID 模式中所有包上的 BIND 和 EXECUTE 特权授予 PUBLIC
  • 将 SQLJ 和 NULLID 模式上的 CREATEIN 授予 PUBLIC
  • 将 SYSIBM 编目上的 SELECT 授予 PUBLIC
  • 将 SYSCAT 编目视图上的 SELECT 特权授予 PUBLIC
  • 将 SYSIBMADM 管理视图上的 SELECT 特权授予 PUBLIC
  • 将 SYSSTAT 编目视图上的 SELECT 特权授予 PUBLIC
  • 将 SYSSTAT 编目视图上的 UPDATE 特权授予 PUBLIC
授予 DBADM 权限



  • 将 GRANT of BINDADD、CONNECT、CREATETAB、CREATE_EXTERNAL_ROUTINE、CREATE_NOT_FENCED_ROUTINE、IMPLICIT_SCHEMA、LOAD 和 QUIESCE_CONNECT 授予目标用户
模式



  • 当显式地创建模式时,CREATEIN、ALTERIN、DROPIN 权限被授予创建模式的用户。
  • 当隐式地创建模式时,另外还有 CREATEIN 权限被授予 PUBLIC。
创建对象(表、索引、包)



  • 将 GRANT of CONTROL 授予对象创建者
创建视图



  • 仅当用户对视图定义中引用的所有表、视图和昵称均有 CONTROL 特权时,才为其授予 Grant of CONTROL 特权
  
作为一项最佳实践,应该仔细检查和跟踪执行某动作时所授予的隐式特权。如果以后撤销这个动作,那么应撤销任何隐式的特权。
  例如,假设您一开始将 DBADM 权限授予用户 JEFF,而随后又您决定撤销此权限。为了撤销 JEFF 的 DBADM 权限,可以使用以下语句:
  REVOKE DBADM ON DATABASE FROM USER jeff
  执行该语句之后,JEFF 将不再拥有 DBADM 权限;然而,他仍然拥有数据库上的GRANT、BINDADD、CONNECT、CREATETAB、 CREATE_EXTERNAL_ROUTINE、CREATE_NOT_FENCED_ROUTINE、 IMPLICIT_SCHEMA、 LOAD 和 QUIESCE_CONNECT 权限,这些权限是在一开始授予 JEFF 权限时隐式地授给该用户的。这些权限需要显式地从 JEFF 撤销。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-302079-1-1.html 上篇帖子: DB2: 日期和时间的使用 下篇帖子: DB2 9 根蒂根底(730 测验)认证指南,第 1 部分: DB2 计划(2)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表