LanDom
作者LanDom·2010-07-05 19:00
软件开发工程师·互联网企业

第 2 部分:DB2 安全性2

字数 9181阅读 906评论 0赞 0

DB2 9 基础 第 2 部分:DB2 安全性

三、DB2 授权
 
        1、DB2 授权控制数据库安全计划的以下方面:

        ● 用户被授予的权限级别

        ● 允许用户运行的命令

        ● 允许用户读取和/或修改的数据

        ● 允许用户创建、修改和/或删除的数据库对象

        授权由特权组和高级数据库管理程序(实例级)维护和实用操作组成。在 DB2 可用的 5 种权限中,SYSADM、SYSCTRL 和 SYSMAINT 是实例级权限。这意味着它们的范围包含实例级命令以及针对这个实例中的所有数据库的命令。这些权限只能分配给组;可以通过 DBM CFG 文件分配这些权限。
       
        针对特定数据库的 DBADM 和 LOAD 权限可以分配给用户或用户组。可以使用 GRANT 命令显式地分配这些权限。注意,任何提到组成员关系的地方都假设在操作系统级上已经定义了这些用户和组名。
       
        [示例]-[取得权限列表]:
       
        db2 get authorizations
       
        2、获得 SYSADM 权限
       
        DB2 中的 SYSADM 权限就像是 UNIX 上的根权限或 Windows 上的 Administrator 权限。对一个 DB2 实例拥有 SYSADM 权限的用户能够对这个实例、这个实例中的任何数据库以及这些数据库中的任何对象发出任何 DB2 命令。他们还能够访问数据库中的数据以及对其他用户授予或撤消特权或权限。只允许 SYSADM 用户更新 DBM CFG 文件。
       
        SYSADM 权限由 DBM CFG 文件中的 SYSADM_GROUP 参数控制。
       
        [示例]-[向 db2grp1 组授予 SYSADM 权限]:
       
        db2 update dbm cfg using SYSADM_GROUP db2grp1
       
        3、获得 SYSCTRL 权限

        拥有 SYSCTRL 权限的用户可以在实例中执行所有管理和维护命令。但是,与 SYSADM 用户不同,他们不能访问数据库中的任何数据,除非他们被授予了访问数据所需的特权。SYSCTRL 用户可以对实例中的任何数据库执行的命令示例如下:

        ● db2start/db2stop

        ● db2 create/drop database

        ● db2 create/drop tablespace

        ● db2 backup/restore/rollforward database

        ● db2 runstats(针对任何表)

        ● db2 update db cfg for database dbname

        [示例]-[拥有 SYSADM 权限的用户可以使用以下命令将 SYSCTRL 分配给一个组]:
       
        db2 update dbm cfg using SYSCTRL_GROUP group name
       
        4、获得 SYSMAINT 权限

        拥有 SYSMAINT 权限的用户可以发出的命令是拥有 SYSCTRL 权限的用户可以发出的命令的子集。SYSMAINT 用户只能执行与维护相关的任务。
       
        拥有 SYSMAINT 权限的用户不能创建或删除数据库或表空间。他们也不能访问数据库中的任何数据,除非他们被显式地授予访问数据所需的特权。
       
        [示例]-[拥有 SYSADM 权限的用户可以使用以下命令将 SYSMAINT 权限分配给一个组]:
       
        db2 update dbm cfg using SYSMAINT_GROUP group name
       
        5、获得 DBADM 权限
       
        DBADM 权限是一个数据库级权限,而不是实例级权限。DBADM 用户对一个数据库有几乎完全的控制能力。DBADM 用户不能执行某些维护或管理任务,比如:

        ● drop database

        ● drop/create tablespace

        ● backup/restore database

        ● update db cfg for database db name

        但是,他们可以执行以下任务:

        ● db2 create/drop table

        ● db2 grant/revoke(任何特权)

        ● db2 runstats(任何表)

        DBADM 用户还被自动地授予对数据库对象及其内容的所有特权。
       
        6、获得 LOAD 权限
       
        LOAD 权限是一个数据库级权限,所以它可以被分配给用户和用户组。顾名思义,LOAD 权限允许用户对表发出 LOAD 命令。当用大量数据填充表时,LOAD 命令通常用来替代插入或导入命令,它的速度更快。根据您希望执行的 LOAD 操作类型,仅仅拥有 LOAD 权限可能还不够。可能还需要表上的特定特权。
       
四、DB2 特权

        1、数据库和对象特权
       
        数据库级特权(针对数据库中的所有对象)和对象级特权(与特定的对象相关联)。
       
        用户可以拥有的数据库级特权有:

        ● CREATETAB: 用户可以在数据库中创建表。

        ● BINDADD: 用户可以使用 BIND 命令在数据库中创建包。

        ● CONNECT: 用户可以连接数据库。

        ● CREATE_NOT_FENCED: 用户可以创建 unfenced 用户定义函数(UDF)。

        ● IMPLICIT_SCHEMA: 用户可以在数据库中隐式地创建模式,而不需要使用 CREATE SCHEMA 命令。

        ● LOAD: 用户可以将数据装载进表中。

        ● QUIESCE_CONNECT: 用户可以访问处于静默(quiesced)状态的数据库。

        ● CREATE_EXTERNAL_ROUTINE: 用户可以创建供应用程序和数据库的其他用户使用的过程。
       
        对象级特权的信息存储在系统编目视图中。视图名称是 syscat.tabauth、syscat.colauth、syscat.indexauth、syscat.schemaauth、syscat.routineauth 和 syscat.packageauth。
       
        2、显式特权
       
        可以使用 GRANT 和 REVOKE 命令显式地 对用户或组授予或撤消特权。
       
        [示例]-[拥有 SYSADMIN 的用户可以使用下面的命令显示地对用户 test1 授权]:
       
        db2 grant select on table gmilne.org to user test1
       
        db2 grant insert on table gmilne.org to group db2grp1
       
        db2 grant dropin on schema gmilne to all

       
        说明,上例中的 dropin 意为 允许用户删除模式中的对象,同 CreateIn,AlterIn
       
        [示例]-[拥有 SYSADMIN 的用户可以使用下面的命令显示地对用户 test1 撤销授权]:
       
        db2 revoke select on table gmilne.org from user test1
       
        db2 revoke insert on table gmilne.org from group db2grp1
       
        db2 revoke dropin on schema gmilne from all

       
        这里需要大家注意,对某一个用户显示授权后,再对该用户所在组撤销权限,那么该用户仍然具有被显示授予的权限。
       
        3、隐式特权
       
        当发出某些命令时,DB2 可能会自动地授予特权,而不需要像前面看到的那样发出显式的 GRANT 语句。
       
        注意,当删除创建的对象时,这些特性会隐式地撤消。但是,当显式地撤消更高级的特权时,不会撤消它们。
       
        当用户创建数据库时,隐式地授予这个用户这个数据库上的 DBADM 权限。获得 DBADM 权限就会隐式地授予 CONNECT、CREATETAB、BINDADD、IMPLICIT_SCHEMA 和 CREATE_NOT_FENCED 特权。即使撤消了 DBADM 权限,这个用户仍然会保留这些特权。
       
        PUBLIC 是一个特殊的 DB2 组,其中包括特定数据库的所有用户。与前面讨论过的其他组不同,PUBLIC 不必在操作系统级进行定义。在默认情况下,会向 PUBLIC 授予一些特权。例如,这个组自动接受数据库上的 CONNECT 特权和编目表上的 SELECT 特权。可以对 PUBLIC 组发出 GRANT 和 REVOKE 命令。
       
        3、间接特权
       
        当数据库管理器执行包 时,可以间接获得特权。包中包含一个或多个 SQL 语句,这些语句已经转换为 DB2 用来在内部执行它们的格式。换句话说,包中包含可执行格式的多个 SQL 语句。如果包中的所有语句都是静态的,那么用户只需要有包上的 EXECUTE 特权,就能够成功地执行包中的语句。
       
        4、基于标签的访问控制
       
        DB2 9 中新增的一个概念是基于标签的访问控制(LBAC)。LBAC 为 DBA 提供了在表的行或列级限制读/写特权的能力。
       
        LBAC 由安全管理员 通过创建安全策略来设置。每个表只能由一个安全策略来控制,但是系统中可以有任意数量的安全策略。设置LBAC 需要几个步骤。必须做的第一件事情是,决定对于您的数据需要什么类型的访问控制。
       
        待续……

申明:欢迎转载,但请先告知,谢谢。
----------------------------------------------------------------------
--学习笔记:DB2 9 基础 - 7
--彭建军
--最新更新时间:2006-11-27 11:17
----------------------------------------------------------------------

如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!

0

添加新评论0 条评论

Ctrl+Enter 发表

作者其他文章

X社区推广