转自:http://gocom.primeton.com/blog16274_23254.htm
db2权限控制
1. DB2 权限控制数据库安全性计划的以下几方面:
- 授予用户的权限级别
- 允许用户运行的命令
- 允许用户读和/或修改的数据
- 允许用户创建、修改和/或删除的数据库对象
在 DB2 所提供的五种权限中,SYSADM、SYSCTRL 和 SYSMAINT 是实例级权限。 这意味着权限(作用的)范围包括实例级命令和对实例内的所有数据库所执行的命令。这些权限只能指派给某个组;可以通过 DBM CFG 文件来进行指派。
DBADM 和 LOAD 权限是为了某个特定的数据库而指定给某个用户或组的。可以用 GRANT 命令来显式地完成这一工作。
通过发出以下命令,用户可以确定他们具有哪些权限及数据库级别的特权:
db2 get authorizations
注:对组成员资格的任何引用都意味着已经在操作系统级别定义了用户和组名称。
2. DB2 中的 SYSADM 权限类似于 UNIX 上的 root 权限或 Windows 上的 Administrator 权限。对某个 DB2 实例具备 SYSADM 权限的用户能够对该实例、该实例内的任何数据库以及这些数据库内的任何对象发出任何DB2 命令。他们还能够访问数据库内的数据,并能够授予或取消特权和权限。SYSADM 用户是唯一允许更新 DBM CFG 文件的用户。
SYSADM 权限是通过 DBM CFG 文件中的 SYSADM_GROUP 参数来控制的。在创建实例时,在 Windows 上,该参数被设置成 Administrator(虽然在您发出命令 db2 get dbm cfg
时该参数好象为空)。在 UNIX上,该参数被设置成创建实例的主用户组。由于 SYSADM 用户是唯一允许更新 DBM CFG 的用户,因此他们也是唯一允许向其它组授予任何 SYS* 权限的用户。
记住,只有将实例停止然后重新启动,上面的更改才会生效。
3. 具有 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
4. 具有 SYSMAINT 权限的用户可以发出的命令是具有 SYSCTRL 权限的用户所允许发出的命令的子集。SYSCTRL 用户只能执行与维护有关的任务。如:
- db2start/db2stop
- db2 backup/restore/rollforward database
- db2 runstats (可以对任何表执行该命令)
- db2 update db cfg for database dbname
注意:具有 SYSMAINT 权限的用户不能够创建或删除数据库或表空间。除非向他们授予了访问数据库内任何数据所需的特权,否则他们也不能访问这些数据。
5.总的来说,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 用户还被自动授予数据库对象及其内容的全部特权。由于 DBADM 权限是一种数据库级权限,因此可以将它指派给用户和组。
6. LOAD 权限允许用户对表发出 LOAD 命令。在填充具有大量数据的表时,通常使用 LOAD 这种执行更快的命令来替代插入或导入命令。根据您希望执行的 LOAD 类型的不同,仅仅具有 LOAD 权限可能还是不够的。还可能需要对该表具有特定特权。
具有 LOAD 权限的用户可以运行下列命令:
- db2 quiesce tablespaces for table
- 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 (必须对表具有插入和删除特权)