数据库的安全机制是数据库系统的关键之一,本文将为您介绍DB2数据库中的三种主要安全机制,供您参考,希望能对您有所启迪。
DB2中有三种主要机制允许 DBA 实现数据库安全性计划:认证、授权和特权
DB2内的五种不同权限级别是 SYSADM、SYSCTRL、SYSMAINT、DBADM 和 LOAD。
登录到安装有 DB2 的机器。发出下列命令:
db2 attach to db2inst1
这里,认证是隐式执行的。使用的是登录到机器时所使用的用户标识,并且假定操作系统已经验证了该用户标识。
db2 connect to sample user tst1 using mypass
db2 connect to sample user tst1 using mypass new chgpass confirm chgpass
改变密码
类型 描述
SERVER 在服务器上进行认证。
SERVER_ENCRYPT 在服务器上进行认证。在将密码发送给服务器之前,先在客户机机器上对密码进行加密。
CLIENT 在客户机机器上进行认证(参阅处理不可信的客户机以了解例外情况)。
*KERBEROS 认证由 Kerberos 安全性软件执行。
*KRB_SERVER_ENCRYPT 如果客户机设置为 KERBEROS,则认证由 Kerberos 安全性软件执行。否则,就使用 SERVER_ENCRYPT。
*这些设置只对 Windows 2000 操作系统有效。
要查看配置文件中的认证参数: #p#
db2 get dbm cfg
要将认证参数修改为 server_encrypt:
C:\PROGRA~1\SQLLIB\BIN>db2 update dbm cfg using authentication server_encrypt
C:\PROGRA~1\SQLLIB\BIN>db2stop
C:\PROGRA~1\SQLLIB\BIN>db2start
要将网关认证类型设置成 SERVER,您必须在网关机器上发出下列命令:
db2 catalog database myhostdb at node nd1 authentication dcs
db2 terminate
注:认证从不在网关本身上执行。在 DB2 V8 中,必须总是在客户机或主机数据库服务器上执行认证。
DB2 权限控制数据库安全性计划的以下几方面:
授予用户的权限级别
允许用户运行的命令
允许用户读和/或修改的数据
允许用户创建、修改和/或删除的数据库对象 #p#
权限由特权组和较高级别的数据库管理器(实例级别)维护和实用操作组成。在 DB2 所提供的五种权限中,SYSADM、SYSCTRL 和 SYSMAINT 是实例级权限。 这意味着权限(作用的)范围包括实例级命令和对实例内的所有数据库所执行的命令。这些权限只能指派给某个组;可以通过 DBM CFG 文件来进行指派。
DBADM 和 LOAD 权限是为了某个特定的数据库而指定给某个用户或组的。可以用 GRANT 命令来显式地完成这一工作。
通过发出以下命令,用户可以确定他们具有哪些权限及数据库级别的特权:
db2 get authorizations
由于 SYSADM 用户是***允许更新 DBM CFG 的用户,因此他们也是***允许向其它组授予任何 SYS* 权限的用户。下面的示例演示了如何向组 grp1 授予 SYSADM 权限:
db2 update dbm cfg using SYSADM_GROUP grp1
记住,只有将实例停止然后重新启动,上面的更改才会生效。此外,还要记住的是,如果您此时不是以 grp1 的成员身份登录的话,那么您可能就没有重新启动实例的权限!您将不得不先注销然后再用正确的组中的标识重新登录,或者将您的当前标识添加到 grp1 中。
具有 SYSCTRL 权限的用户可以在实例内执行所有管理和维护命令。然而,与 SYSADM 用户不同的是,除非向他们授予了访问数据库内任何数据所需的特权,否则他们就不能访问这些数据。SYSCTRL 用户可以对实例内的任何数据库执行的命令示例有: #p#
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
具有 SYSMAINT 权限的用户可以发出的命令是具有 SYSCTRL 权限的用户所允许发出的命令的子集。SYSCTRL 用户只能执行与维护有关的任务,如:
db2start/db2stop
db2 backup/restore/rollforward database #p#
db2 runstats (可以对任何表执行该命令)
db2 update db cfg for database dbname
注意:具有 SYSMAINT 权限的用户不能够创建或删除数据库或表空间。除非向他们授予了访问数据库内任何数据所需的特权,否则他们也不能访问这些数据。
如果具有 SYSADM 权限,那么您可以使用下列命令来将 SYSMAINT 权限指派给某个组:
db2 update dbm cfg using SYSMAINT_GROUP group name
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 (任何表) #p#
DBADM 用户还被自动授予数据库对象及其内容的全部特权。由于 DBADM 权限是一种数据库级权限,因此可以将它指派给用户和组。下列命令演示了授予 DBADM 权限的几种不同方法。
db2 create database test
这条命令将对名为 test 的数据库的隐式 DBADM 权限授予发出该命令的用户。
db2 connect to sample
db2 grant dbadm on database to user tst1
只有 SYSADM 用户才能发出这条命令;它将对样本数据库的 DBADM 权限授予用户 tst1。注:在授予 DBADM 权限之前,进行授予权限操作的用户必须已经连接到了样本数据库上。
db2 grant dbadm on database to group grp1
这条命令将 DBADM 权限授予组 grp1 中的所有人。同样,只有 SYSADM 用户才能发出这条命令。
LOAD 权限也被当作数据库级别的权限,因此可以将它授予用户和组。正如同它的名字所暗示的那样,LOAD 权限允许用户对表发出 LOAD 命令。在填充具有大量数据的表时,通常使用 LOAD 这种执行更快的命令来替代插入或导入命令。根据您希望执行的 LOAD 类型的不同,仅仅具有 LOAD 权限可能还是不够的。还可能需要对该表具有特定特权。
具有 LOAD 权限的用户可以运行下列命令:
db2 quiesce tablespaces for table #p#
db2 list tablespaces
db2 runstats (任何表)
db2 load insert (必须对表具有插入特权)
db2 load restart/terminate after load insert (必须对表具有插入特权)
db2 load replace (必须对表具有插入和删除特权)
db2 load restart/terminate after load replace (必须对表具有插入和删除特权)
只有具有 SYSADM 或 DBADM 权限的用户才允许给用户或组授予或取消 LOAD 权限。下列示例演示了 LOAD 权限是如何允许我们的用户将数据 LOAD 到名为 sales 的表中的。假定已经发出了命令 db2 connect to sample。
db2 grant load on database to user tst1
db2 grant insert on table sales to user tst1
有了 LOAD 权限和插入特权,tst1 就可以对 sales 表发出 LOAD INSERT、LOAD RESTART 或在 LOAD INSERT 之后发出 TERMINATE。
db2 grant load on database to group grp1
db2 grant delete on table sales to group grp1
db2 grant insert on table sales to group grp1
有了 LOAD 权限以及删除和插入特权,grp1 中的任何成员都可以对 sales 表发出 LOAD REPLACE、LOAD RESTART 或者在 LOAD REPLACE 之后发出 TERMINATE。