我们注意到安装DB2后,必须先创建三个用户才能进行建库和建立管理服务器,创建了如下用户和组:
那么其具体的含义是什么呢?
实例所有者(db2inst1) DB2 实例是在实例所有者主目录中创建的。此用户控制所有 DB2 进程并拥有由包含在该实例中的数据库所使用的所有文件系统和设备。缺省用户为 db2inst1,缺省组为 db2iadm1。当使用 DB2 安装向导时,缺省的操作是为 DB2 实例创建一个新用户 db2inst1,如果此用户名已存在,则 DB2 将尝试创建另一个用户名 db2inst2。如果这个用户名也存在,DB2 将继续搜索用户名 db2inst3、db2inst4 等等,直到它标识出系统上不是现有用户的第一个用户名作为缺省的实例所有者 ID。
受防护的用户 (db2fenc1) 受防护的用户用于在 DB2 数据库所使用的地址空间之外运行用户定义的函数(UDF)和存储过程。缺省用户为 db2fenc1,缺省组为 db2fadm1。如果不需要此安全级别(例如,在测试环境中),则可以使用实例所有者作为受防护的用户。 DB2 管理服务器用户 (dasusr1) DB2 管理服务器用户的用户标识用于在系统上运行
DB2 管理服务器,缺省用户为 dasusr1,缺省组为 dasadm1。DB2 GUI 工具也会使用此用户标识来对本地服务器数据库实例和数据库执行管理任务。此用户不包含任何数据库,且每台机器仅有一个管理服务器。例如,一个管理服务器可以服务多个数据库实例。
接下来我们了解下DB2的授权机制:
DB2 授权--授权简介
DB2 授权控制数据库安全计划的以下方面:
用户被授予的权限级别
允许用户运行的命令
允许用户读取和/或修改的数据
允许用户创建、修改和/或删除的数据库对象
授权由特权组和高级数据库管理程序(实例级)维护和实用操作组成。在 DB2 可用的 5 种权限中,SYSADM、SYSCTRL 和 SYSMAINT 是实例级权限。这意味着它们的范围包含实例级命令以及针对这个实例中的所有数据库的命令。这些权限只能分配给组;可以通过 DBM CFG 文件分配这些权限。
针对特定数据库的 DBADM 和 LOAD 权限可以分配给用户或用户组。可以使用 GRANT 命令显式地分配这些权限。
以下几节描述如何分配每种权限以及允许拥有此权限的用户执行哪些命令。注意,任何提到组成员关系的地方都假设在操作系统级上已经定义了这些用户和组名。
用户可以通过发出以下命令来判断自己拥有哪些权限和数据库级特权:
db2 get authorizations
获得 SYSADM 权限
DB2 中的 SYSADM 权限就像是 UNIX 上的根权限或 Windows 上的 Administrator 权限。对一个 DB2 实例拥有 SYSADM 权限的用户能够对这个实例、这个实例中的任何数据库以及这些数据库中的任何对象发出任何 DB2 命令。他们还能够访问数据库中的数据以及对其他用户授予或撤消特权或权限。只允许 SYSADM 用户更新 DBM CFG 文件。
SYSADM 权限由 DBM CFG 文件中的 SYSADM_GROUP 参数控制。在 Windows 上,在创建实例时,这个参数设置为 Administrator(但是,如果发出命令 db2 get dbm cfg,它看起来是空的)。在 UNIX 上,它设置为创建这个实例的用户的主组。
因为只允许 SYSADM 用户更新 DBM CFG 文件,所以只有他们能够向其他组授予任何 SYS* 权限。以下示例演示如何向 db2grp1 组授予 SYSADM 权限:
db2 update dbm cfg using SYSADM_GROUP db2grp1
请记住,这一修改直到实例停止并重新启动之后才会生效。还要记住,如果您当前不是作为 db2grp1 组的成员登录的,那么就无权重新启动实例!您必须注销并用正确的组中的 ID 重新登录,或者将自己当前的 ID 添加进 db2grp1 组中。
获得 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
获得 SYSMAINT 权限
拥有 SYSMAINT 权限的用户可以发出的命令是拥有 SYSCTRL 权限的用户可以发出的命令的子集。SYSMAINT 用户只能执行与维护相关的任务,比如:
db2start/db2stop
db2 backup/restore/rollforward database
db2 runstats(针对任何表)
db2 update db cfg for database dbname
注意,拥有 SYSMAINT 权限的用户不能创建或删除数据库或表空间。他们也不能访问数据库中的任何数据,除非他们被显式地授予访问数据所需的特权。
如果您拥有 SYSADM 权限,那么可以使用以下命令将 SYSMAINT 权限分配给一个组:
db2 update dbm cfg using SYSMAINT_GROUP group name
获得 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 用户还被自动地授予对数据库对象及其内容的所有特权。因为 DBADM 权限是一个数据库级权限,所以它可以被分配给用户和用户组。以下命令演示授予 DBADM 权限的不同方法。
db2 create database test
这个命令将数据库 test 上的 DBADM 权限隐式地授予发出此命令的用户。
db2 connect to sample
db2 grant dbadm on database to user tst1
这个命令只能由 SYSADM 用户发出;它向用户 tst1 授予示例数据库上的 DBADM 权限。注意,在授予 DBADM 权限之前,发出这个命令的用户必须连接到示例数据库。
db2 grant dbadm on database to group db2grp1
这个命令将 DBADM 权限授予 db2grp1 组中的每个用户。同样,只有 SYSADM 用户能够发出这个命令。
获得 LOAD 权限
LOAD 权限是一个数据库级权限,所以它可以被分配给用户和用户组。顾名思义,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(必须有表上的插入和删除特权)
只有拥有 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
用户作用 | 用户名 | 组名 |
实例所有者 | db2inst1 | db2iadm1 |
受保护用户 | db2fenc1 | db2fadm1 |
管理服务器用户 | dasusr1 | dbasdm1 |
那么其具体的含义是什么呢?
实例所有者(db2inst1) DB2 实例是在实例所有者主目录中创建的。此用户控制所有 DB2 进程并拥有由包含在该实例中的数据库所使用的所有文件系统和设备。缺省用户为 db2inst1,缺省组为 db2iadm1。当使用 DB2 安装向导时,缺省的操作是为 DB2 实例创建一个新用户 db2inst1,如果此用户名已存在,则 DB2 将尝试创建另一个用户名 db2inst2。如果这个用户名也存在,DB2 将继续搜索用户名 db2inst3、db2inst4 等等,直到它标识出系统上不是现有用户的第一个用户名作为缺省的实例所有者 ID。
受防护的用户 (db2fenc1) 受防护的用户用于在 DB2 数据库所使用的地址空间之外运行用户定义的函数(UDF)和存储过程。缺省用户为 db2fenc1,缺省组为 db2fadm1。如果不需要此安全级别(例如,在测试环境中),则可以使用实例所有者作为受防护的用户。 DB2 管理服务器用户 (dasusr1) DB2 管理服务器用户的用户标识用于在系统上运行
DB2 管理服务器,缺省用户为 dasusr1,缺省组为 dasadm1。DB2 GUI 工具也会使用此用户标识来对本地服务器数据库实例和数据库执行管理任务。此用户不包含任何数据库,且每台机器仅有一个管理服务器。例如,一个管理服务器可以服务多个数据库实例。
接下来我们了解下DB2的授权机制:
DB2 授权--授权简介
DB2 授权控制数据库安全计划的以下方面:
用户被授予的权限级别
允许用户运行的命令
允许用户读取和/或修改的数据
允许用户创建、修改和/或删除的数据库对象
授权由特权组和高级数据库管理程序(实例级)维护和实用操作组成。在 DB2 可用的 5 种权限中,SYSADM、SYSCTRL 和 SYSMAINT 是实例级权限。这意味着它们的范围包含实例级命令以及针对这个实例中的所有数据库的命令。这些权限只能分配给组;可以通过 DBM CFG 文件分配这些权限。
针对特定数据库的 DBADM 和 LOAD 权限可以分配给用户或用户组。可以使用 GRANT 命令显式地分配这些权限。
以下几节描述如何分配每种权限以及允许拥有此权限的用户执行哪些命令。注意,任何提到组成员关系的地方都假设在操作系统级上已经定义了这些用户和组名。
用户可以通过发出以下命令来判断自己拥有哪些权限和数据库级特权:
db2 get authorizations
获得 SYSADM 权限
DB2 中的 SYSADM 权限就像是 UNIX 上的根权限或 Windows 上的 Administrator 权限。对一个 DB2 实例拥有 SYSADM 权限的用户能够对这个实例、这个实例中的任何数据库以及这些数据库中的任何对象发出任何 DB2 命令。他们还能够访问数据库中的数据以及对其他用户授予或撤消特权或权限。只允许 SYSADM 用户更新 DBM CFG 文件。
SYSADM 权限由 DBM CFG 文件中的 SYSADM_GROUP 参数控制。在 Windows 上,在创建实例时,这个参数设置为 Administrator(但是,如果发出命令 db2 get dbm cfg,它看起来是空的)。在 UNIX 上,它设置为创建这个实例的用户的主组。
因为只允许 SYSADM 用户更新 DBM CFG 文件,所以只有他们能够向其他组授予任何 SYS* 权限。以下示例演示如何向 db2grp1 组授予 SYSADM 权限:
db2 update dbm cfg using SYSADM_GROUP db2grp1
请记住,这一修改直到实例停止并重新启动之后才会生效。还要记住,如果您当前不是作为 db2grp1 组的成员登录的,那么就无权重新启动实例!您必须注销并用正确的组中的 ID 重新登录,或者将自己当前的 ID 添加进 db2grp1 组中。
获得 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
获得 SYSMAINT 权限
拥有 SYSMAINT 权限的用户可以发出的命令是拥有 SYSCTRL 权限的用户可以发出的命令的子集。SYSMAINT 用户只能执行与维护相关的任务,比如:
db2start/db2stop
db2 backup/restore/rollforward database
db2 runstats(针对任何表)
db2 update db cfg for database dbname
注意,拥有 SYSMAINT 权限的用户不能创建或删除数据库或表空间。他们也不能访问数据库中的任何数据,除非他们被显式地授予访问数据所需的特权。
如果您拥有 SYSADM 权限,那么可以使用以下命令将 SYSMAINT 权限分配给一个组:
db2 update dbm cfg using SYSMAINT_GROUP group name
获得 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 用户还被自动地授予对数据库对象及其内容的所有特权。因为 DBADM 权限是一个数据库级权限,所以它可以被分配给用户和用户组。以下命令演示授予 DBADM 权限的不同方法。
db2 create database test
这个命令将数据库 test 上的 DBADM 权限隐式地授予发出此命令的用户。
db2 connect to sample
db2 grant dbadm on database to user tst1
这个命令只能由 SYSADM 用户发出;它向用户 tst1 授予示例数据库上的 DBADM 权限。注意,在授予 DBADM 权限之前,发出这个命令的用户必须连接到示例数据库。
db2 grant dbadm on database to group db2grp1
这个命令将 DBADM 权限授予 db2grp1 组中的每个用户。同样,只有 SYSADM 用户能够发出这个命令。
获得 LOAD 权限
LOAD 权限是一个数据库级权限,所以它可以被分配给用户和用户组。顾名思义,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(必须有表上的插入和删除特权)
只有拥有 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。
From: http://bbs.51cto.com/thread-677983-1.html