`
hai0378
  • 浏览: 529658 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

DB2创建用户及授权的研究

 
阅读更多

1、创建系统用户dbuser/ehong隶属于db2users   

2、C:\Program Files\IBM\SQLLIB\BIN>db2 connect to AKZXTEST
数据库连接信息
 数据库服务器         = DB2/NT 9.7.3
 SQL 授权标识         = ADMINIST...
 本地数据库别名       = AKZXTEST

3、给用户授权

授予连接权限
C:\Program Files\IBM\SQLLIB\BIN>db2 grant connect on database to user dbuser
DB20000I  SQL 命令成功完成。 

这里可以授予的数据库级特权有:

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

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

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

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

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

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

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

CREATE_EXTERNAL_ROUTINE: 用户可以创建供应用程序和数据库的其他用户使用的过程。

secadm:安全性管理员

Dbadm:DBADM 用户对一个数据库有几乎完全的控制能力。DBADM 用户不能执行某些维护或管理任务

4、测试连接
C:\Program Files\IBM\SQLLIB\BIN>db2 connect to AKZXTEST user dbuser  using ehong
数据库连接信息
 数据库服务器         = DB2/NT 9.7.3
 SQL 授权标识         = DBUSER
 本地数据库别名       = AKZXTEST

###############################################

  db2数据库特权大体上分成两类:数据库级特权(针对数据库中的所有对象)和对象级特权(与特定的对象相关联)。

1、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 用户能够发出这个命令。

2、 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。 

3.其他特权
用户可以拥有的数据库级特权有:

* CREATETAB: 用户可以在数据库中创建表。
* BINDADD: 用户可以使用 BIND 命令在数据库中创建包。
* CONNECT: 用户可以连接数据库。
* CREATE_NOT_FENCED: 用户可以创建 unfenced 用户定义函数(UDF)。
* IMPLICIT_SCHEMA: 用户可以在数据库中隐式地创建模式,而不需要使用 CREATE SCHEMA 命令。
* LOAD: 用户可以将数据装载进表中。
* QUIESCE_CONNECT: 用户可以访问处于静默(quiesced)状态的数据库。
* CREATE_EXTERNAL_ROUTINE: 用户可以创建供应用程序和数据库的其他用户使用的过程。 

数据库对象 包括表、视图、索引、模式和包。幸运的是,大多数对象级特权的意义无需解释。下表总结了这些特权。
特权名称 相关对象 描述
CONTROL 表、视图、索引、包、别名、不同的类型、用户定义函数、序列 提供对对象的全部权限。拥有这种特权的用户还可以向其他用户授予或撤消对对象的特权。
DELETE 表、视图 允许用户从对象中删除记录。
INSERT 表、视图 允许用户通过 INSERT 或 IMPORT 命令将记录插入对象中。
SELECT 表、视图 提供使用选择语句来查看对象内容的能力。
UPDATE 表、视图 允许用户使用更新语句修改对象中的记录。
ALTER 表 允许用户使用更改语句更改对象定义。
INDEX 表 允许用户使用创建索引语句在对象上创建索引。
REFERENCES 表 提供在对象上创建或删除外键约束的能力。
BIND 包 允许用户重新绑定现有的包。
EXECUTE 包、过程、函数、方法 允许用户执行包和例程。
ALTERIN 模式 允许用户修改模式中的对象定义。
CREATEIN 模式 允许用户在模式中创建对象。
DROPIN 模式 允许用户删除模式中的对象。
关于对象级特权的信息存储在系统编目视图中。视图名称是 syscat.tabauth、syscat.colauth、syscat.indexauth、syscat.schemaauth、syscat.routineauth 和 syscat.packageauth。
显式特权
可以使用 GRANT 和 REVOKE 命令显式地 对用户或组授予或撤消特权。我们来看看如何在各种对象上使用这些命令。
作为拥有 Administrator 权限的用户登录 Windows,打开两个 DB2 命令窗口。在这两个窗口中,确保将 db2instance 变量设置为 DB2!
在第一个窗口中发出以下命»¤:

db2 connect to sample


现在,在第二个窗口中发出以下命令:

db2 connect to sample user test1 using password
                  


请记住,第一个窗口中的命令是由一个拥有 SYSADM 权限的用户发出的。第二个窗口中的命令是由 tst1 发出的,这个用户对示例数据库没有特殊的权限或特权。注意,与示例数据库中的表相关联的模式名是发出 db2sampl 命令的用户的名称。在这些示例中,这个用户是 GMILNE。
现在,在第二个窗口中发出以下命令:

db2 select * from gmilne.org


应该会看到以下响应:

SQL0551N   "TEST1" does not have the privilege to perform operation "SELECT" 
on object "GMILNE.ORG".

为了纠正这种状况,在第一个窗口中发出以下命令:

db2 grant select on table gmilne.org to user test1


现在,前面的命令就会成功!接下来,在第二个窗口中发出一个更复杂的命令:

db2 insert into gmilne.org values (100, 'Tutorial', 1, 'Eastern', 'Toronto')


同样会看到错误消息:

SQL0551N   "TEST1" does not have the privilege to perform operation   "INSERT" 
on object "GMILNE.ORG"

所以,在第一个窗口中输入以下命令:

db2 grant insert on table gmilne.org to group db2grp1

原来失败的 INSERT 命令现在应该会成功完成,因为 test1 是 db2grp1 组的成员。
现在,在第二个窗口中输入以下命令:

db2 drop table gmilne.emp_photo

同样会看到错误消息:

SQL0551N   "TEST1" does not have the privilege to perform operation "DROP TABLE"
on object "GMILNE.EMP_PHOTO".

所以,我们要授予这个特权。在第一个窗口中输入以下命令:

db2 grant dropin on schema gmilne to all


DROP TABLE 命令现在应该会成功完成。
既然已经完成了示例,就可以撤消刚才授予的特权。在第一个窗口中发出以下命令:

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


注意,从组中撤消特权不一定会从这个组的所有成员撤消它。例如,以下命令可以用来从 db2grp1 撤消对 gmilne.org 表的所有特权(CONTROL 除外):

db2 revoke all on table gmilne.org from group db2grp1


但是,test1 用户(他是 db2grp1 的成员)仍然拥有对这个表的选择特权,因为他或她是被直接授予这个特权的。
隐式特权
当发出某些命令时,DB2 可能会自动地授予特权,而不需要像前面看到的那样发出显式的 GRANT 语句。下表总结了会导致数据库管理程序隐式地授予特权的一些命令。注意,当删除创建的对象时,这些特性会隐式地撤消。但是,当显式地撤消更高级的特权时,不会撤消它们。
发出的命令 授予的特权 被授予特权的用户
CREATE TABLE mytable mytable 上的 CONTROL 发出命令的用户
CREATE SCHEMA myschema myschema 上的 CREATEIN、ALTERIN 和 DROPIN,以及将这些特权授予其他用户的能力 发出命令的用户
CREATE VIEW myview myview 上的 CONTROL(只有在用户拥有 myview 定义中引用的所有表和视图上的 CONTROL 特权的情况下) 发出命令的用户
CREATE DATABASE mydb mydb 的系统编目表上的 SELECT,mydb 上的 IMPLICIT_SCHEMA * PUBLIC**
*当用户创建数据库时,隐式地授予这个用户这个数据库上的 DBADM 权限。获得 DBADM 权限就会隐式地授予 CONNECT、CREATETAB、BINDADD、IMPLICIT_SCHEMA 和 CREATE_NOT_FENCED 特权。即使撤消了 DBADM 权限,这个用户仍然会保留这些特权。
**PUBLIC 是一个特殊的 DB2 组,其中包括特定数据库的所有用户。与前面讨论过的其他组不同,PUBLIC 不必在操作系统级进行定义。在默认情况下,会向 PUBLIC 授予一些特权。例如,这个组自动接受数据库上的 CONNECT 特权和编目表上的 SELECT 特权。可以对 PUBLIC 组发出 GRANT 和 REVOKE 命令,比如:

db2 grant select on table sysibm.systables to public
db2 revoke select on table sysibm.systables from public

间接特权
当数据库管理器执行包 时,可以间接获得特权。包中包含一个或多个 SQL 语句,这些语句已经转换为 DB2 用来在内部执行它们的格式。换句话说,包中包含可执行格式的多个 SQL 语句。如果包中的所有语句都是静态的,那么用户只需要有包上的 EXECUTE 特权,就能够成功地执行包中的语句。
例如,假设 db2package1 执行以下静态的 SQL 语句:

db2 select * from org
db2 insert into test values (1, 2, 3)


在这种情况下,拥有 db2package1 上的 EXECUTE 特权的用户会间接地获得 org 表上的 SELECT 特权和 test 表上的 INSERT 特权。

   

################## 关于 DB2 授权的研究 ###################################################

DB2 中有三种主要的安全机制,可以帮助 DBA 实现数据库安全计划:身份验证(authentication)授权(authorization) 特权(privilege)

身份验证是用户在尝试访问 DB2 实例或数据库时遇到的第一种安全特性。DB2 身份验证与底层操作系统的安全特性紧密协作来检验用户 ID 和密码。DB2 还可以利用 Kerberos 这样的安全协议对用户进行身份验证。

授权决定用户和/或用户组可以执行的操作以及他们可以访问的数据对象。用户执行高级数据库和实例管理操作的能力由指派给他们的权限决定。在 DB2 中有 5 种不同的权限级别:SYSADM、SYSCTRL、SYSMAINT、DBADM 和 LOAD。

特权的粒度比授权要细,可以分配给用户和/或用户组。特权定义用户可以创建或删除的对象。它们还定义用户可以用来访问对象(比如表、视图、索引和包)的命令。DB2 9 中新增的一个概念是基于标签的访问控制(LBAC),它允许以更细的粒度控制谁有权访问单独的行和/或列。

1.DB2身份验证

DB2 使用身份验证类型 决定在什么地方进行身份验证。例如,在客户机 - 服务器环境中,是客户机还是服务器检验用户的 ID 和密码?在客户机 - 网关 - 主机环境中,是客户机还是主机检验用户的 ID 和密码? 可以在DBM CFG中指定相应的验证类型:

DB2 GET DBM CFG
Server Connection Authentication          (SRVCON_AUTH) = KERBEROS
Database manager authentication        (AUTHENTICATION) = SERVER_ENCRYPT
那么在连接实例时会使用 SERVER_ENCRYPT。但是在连接数据库时会使用 KERBEROS 身份验证。

在客户机 - 网关 - 主机环境中,这些身份验证选项在客户机和网关上设置,而不是在主机上。

类型 描述
SERVER 身份验证在服务器上进行。
SERVER_ENCRYPT 身份验证在服务器上进行。密码在客户机上进行加密,然后再发送到服务器。
CLIENT 身份验证在客户机上进行.
*KERBEROS 由 Kerberos 安全软件执行身份验证。
*KRB_SERVER_ENCRYPT 如果客户机设置是 KERBEROS,那么由 Kerberos 安全软件执行身份验证。否则使用 SERVER_ENCRYPT。
DATA_ENCRYPT 身份验证在服务器上进行。服务器接受加密的用户 ID 和密码,并对数据进行加密。这个选项的操作方式与 SERVER_ENCRYPT 相同,但是数据也要加密。
DATA_ENCRYPT_CMP 身份验证方式与 DATA_ENCRYPT 相同,但是允许不支持 DATA_ENCRYPT 的老式客户机使用 SERVER_ENCRYPT 身份验证进行连接。在这种情况下,数据不进行加密。如果进行连接的客户机支持 DATA_ENCRYPT,就会进行数据加密,而不能降级到 SERVER_ENCRYPT 身份验证。这个身份验证类型只在服务器的数据库管理程序配置文件中是有效的,而且在客户机或网关实例上使用 CATALOG DATABASE 时是无效的。
GSSPLUGIN 身份验证方式由一个外部 GSS-API 插件决定。
GSS_SERVER_ENCRYPT 身份验证方式由一个外部 GSS-API 插件决定。在客户机不支持服务器的 GSS-API 插件之一的情况下,使用 SERVER_ENCRYPT 身份验证。

2.授权

授权由特权组和高级数据库管理程序(实例级)维护和实用操作组成。在 DB2 可用的 5 种权限中,SYSADM、SYSCTRL 和 SYSMAINT 是实例级权限。这意味着它们的范围包含实例级命令以及针对这个实例中的所有数据库的命令。这些权限只能分配给组;可以通过 DBM CFG 文件分配这些权限。

针对特定数据库的 DBADM 和 LOAD 权限可以分配给用户或用户组。可以使用 GRANT 命令显式地分配这些权限。

获得 SYSADM 权限

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

获得 SYSCTRL 权限

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

db2start/db2stopdb2 create/drop databasedb2 create/drop tablespacedb2 backup/restore/rollforward databasedb2 runstats(针对任何表) db2 update db cfg for database dbname

拥有 SYSADM 权限的用户可以使用以下命令将 SYSCTRL 分配给一个组:

db2 update dbm cfg using SYSCTRL_GROUP group name

 

获得 SYSMAINT 权限

拥有 SYSMAINT 权限的用户可以发出的命令是拥有 SYSCTRL 权限的用户可以发出的命令的子集。SYSMAINT 用户只能执行与维护相关的任务,比如:

db2start/db2stopdb2 backup/restore/rollforward databasedb2 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 databasedrop/create tablespacebackup/restore databaseupdate db cfg for database db name

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

db2 create/drop tabledb2 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 tabledb2 list tablespacesdb2 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。 

3.特权

用户可以拥有的数据库级特权有:

CREATETAB: 用户可以在数据库中创建表。 BINDADD: 用户可以使用 BIND 命令在数据库中创建包。 CONNECT: 用户可以连接数据库。 CREATE_NOT_FENCED: 用户可以创建 unfenced 用户定义函数(UDF)。 IMPLICIT_SCHEMA: 用户可以在数据库中隐式地创建模式,而不需要使用 CREATE SCHEMA 命令。 LOAD: 用户可以将数据装载进表中。 QUIESCE_CONNECT: 用户可以访问处于静默(quiesced)状态的数据库。 CREATE_EXTERNAL_ROUTINE: 用户可以创建供应用程序和数据库的其他用户使用的过程。

数据库对象 包括表、视图、索引、模式和包。幸运的是,大多数对象级特权的意义无需解释。下表总结了这些特权。

特权名称 相关对象 描述
CONTROL 表、视图、索引、包、别名、不同的类型、用户定义函数、序列 提供对对象的全部权限。拥有这种特权的用户还可以向其他用户授予或撤消对对象的特权。
DELETE 表、视图 允许用户从对象中删除记录。
INSERT 表、视图 允许用户通过 INSERT 或 IMPORT 命令将记录插入对象中。
SELECT 表、视图 提供使用选择语句来查看对象内容的能力。
UPDATE 表、视图 允许用户使用更新语句修改对象中的记录。
ALTER 允许用户使用更改语句更改对象定义。
INDEX 允许用户使用创建索引语句在对象上创建索引。
REFERENCES 提供在对象上创建或删除外键约束的能力。
BIND 允许用户重新绑定现有的包。
EXECUTE 包、过程、函数、方法 允许用户执行包和例程。
ALTERIN 模式 允许用户修改模式中的对象定义。
CREATEIN 模式 允许用户在模式中创建对象。
DROPIN 模式 允许用户删除模式中的对象。

关于对象级特权的信息存储在系统编目视图中。视图名称是syscat.tabauthsyscat.colauthsyscat.indexauthsyscat.schemaauthsyscat.routineauth syscat.packageauth

显式特权

可以使用 GRANT 和 REVOKE 命令显式地 对用户或组授予或撤消特权。我们来看看如何在各种对象上使用这些命令。

作为拥有 Administrator 权限的用户登录 Windows,打开两个 DB2 命令窗口。在这两个窗口中,确保将db2instance 变量设置为 DB2

在第一个窗口中发出以下命»¤:

db2 connect to sample

现在,在第二个窗口中发出以下命令:
db2 connect to sample user test1 using password

请记住,第一个窗口中的命令是由一个拥有 SYSADM 权限的用户发出的。第二个窗口中的命令是由 tst1 发出的,这个用户对示例数据库没有特殊的权限或特权。注意,与示例数据库中的表相关联的模式名是发出 db2sampl命令的用户的名称。在这些示例中,这个用户是 GMILNE

现在,在第二个窗口中发出以下命令:

db2 select * from gmilne.org

应该会看到以下响应:
SQL0551N "TEST1" does not have the privilege to perform operation "SELECT" on object "GMILNE.ORG".

为了纠正这种状况,在第一个窗口中发出以下命令:

db2 grant select on table gmilne.org to user test1

现在,前面的命令就会成功!接下来,在第二个窗口中发出一个更复杂的命令:
db2 insert into gmilne.org values (100, 'Tutorial', 1, 'Eastern', 'Toronto')

同样会看到错误消息:
SQL0551N "TEST1" does not have the privilege to perform operation "INSERT" on object "GMILNE.ORG"

所以,在第一个窗口中输入以下命令:

db2 grant insert on table gmilne.org to group db2grp1

原来失败的 INSERT 命令现在应该会成功完成,因为 test1  db2grp1 组的成员。

现在,在第二个窗口中输入以下命令:

db2 drop table gmilne.emp_photo

同样会看到错误消息:

SQL0551N "TEST1" does not have the privilege to perform operation "DROP TABLE" on object "GMILNE.EMP_PHOTO".

所以,我们要授予这个特权。在第一个窗口中输入以下命令:

db2 grant dropin on schema gmilne to all

DROP TABLE 命令现在应该会成功完成。

既然已经完成了示例,就可以撤消刚才授予的特权。在第一个窗口中发出以下命令:

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

注意,从组中撤消特权不一定会从这个组的所有成员撤消它。例如,以下命令可以用来从 db2grp1 撤消对 gmilne.org 表的所有特权(CONTROL 除外):
db2 revoke all on table gmilne.org from group db2grp1

但是,test1 用户(他是 db2grp1 的成员)仍然拥有对这个表的选择特权,因为他或她是被直接授予这个特权的。

隐式特权

当发出某些命令时,DB2 可能会自动地授予特权,而不需要像前面看到的那样发出显式的 GRANT 语句。下表总结了会导致数据库管理程序隐式地授予特权的一些命令。注意,当删除创建的对象时,这些特性会隐式地撤消。但是,当显式地撤消更高级的特权时,不会撤消它们。

发出的命令 授予的特权 被授予特权的用户
CREATE TABLE mytable mytable 上的 CONTROL 发出命令的用户
CREATE SCHEMA myschema myschema 上的 CREATEIN、ALTERIN 和 DROPIN,以及将这些特权授予其他用户的能力 发出命令的用户
CREATE VIEW myview myview 上的 CONTROL(只有在用户拥有 myview 定义中引用的所有表和视图上的 CONTROL 特权的情况下) 发出命令的用户
CREATE DATABASE mydb mydb 的系统编目表上的 SELECT,mydb 上的 IMPLICIT_SCHEMA * PUBLIC**

*当用户创建数据库时,隐式地授予这个用户这个数据库上的 DBADM 权限。获得 DBADM 权限就会隐式地授予 CONNECT、CREATETAB、BINDADD、IMPLICIT_SCHEMA 和 CREATE_NOT_FENCED 特权。即使撤消了 DBADM 权限,这个用户仍然会保留这些特权。

**PUBLIC 是一个特殊的 DB2 组,其中包括特定数据库的所有用户。与前面讨论过的其他组不同,PUBLIC 不必在操作系统级进行定义。在默认情况下,会向 PUBLIC 授予一些特权。例如,这个组自动接受数据库上的 CONNECT 特权和编目表上的 SELECT 特权。可以对 PUBLIC 组发出 GRANT 和 REVOKE 命令,比如:

db2 grant select on table sysibm.systables to public db2 revoke select on table sysibm.systables from public

间接特权

当数据库管理器执行 时,可以间接获得特权。包中包含一个或多个 SQL 语句,这些语句已经转换为 DB2 用来在内部执行它们的格式。换句话说,包中包含可执行格式的多个 SQL 语句。如果包中的所有语句都是静态的,那么用户只需要有包上的 EXECUTE 特权,就能够成功地执行包中的语句。

例如,假设 db2package1 执行以下静态的 SQL 语句:

db2 select * from orgdb2 insert into test values (1, 2, 3)

在这种情况下,拥有 db2package1 上的 EXECUTE 特权的用户会间接地获得 org 表上的 SELECT 特权和 test 表上的 INSERT 特权。

分享到:
评论

相关推荐

    DB2 习题+认证指南

    3. **数据库创建与管理**:了解如何创建数据库,设置数据库参数,以及管理数据库的安全性,如用户权限、角色和授权。 4. **表和索引**:理解表的结构,包括主键、外键、索引的类型(B树、位图、唯一索引、非唯一...

    DB2部署指导

    - 授权机制(如安全性和用户权限设置)。 - 配置参数调整(优化性能)。 - 其他因素如备份恢复策略等。 #### 二、DB2服务器部署细节 - **服务器部署规划**: - **系统要求**:硬件规格、操作系统版本等。 - *...

    db2培训认证资料730

    5. **安全性**:理解DB2的安全模型,包括用户权限、角色、认证和授权。学习如何设置访问控制和审计功能,确保数据安全。 6. **故障排查与诊断**:了解DB2的日志文件、错误消息和诊断工具,学习如何定位和解决常见...

    IBM内部关于DB2数据库的中文翻译版资料

    - **安全管理**:实现数据库级别的用户认证、授权和审计,保障数据安全。 ### DB2 GUI的操作指南 根据部分目录内容,可以看出这份资料包含了从基础到高级的DB2 GUI操作指南,具体包括: 1. **DB2 GUI介绍**:概述...

    db2 9 730 中文教程

    在简要介绍 DB2 对象之后,我们将研究用来创建、访问和操作 DB2 对象的不同工具。 • 第 4 部分:处理 DB2 数据 本教程讲解结构化查询语言(Structured Query Language,SQL),帮助您理解 DB2 9 如何使用 SQL 操纵...

    Advanced DBA Certification Guide and Reference for DB2

    3. **安全性管理**:掌握用户权限设置,角色创建,以及如何通过SQL授权和审计确保数据安全。 4. **性能调优**:深入理解DB2的查询优化器,学习索引策略,内存管理和SQL性能分析,以提升系统响应速度。 5. **备份与...

    DB2数据库管理最佳实践pdf

    4. **安全性管理**:DB2提供了用户权限管理、角色授权和加密功能,以保护数据免受未授权访问。管理员需熟悉如何设置和管理这些安全机制。 5. **高可用性与灾难恢复**:通过镜像、集群、Log Shipping等技术实现高...

    DB2 V9.5 数据库安全性指南.pdf

    该文档覆盖了Linux、UNIX及Windows平台上的DB2 V9.5版本,并提供了丰富的配置示例与最佳实践,帮助用户理解并实施高级的安全控制策略。 #### 核心知识点 **1. 安全架构与策略** - **DB2安全框架**:介绍DB2 V9.5...

    DB2 Introduction

    创建实例是DB2安装过程的一部分,而数据库是在实例下创建的逻辑存储单元,存储用户数据。CLP(Command Line Processor)是用于管理这些实体的命令行工具。 **安全概念** DB2提供了强大的安全性机制,包括用户权限...

    DB2认证703真题

    通过深入研究"DB2认证703真题"及相关的"v8.application.development.certification.guide.chm"文件,考生可以系统地学习和掌握上述知识点,从而在实际认证考试中取得优异成绩,并在实际工作中更好地运用DB2技术。

    DB2数据库安全性全面介绍

    7. **角色和权限**:DB2支持角色的概念,可以创建预定义的一组权限,然后分配给用户,简化权限管理并提高安全性。 8. **可信计算基(TCB)**:DB2的可信计算基包括了数据库管理系统的所有组件,确保了软件的完整性和...

    db2-cert7302-a4.pdf

    设置用户认证、授权及权限规则。 5. 执行测试查询来验证配置的有效性。 #### 小结 本教程重点介绍了DB2 9的安全特性,包括认证、授权和权限等方面的关键知识点。这些内容不仅对于准备参加DB2认证考试730的考生...

    IBM DB2通用数据库入门

    4. **数据安全**:了解DB2的数据访问控制机制,如用户权限管理、角色、授权和审计,以确保数据的安全性。 5. **备份与恢复**:学习如何对DB2数据库进行备份,以及在数据丢失或系统故障时进行恢复操作,确保数据的...

    IBM认证的DB2 700的考题

    3. **安全性与权限管理**:理解DB2的用户管理和权限控制机制,包括角色、用户、授权和权限的设定。熟悉如何设置和管理数据库对象的访问控制,以及SQL级别的安全策略。 4. **数据库安装与配置**:学习如何在不同的...

    数据库课程设计(DB2)

    4. **数据库安全与权限**:DB2提供用户认证、授权和审计功能,以确保数据的安全性。理解如何设置用户权限、角色和访问控制是数据库管理的重要组成部分。 5. **性能优化**:了解如何通过索引、分区、统计信息收集、...

    DB2数据库管理概念和配置参考

    在DB2中,可以通过创建不同的表空间来优化数据存储,例如,将常用的数据放在高性能的存储设备上,提高访问速度。 #### 3. 数据类型与SQL语句 DB2支持多种数据类型,包括数值、字符、日期时间等,这使得开发者能够...

    DB2入门级教程(其他网站的精品资源)

    7. **安全性**:介绍DB2的用户权限管理,包括角色、权限和授权,以及如何确保数据安全。 接下来,"db2xpc81.pdf"可能是更深入的教程或实战指南,可能会涵盖: 1. **性能调优**:如何通过索引优化、查询改写、内存...

    db2 程序范例

    6. **安全性与权限管理**:这部分示例可能会涉及如何创建和管理数据库用户,设置访问权限,以及如何进行角色和授权操作。 7. **性能优化**:通过示例了解如何使用索引、物化视图、查询优化器等工具来提升DB2的性能...

    ARCGIS9.3全套授权文件

    Engine 9.3的授权可以让你开发GIS应用,而ArcServer93的授权则让你能够部署这些应用并提供服务给远程用户。ArcSDE 9.3的授权则确保了数据的高效管理和共享,特别是在多用户环境中,保证了数据的一致性和完整性。 ...

    IBM-DB2-Universal-Database-SQL-Getting-Started.rar_Getting Start

    9. **安全与权限管理**:学习DB2的安全模型,包括用户身份验证、角色、权限和授权,以及如何保护敏感数据。 10. **案例研究与实践**:通过实际示例,加深对DB2 SQL用法的理解,包括如何处理复杂查询、联接操作和子...

Global site tag (gtag.js) - Google Analytics