DB2 安全性模型概述

我们知道,在 DB2 中,主要存在两种安全机制:用户身份认证及用户授权。身份认证是指哪些用户可以访问数据库系统,它通常是由操作系统或第三方认证工具来完成。授权是指数据库用户可以访问哪些数据库对象,用户授权完全由 DB2 数据库本身来完成。

身份认证

认证就是系统验证用户身份的过程。用户认证是由 DB2 数据库系统外部的安全性工具通过认证安全插件模块来完成的。当您安装 DB2 数据库系统时就包括了依赖于基于操作系统的认证的缺省认证安全插件模块。为方便起见,DB2 数据库管理器还提供了用于 Kerberos 和轻量级目录访问协议(LDAP)的认证插件模块。为了更灵活地适应您特定的认证需要,可以构建您自己的认证安全插件模块。

用户授权

对用户进行认证之后,数据库管理器就会确定是否允许该用户访问 DB2 数据或资源。授权是这样一个过程:DB2 数据库管理器通过此过程来获取有关已认证的用户的信息,指示该用户可以执行哪些数据库操作,该用户可以访问哪些数据对象。

在 DB2 中,主要存在三种形式的权限:管理权限、特权和 LBAC 凭证。

基本上来讲,DB2 中的权限包含两个层次,管理权限处于高一个层次,它是一个集合权限,主要由一组特权构成,主要用来控制数据库的维护及实用程序的操作。特权处于管理权限的下面层次,主要控制特定数据库对象的访问权限。LBAC 凭证属于一种特殊的特权,它为 DBA 提供了在表的行或列级限制读 / 写特权的能力。

管理权限

管理权限主要包括系统级别权限、数据库级别权限两大类。

系统级别权限

系统级别权限主要包括系统管理员(SYSADM)、系统控制(SYSCTRL)、系统维护(SYSMAINT)和系统监视(SYSMON)权限,它提供了不同程度的对实例级别函数的控制权。权限提供一种方法来对特权分组和控制实例、数据库和数据库对象的维护和实用程序操作。

系统级别权限提供了不同程度的对实例级别函数的控制权:

1.SYSADM (系统管理员)权限

SYSADM(系统管理员)权限提供了对数据库管理器所创建和维护的全部资源的控制权。系统管理员拥有下列全部权限:SYSCTRL、SYSMAINT 和 SYSMON 权限。具有 SYSADM 权限的用户负责控制数据库管理器并确保数据的安全和完整性。它主要包含如下权限:

  1. 更新和复原数据库管理器配置参数(DBM CFG),包括指定具有 SYSADM、SYSCTRL、SYSMAIN 和 SYSMON 的组
  2. 授予和撤销表空间特权
  3. 升级和复原数据库

2.SYSCTRL 权限

SYSCTRL 权限提供了对影响系统资源的操作的控制权。例如,具有 SYSCTRL 权限的用户可以创建、更新、启动、停止或删除数据库。此用户还可以启动或停止实例,但不能访问表数据。具有 SYSCTRL 权限的用户还具有 SYSMON 权限。它主要包含如下权限:

  1. 更新数据库、节点或分布式连接服务(DCS) 目录
  2. 复原至新的或现有数据库
  3. 强制用户关闭系统
  4. 创建或删除数据库(注意:自动获取 DBADM 权限)
  5. 创建、删除、或改变表空间
  6. 使用任何表空间

3.SYSMAINT 权限

SYSMAINT 权限提供在所有与实例关联的数据库上执行维护操作所需的权限。具有 SYSMAINT 权限的用户可以更新数据库配置、备份数据库或表空间、复原现有数据库并监视数据库。类似于 SYSCTRL,SYSMAINT 不提供对表数据的访问。具有 SYSMAINT 权限的用户也具有 SYSMON 权限。它主要包含如下权限:

  1. 备份数据库或表空间
  2. 复原至现有数据库
  3. 前滚恢复
  4. 启动或停止实例
  5. 复原或停顿表空间并查询其状态
  6. 运行跟踪
  7. 数据库系统监控器快照
  8. 重新组织表
  9. 受用 runstats 和更新日志历史记录文件

4.SYSMON (系统监视)权限

SYSMON(系统监视)权限提供使用数据库系统监视器所需的权限。它主要包含如下权限:

  1. GET DATABASE MANAGER MONITOR SWITCHES
  2. GET MONITOR SWITCHES
  3. GET SNAPSHOT
  4. LIST 命令:ACTIVE DATABASE、APPLICATIONS、DATABASE PARTION GROUPS、
  5. CS APPLICATIONS、PACKAGES、tables、
  6. ABLESPACE CONTAINERS、TABLESPACES、UTILITIES
  7. RESET MONITOR
  8. UPDATE MONITOR SWITCHES
  9. API:db2GetSnapshot、db2GetSnapshotSize、
  10. db2MonitorSwitches、db2mtrk、db2ResetMonitor
  11. 所有快照表函数,无需运行 SNAP_WRITE_FILE
  12. 可以连接数据库
图 1. 展示了系统级别权限的管理范围及层次关系
图 1. 展示了系统级别权限的管理范围及层次关系

数据库级别权限

安全管理员(SECADM)、数据库管理员(DBADM)、访问控制(ACCESSCTRL)、数据访问(DATAACCESS)、SQL 管理员(SQLADM)、工作负载管理管理员(WLMADM)以及说明(EXPLAIN)权限提供了数据库内的控制权。其他数据库权限包括 LOAD(能够将数据装入到表中)和 CONNECT(能够连接至数据库)。

数据库级别权限提供了数据库内的控制权:

1.DBADM (数据库管理员)

DBADM 权限级别提供对单个数据库的管理权限。此数据库管理员拥有创建对象和发出数据库命令所需的特权。

DBADM 权限只能由具有 SECADM 权限的用户授予。不能将 DBADM 权限授予 PUBLIC。

它主要包含如下权限:

  1. 创建、改变和删除与非安全性有关的对象
  2. 阅读日志文件
  3. 创建、激活和删除事件监视器
  4. 查询表空间的状态
  5. 更新日志历史记录文件
  6. 停顿表空间
  7. 重组索引、表
  8. 使用 RUNSTATS

2. SQLADM (SQL 管理员)

SQLADM 权限级别提供在单个数据库内监视和调整 SQL 语句的管理权限。它可由具有 ACCESSCTRL 或 SECADM 权限的用户授予。

它主要包含如下权限:

  1. CREATE EVENT MONITOR
  2. DROP EVENT MONITOR
  3. FLUSH EVENT MONITOR
  4. SET EVENT MONITOR STATE
  5. FLUSH OPT PROFILE CACHE
  6. FLUSH PACKAGE CACHE
  7. PREPARE
  8. REORG INDEXES/TABLES
  9. RUNSTATS
  10. EXECUTE 特权
  11. 对系统目录表及视图的 SELECT 特权
  12. EXPLAIN
  13. ALTER SERVICE CLASS
  14. ALTER THRESHOLD
  15. ALTER WORK ACTION
  16. SET 和 ALTER WORKLOAD 的某些子句

3. EXPLAIN(说明权限)

EXPLAIN 权限级别提供在没有获得数据访问权的情况下说明查询方案的管理权限。它只能由具有 ACCESSCTRL 或 SECADM 权限的用户授予。

它主要包含如下权限:

  1. EXPLAIN 语句
  2. PREPARE 语句
  3. 对系统定义的书名例程的 EXECUTE 特权

4.WLMADM(工作负载管理管理员)

WLMADM 权限提供管理工作负载管理对象(如服务类、工作操作集、工作类集以及工作负载)的管理权限。它可由具有 ACCESSCTRL 或 SECADM 权限的用户授予。

它主要包含如下权限:

  1. 创建、改变及删除工作负载管理器对象以及对其进行注释
  2. 授予或撤销工作负载特权
  3. 对系统定义的工作负载管理例程的 EXECUTE 特权
  4. 对工作负载赋予 USAGE 特权

5.SECADM(安全管理员)

SECADM 权限级别针对安全性提供对单个数据库的管理权限。安全管理员权限能够管理数据库安全性对象(数据库角色、审计策略、可信上下文、安全标号组件和安全标号)以及授予和撤销所有数据库特权和权限。具有 SECADM 权限的用户可以转移不属于他们的对象的所有权。他们可以使用 AUDIT 语句将审计策略与服务器中的特定数据库或数据库对象关联。

SECADM 权限没有访问存储在表中的数据的固有特权。它只能由具有 SECADM 权限的用户授予。不能将 SECADM 权限授予 PUBLIC。

它主要包含如下权限:

  1. 创建、改变和删除安全性对象以及对其进行注释
  2. 授予和撤销所有特权和权限
  3. TRANSFER OWNERSHIP 语句
  4. 对审计系统定义的例程的 EXECUTE 特权
  5. 对审计系统定义的例程授予 EXECUTE 特权
  6. AUDIT 语句
  7. 对系统目录表及视图的 SELECT 特权
  8. CONNECT 权限

6.ACCESSCTRL(访问控制权限)

ACCESSCTRL 权限级别提供发出以下 GRANT(和 REVOKE)语句的管理权限。ACCESSCTRL 权限只能由具有 SECADM 权限的用户授予。不能将 ACCESSCTRL 权限授予 PUBLIC。

它主要包含如下权限:

  1. 对系统目录表及视图的 SELECT 特权
  2. 授予和撤销 SQLADM、WLMADM、EXPLAIN、BINDADD、CONNECT、CREATETAB、CREATE_EXTERNAL_ROUTINE、CREATE_NOT_FENCED_ROUTINE、IMPLICIT_SCHEMA、

    LOAD 和 QUIESCE_CONNECT

  3. 授予和撤销对全局变量、索引、昵称、程序包、例程、模式、序列、服务器、表、表空间、视图、XSR 对象的所有特权

7.DATAACCESS(数据访问权限)

DATAACCESS 权限级别提供下列特权和权限。它只能由拥有 SECADM 权限的用户授予。不能将 DATAACCESS 权限授予 PUBLIC。

它主要包含如下权限:

  1. LOAD 权限
  2. 对所有表、视图、MQT 和昵称的 SELECT、INSERT、UPDATE 和 DELETE 特权
  3. 对系统目录表及视图的 SELECT 特权
  4. 对所有例程(除系统定义的审计例程)的 EXECUTE 特权
  5. 对所有程序包的 EXECUTE 的特权

8.数据库权限(非管理)

要执行诸如创建表或例程,或者用于将数据装入表等的活动,需要特定数据库权限。例如,使用 load 实用程序将数据装入到表中需要 LOAD 数据库权限(用户还必须具有对表的 INSERT 特权)。

图 2. 展示了数据库级别权限的管理范围及层次关系
图 2. 展示了数据库级别权限的管理范围及层次关系

特权(对象级别权限)

对象级别权限控制对特定数据库对象包括表、视图、索引、模式、程序包的访问权限。对象级别的权限主要包括 CONTROL, DELETE, INSERT, SELECT, UPDATE, ALTER, INDEX, REFERENCES, BIND, EXECUTE, ALTERIN, CREATEIN, DROPIN 等权限。同时,我们也可以通过 grant 及 revoke 命令来对数据库对象进行授权及撤销授权。

基于内容的权限

LBAC 凭证属于一种特殊的特权,它提供了在表的行或列级限制读 / 写特权的能力。

基于标号的访问控制(LBAC)使安全管理员能够准确地确定对于各行各列具有写访问权的用户和具有读访问权的用户。安全管理员通过创建安全策略来配置 LBAC 系统。安全策略描述的是用来确定哪些用户能够访问哪些数据的条件。对于任何一个表,只能使用一个安全策略来保护它,但不同的表可以由不同的安全策略保护。

创建安全策略之后,安全管理员将创建称为安全标号和免除权的数据库对象,这些对象是安全策略的组成部分。安全标号描述一组安全条件。免除权遵循一个规则,即,在拥有免除权的用户访问受安全策略保护的数据时,不需要强制对该用户比较安全标号。

一旦创建安全标号,就可以使其与各个表列和表行相关联以保护存放在那些位置中的数据。受安全标号保护的数据称为受保护数据。安全管理员通过将安全标号授予用户来允许该用户访问受保护数据。当用户尝试访问受保护数据时,该用户的安全标号将与用于保护该数据的安全标号进行比较。

DB2 9.7 安全功能增强

随着内部和外部安全性威胁的数目不断增长,将保护数据安全的任务与管理关键系统的管理任务相隔离十分重要。在 DB2 9.7 中,授权模型已更新以清晰划分系统管理员、数据库管理员和安全性管理员的职责。提供分离职责提供以下功能:

  • 数据库管理员(DBA)保持对数据库操作的完整控制,而不对数据进行任何访问。
  • 您可轻松地将所有安全性和审计控制权交给单独的安全性管理员。
  • 可使用新的权限,以使应用程序开发特权与工作负载管理更加简单。

DB2 9.7 清晰地划分了数据库管理员与安全性管理员的责任,并引入了新的权限,使 DB2 9.7 数据库安全功能得到进一步增强。

系统管理员、安全管理员、数据库管理员、系统监视权限的改变

对系统管理员(具有 SYSADM 权限)的更改

  • DB2 9.7 中,SYSADM 的权限比 DB2 9.5 的权限减小了
  • 具有 SYSADM 权限的用户不再具有隐式 DBADM 权限,因此与版本 9.5 中提供的功能相比,用户可使用的功能有限。
  • 具有 SYSADM 权限的用户不能再授予任何权限或特权,表空间特权除外。
  • UPGRADE DATABASE 命令和 RESTORE DATABASE 命令(对于下级数据库)授予 SYSADM 组 DBADM 权限。为确保 SYSADM 组的成员保留版本 9.5 中的相同特权,这些成员必须被直接授予具有 DATAACCESS 和 ACCESSCTRL 权限的 DBADM 权限,或者必须通过角色的成员资格来拥有这些权限。
  • 要让具有 SYSADM 权限的用户获取的能力与版本 9.5 中相同(授予 SECADM 权限的能力除外),安全性管理员必须显式授予用户 DBADM 权限。注意,安全性管理员授予 DBADM 权限时,缺省情况下会包括新的 DATAACCESS 和 ACCESSCTRL 权限。此操作给予用户的能力与版本 9.5 提供的能力相同。 要让此用户还能授予 SECADM 权限,那么还必须对其授予 SECADM 权限。具有 SECADM 权限时允许此用户执行的操作比作为版本 9.5 系统管理员时能够执行的操作多。例如,他们能够创建角色、可信上下文和审计策略之类的对象。
  • 如果具有 SYSADM 权限的用户创建数据库,那么将自动授予用户对该数据库的 DATAACCESS、ACCESSCTRL、SECADM 和 DBADM 权限,这使得用户可使用的功能与版本 9.5 中一样。

对用户 john 赋予 SYSADM 权限的基本语法如下:

假设用户 john 的组为 admin; 
执行下述命令 , 对用户 john 赋予 SYSADM 权限 : 
 db2 update dbm cfg using sysadm_group admin

对安全性管理员(具有 SECADM 权限)的更改

  • DB2 9.7 中,SECADM 的权限比 DB2 9.5 的权限增大了
  • 具有 SECADM 权限的用户现在可授予和取消所有权限与特权,包括 DBADM 和 SECADM。
  • 安全性管理员现在可授予角色和组 SECADM 权限。在版本 9.5 中,SECADM 只能授予用户。
  • 安全性管理员可通过授予另一用户对审计存储过程和表函数(AUDIT_ARCHIVE、AUDIT_LIST_LOGS 和 AUDIT_DELIM_EXTRACT)的 EXECUTE 特权来将运行它们的责任委托给该用户。
  • 通过授予另一用户新 ACCESSCTRL 权限,安全性管理员可允许该用户授予和取消权限与特权。但是,只有安全性管理员才能授予 SECADM、DBADM 和 ACCESSCTRL 权限。而且,只有安全性管理员才能授予新权限 DATAACCESS,此权限使得用户能够访问特定数据库中的数据。

对用户 john 赋予 SECADM 权限的基本方法如下:

1. 以用户 gyzhang 登录操作系统,创建 sample 数据库:

我们以用户 gyzhang 登录操作系统
创建 sample 数据库,执行命令:db2sampl 
此时,gyzhang 用户拥有 DATAACCESS、ACCESSCTRL、SECADM 和 DBADM 权限

2. 以用户 db2admin 用户连接数据库,将 SECADM 权限授予用户 John:

以用户 db2admin 用户(该用户拥有 SYSADM 权限)连接 sample 数据库

 Db2 connect to sample user db2admin using db2admin 
数据库连接信息

数据库服务器  = DB2/NT 9.7.0 
 SQL 授权标识  = DB2ADMIN 
本地数据库别名  = SAMPLE 


 db2 grant secadm on database to user john 

 DB21034E 该命令被当作 SQL 语句来处理,因为它是无效的“命令行处理器”命令。在
 SQL 处理期间,它返回:
 SQL0552N "DB2ADMIN" 没有执行操作 "GRANT" 的特权。 SQLSTATE=42502 

此时,db2admin 拥有 SYSADM 权限,但没有 SECADM 权限,所以不能进行数据库授权操作。

3. 将 SECADM 权限授予用户 db2admin:

 db2 connect to sample 

  数据库连接信息

数据库服务器  = DB2/NT 9.7.0 
 SQL 授权标识  = GYZHANG 
本地数据库别名  = SAMPLE 


 C:\Documents and Settings\Administrator>db2 grant secadm on database to user db2admin 
 DB20000I SQL 命令成功完成。

4.以用户 db2admin 用户连接数据库,将 SECADM 权限授予用户 John:

 C:\Documents and Settings\Administrator>db2 connect to 
 sample user db2admin using db2admin 

  数据库连接信息

数据库服务器  = DB2/NT 9.7.0 
 SQL 授权标识  = DB2ADMIN 
本地数据库别名  = SAMPLE 


 C:\Documents and Settings\Administrator>db2 grant secadm on
  database to user john 
 DB20000I SQL 命令成功完成。

其它 SECADM 相关授权的命令:

 db2 connect to sample 
 db2 grant dbadm on database to user john 
 db2 grant accessctrl on database to user john 
 db2 grant dataaccess on database to user john 
 db2 grant sqladm on database to user john 
 db2 grant wlmadm on database to user john

对数据库管理员(具有 DBADM 权限)的更改

  • DB2 9.7 中,DBADM 的权限比 DB2 9.5 的权限减小了
  • DBADM 权限不必再包括访问数据以及授予和取消对数据库的特权的能力。
  • 以下权限继续对数据库管理员可用,只要该用户具有 DBADM 权限,但如果 DBADM 权限被取消,那么数据库管理员将失去这些权限。授予 DBADM 权限不再额外授予下列独立数据库权限,原因是它们已经在 DBADM 权限级别被隐式授予权限。
    • BINDADD
    • CONNECT
    • CREATETAB
    • CREATE_EXTERNAL_ROUTINE
    • CREATE_NOT_FENCED_ROUTINE
    • IMPLICIT_SCHEMA
    • QUIESCE_CONNECT
    • LOAD
  • DBADM 权限只能由 SECADM 来授予或撤销

在版本 9.7 之前,当撤销 DBADM 权限时,并不会撤销这些权限。

在版本 9.7 中,这些权限现在包含在 DBADM 权限中。当在版本 9.7 中撤销 DBADM 权限时,这些权限会丢失。

但是,如果当升级至版本 9.7 之前用户已拥有 DBADM 权限,那么撤销 DBADM 权限后,这些权限不会丢失。仅当用户通过拥有在版本 9.7 中所授予的 DBADM 权限获取了这些权限时,在版本 9.7 中撤销 DBADM 权限才会导致用户丢失这些权限。

安全性管理员授予 DBADM 权限时,他们可选择是否给予数据库管理员执行下列操作的能力:

  • 访问数据库中的数据。
  • 授予和取消特权与权限。

安全性管理员可使用 GRANT DBADM ON DATABASE 语句的下列选项来控制这些功能:

  • WITH ACCESSCTRL
  • WITHOUT ACCCESSCTRL
  • WITH DATAACCESS
  • WITHOUT DATAACCCESS

缺省情况下,如果未指定 DATAACCESS 和 ACCESSCTRL 权限,那么会包括这些权限。

对用户 john 赋予 DBADM 权限的基本方法如下:

 C:\Documents and Settings\Administrator>db2 connect to
 sample user db2admin using db2admin 

  数据库连接信息

数据库服务器  = DB2/NT 9.7.0 
 SQL 授权标识  = DB2ADMIN 
本地数据库别名  = SAMPLE 


 C:\Documents and Settings\Administrator>db2 grant dbadm
  without dataaccess without accessctrl on database to user john 
 DB20000I SQL 命令成功完成。

其它 DBADM 相关授权命令:

 db2 connect to sample user db2admin using db2admin 
 db2 grant dbadm on database to user john 
 db2 grant dbadm with dataaccess on database to user john 
 db2 grant dbadm without dataaccess on database to user john 
 db2 grant dbadm with accessctrl on database to user john 
 db2 grant dbadm without accessctrl on database to user john 
 db2 grant dbadm with dataaccess with accessctrl on database to user john 
 db2 grant dbadm without dataaccess without accessctrl on database to user john 
 db2 grant dbadm without dataaccess with accessctrl on database to user john

撤销 DBADM 权限

如果安全管理员已授予包括 DATAACCESS 或 ACCESSCTRL 权限的 DBADM 权限,那么要撤销这些权限,安全管理员必须显式撤销 DATAACCESS 或 ACCESSCTRL 权限。

例如,当安全管理员将 DBADM 权限授予用户时:

 db2 connect to sample user db2admin using db2admin 
 db2 grant dbadm on database to user john

缺省情况下,还会将 DATAACCESS 和 ACCESSCTRL 权限授予 John。

稍后,安全管理员从 John 撤销 DBADM 权限:

 db2 revoke dbadm on database from user john

现在,John 不再拥有 DBADM 权限,但是仍然拥有 DATAACCESS 和 ACCESSCTRL 权限。

要撤销这些仍有的权限,安全管理员需要显式地对它们进行撤销:

 db2 revoke accessctrl, dataaccess on database from user john

对系统监视器(具有 SYSMON 权限)的更改

  • DB2 9.7 中,SYSMON 的权限比 DB2 9.5 的权限增强了
  • SYSMON 权限现在允许您运行db2mtrk命令以报告内存池分配信息
  • 现在允许运行下述 LIST 命令更好地监控数据库系统:

    LIST DATABASE PARTITION GROUPS, LIST DRDA INDOUBT TRANSACTIONS, LIST PACKAGES, LIST TABLES, LIST TABLESPACE CONTAINERS, LIST TABLESPACES, LIST UTILITIES

授予 SYSMON 权限的基本语法如下:

假设用户 john 的组为 admin; 
执行下述命令 , 对用户 john 赋予 SYSMON 权限 : 
 db2 update dbm cfg using sysmon_group admin

DB2 9.7 中的新权限 SQLADM、WLMADM、EXPLAIN

版本 9.7 引入了新的权限以用于工作负载管理(WLMADM)、SQL 调整(SQLADM)以及将说明设施与 SQL 语句配合使用(EXPLAIN)。这些权限允许您授予用户这些职责而不必授予他们 DBADM 权限或针对基本表的实际特权,这些权限或特权给予这些用户的特权将超过完成其工作所需的权限。因此,通过使用这些新权限,可将暴露敏感数据的风险降至最低。

SQL 管理权限(SQLADM)

SQLADM 权限是监视和调整 SQL 语句所需的权限。

SQLADM 权限可由安全管理员(拥有 SECADM 权限)或具有 ACCESSCTRL 权限的用户授予。可以将 SQLADM 权限授予用户、组、角色或 PUBLIC。SQLADM 权限使用户能够执行下列函数:

  • 执行下列 SQL 语句:
  1. CREATE EVENT MONITOR
  2. DROP EVENT MONITOR
  3. EXPLAIN
  4. FLUSH EVENT MONITOR
  5. FLUSH OPTIMIZATION PROFILE CACHE
  6. FLUSH PACKAGE CACHE
  7. PREPARE
  8. REORG INDEXES/TABLE
  9. RUNSTATS
  10. SET EVENT MONITOR STATE
  • 执行下列工作负载管理器 SQL 语句的某些子句:
    • ALTER SERVICE CLASS 语句的下列子句:
      • COLLECT AGGREGATE ACTIVITY DATA
      • COLLECT AGGREGATE REQUEST DATA
      • COLLECT REQUEST METRICS
    • ALTER THRESHOLD 语句的以下子句
      • WHEN EXCEEDED COLLECT ACTIVITY DATA
    • ALTER WORK ACTION SET 语句的允许您改变工作操作的下列子句:
      • ALTER WORK ACTION ... COLLECT ACTIVITY DATA
      • ALTER WORK ACTION ... COLLECT AGGREGATE ACTIVITY DATA
      • ALTER WORK ACTION ... WHEN EXCEEDED COLLECT ACTIVITY DATA
    • ALTER WORKLOAD 语句的下列子句:
      • COLLECT ACTIVITY METRICS
      • COLLECT AGGREGATE ACTIVITY DATA
      • COLLECT LOCK TIMEOUT DATA
      • COLLECT LOCK WAIT DATA
      • COLLECT UNIT OF WORK DATA
  • 对系统目录表和视图的 SELECT 特权
  • 对系统定义的所有 DB2 例程(审计例程除外)的 EXECUTE 特权

SQLADM 权限包含在数据库管理员(DBADM)权限中。

对用户 john 赋予 SQLADM 权限的基本方法如下:

 C:\Documents and Settings\Administrator>db2 connect to sample 

  数据库连接信息

数据库服务器  = DB2/NT 9.7.0 
 SQL 授权标识  = GYZHANG 
本地数据库别名 = SAMPLE 

 C:\Documents and Settings\Administrator>db2 grant sqladm on database to user john 
 DB20000I SQL 命令成功完成。

工作负载管理权限(WLMADM)

WLMADM 权限是管理特定数据库的工作负载对象所需的权限。此权限允许您创建、改变、删除和注释工作负载管理器对象以及授予和撤销对其的访问权。

WLMADM 权限可由安全管理员(拥有 SECADM 权限)或具有 ACCESSCTRL 权限的用户授予。可以将 WLMADM 权限授予用户、组、角色或 PUBLIC。WLMADM 权限使用户能够执行下列操作:

  • 创建、改变、注释和删除下列工作负载管理器对象:
    • 直方图模板
    • 服务类
    • 阈值
    • 工作操作集
    • 工作类集
    • 工作负载
  • 授予和撤销工作负载特权
  • 执行系统定义的工作负载管理例程。

WLMADM 权限包含在数据库管理员权限 DBADM 中。

对用户 john 赋予 WLMADM 权限的基本方法如下:

 C:\Documents and Settings\Administrator>db2 connect to sample 

  数据库连接信息

数据库服务器  = DB2/NT 9.7.0 
 SQL 授权标识  = GYZHANG 
本地数据库别名  = SAMPLE 

 C:\Documents and Settings\Administrator>db2 grant wlmadm on database to user john 
 DB20000I SQL 命令成功完成。

说明管理权限(EXPLAIN)

EXPLAIN 权限是在没有获得特定数据库数据的访问权的情况说明查询方案所需的权限。此权限包含在数据库管理员权限中,没有访问存储在表中的数据的固有特权。

EXPLAIN 权限可由安全管理员(拥有 SECADM 权限)或具有 ACCESSCTRL 权限的用户授予。可以将 EXPLAIN 权限授予用户、组、角色或 PUBLIC。该权限使您能够执行下列 SQL 语句:

  • EXPLAIN
  • PREPARE
  • DESCRIBE(对于 SELECT 语句或 XQuery 语句的输出)

EXPLAIN 权限还提供对系统定义的说明例程的 EXECUTE 特权。

EXPLAIN 权限包含在 SQLADM 权限中。

对用户 john 赋予 EXPLAIN 权限的基本方法如下:

 C:\Documents and Settings\Administrator>db2 connect to sample 

  数据库连接信息

数据库服务器  = DB2/NT 9.7.0 
 SQL 授权标识  = GYZHANG 
本地数据库别名  = SAMPLE 

 C:\Documents and Settings\Administrator>db2 grant
  explain on database to user john 
 DB20000I SQL 命令成功完成。

DB2 9.7 中新权限 DATAACCESS 和 ACCESSCTRL

DB2 9.7 还引入了新权限 DATAACCESS 和 ACCESSCTRL。DATAACCESS 权限允许访问特定数据库中的数据。ACCESSCTRL 权限允许用户授予和取消对特定数据库中的对象的特权。缺省情况下,安全性管理员授予 DBADM 权限时,会包括 DATAACCESS 和 ACCESSCTRL 权限。但是,如果您不希望数据库管理员对数据具有访问权或能够授予特权和权限,那么可选择不包括这些选项。

注: 数据库的创建者在数据库中被自动授予 DBADM、SECADM、DATAACCESS 和 ACCESSCTRL 权限。如果不希望此用户具有其中任何权限,那么必须取消这些权限。

数据访问管理权限(DATAACCESS)

DATAACCESS 是允许对特定数据库中的数据进行访问的权限。

DATAACCESS 权限只能由安全管理员(拥有 SECADM 权限)授予。可以将该权限授予用户、组或角色。PUBLIC 无法直接或间接获取 DATAACCESS 权限。

对于所有表、视图、具体化查询表和昵称,它会提供下列权限和特权:

  • 对数据库的 LOAD 权限
  • SELECT 特权(其中包括对系统目录表和视图的 SELECT 特权)
  • INSERT 特权
  • UPDATE 特权
  • DELETE 特权

此外,DATAACCESS 权限还提供下列特权:

  • 对所有程序包的 EXECUTE 特权
  • 对所有例程(审计例程除外)的 EXECUTE 特权

对用户 john 赋予 DATAACCESS 权限的基本方法如下:

 C:\Documents and Settings\Administrator>db2 connect to sample 

  数据库连接信息

数据库服务器  = DB2/NT 9.7.0 
 SQL 授权标识  = GYZHANG 
本地数据库别名  = SAMPLE 

 C:\Documents and Settings\Administrator>db2 grant dataaccess on database to user john 
 DB20000I SQL 命令成功完成。

访问控制管理权限(ACCESSCTRL)

ACCESSCTRL 权限是授予和撤销对特定数据库中对象的特权所需的权限。除目录表和视图之外,ACCESSCTRL 权限没有访问存储在表中的数据的固有特权。

ACCESSCTRL 权限只能由安全管理员(拥有 SECADM 权限)授予。可以将该权限授予用户、组或角色。PUBLIC 无法直接或间接获取 ACCESSCTRL 权限。ACCESSCTRL 权限使用户能够执行下列操作:

  • 授予和撤销下列管理权限:
    • EXPLAIN
    • SQLADM
    • WLMADM
  • 授予和撤销下列数据库权限:
    • BINDADD
    • CONNECT
    • CREATETAB
    • CREATE_EXTERNAL_ROUTINE
    • CREATE_NOT_FENCED_ROUTINE
    • IMPLICIT_SCHEMA
    • LOAD
    • QUIESCE_CONNECT
  • 授予和撤销对下列对象的所有特权(无论特权由谁授予):
    • 全局变量
    • 索引
    • 昵称
    • 程序包
    • 例程(审计例程除外)
    • 模式
    • 序列
    • 服务器
    • 表空间
    • 视图
    • XSR 对象
  • 对系统目录表和视图的 SELECT 特权

此权限包含在安全管理员(SECADM)权限中。

对用户 john 赋予 ACCESSCTRL 权限的基本方法如下:

注:用户 gyzhang 拥有 SECADM 权限。

 C:\Documents and Settings\Administrator>db2 connect to sample 

  数据库连接信息

数据库服务器  = DB2/NT 9.7.0 
 SQL 授权标识  = GYZHANG 
本地数据库别名  = SAMPLE 

 C:\Documents and Settings\Administrator>db2 revoke
  secadm on database from user db2admin 
 DB20000I SQL 命令成功完成。

 C:\Documents and Settings\Administrator>db2 connect
  to sample user db2admin using db2admin 

  数据库连接信息

数据库服务器  = DB2/NT 9.7.0 
 SQL 授权标识  = DB2ADMIN 
本地数据库别名  = SAMPLE 

 C:\Documents and Settings\Administrator>db2 grant
  sqladm on database to user john 
 DB21034E 该命令被当作 SQL 语句来处理,因为它是无效的“命令行处理器”命令。在
 SQL 处理期间,它返回:
 SQL0552N "DB2ADMIN" 没有执行操作 "GRANT" 的特权。 SQLSTATE=42502 

 C:\Documents and Settings\Administrator>db2 connect to sample 

  数据库连接信息

数据库服务器  = DB2/NT 9.7.0 
 SQL 授权标识  = GYZHANG 
本地数据库别名  = SAMPLE 

 C:\Documents and Settings\Administrator>db2 grant
  accessctrl on database to user db2admin 
 DB20000I SQL 命令成功完成。

 C:\Documents and Settings\Administrator>db2 connect
  to sample user db2admin using db2admin 
  数据库连接信息

数据库服务器  = DB2/NT 9.7.0 
 SQL 授权标识  = DB2ADMIN 
本地数据库别名  = SAMPLE 

 C:\Documents and Settings\Administrator>db2 grant
  sqladm on database to user john 
 DB20000I SQL 命令成功完成。

角色使用的功能增强

角色是将一项或多项特权集中在一起的数据库对象,可以使用 GRANT 语句将角色指定给用户、组、PUBLIC 或其他角色,也可以使用 CREATE TRUSTED CONTEXT 或 ALTER TRUSTED CONTEXT 语句将它指定给可信上下文。可以对工作负载定义中的 SESSION_USER ROLE 连接属性指定角色。

DB2 9.7 中,可以对角色授予能够在数据库内授予的所有 DB2 特权和权限。例如,可以授予角色下列任何权限和特权:

DBADM、SECADM、DATAACCESS、ACCESSCTRL、SQLADM、WLMADM、LOAD 和 IMPLICIT_SCHEMA 数据库权限,CONNECT、CREATETAB、CREATE_NOT_FENCED、BINDADD、CREATE_EXTERNAL_ROUTINE 和 QUIESCE_CONNECT 数据库权限,任何数据库对象特权(包括 CONTROL)。

当用户连接至数据库时,将自动启用用户角色并考虑进行授权;角色没有所有者。安全管理员可以使用 GRANT 语句的 WITH ADMIN OPTION 子句将角色的管理权委托给另一个用户,以便其他用户可以控制角色成员资格。

在角色中创建和授予成员资格

安全管理员有权创建、删除、授权、撤销和注释角色。安全管理员使用 GRANT(Role)语句将角色中的成员资格授予给一个授权标识并使用 REVOKE(Role)语句撤销授权标识在角色中的成员资格。

通过使用 WITH ADMIN OPTION 授予授权标识在角色中的成员资格,安全管理员可以将角色中成员资格的管理权委托给该授权标识。GRANT(Role)语句的 WITH ADMIN OPTION 子句使其他用户可以:

  • 将角色授予给其他人。
  • 撤销其他人的角色。
  • 注释角色。

WITH ADMIN OPTION 子句不会使其他用户具有下列功能:

  • 删除角色。
  • 撤销授权标识对角色的 WITH ADMIN OPTION。
  • 将 WITH ADMIN OPTION 授予给其他人(如果您没有 SECADM 权限)。

在安全管理员创建了角色后,数据库管理员可以使用 GRANT 语句将权限和特权指定给角色。可以对角色授予能够在数据库内授予的所有 DB2 特权和权限。不能将实例级权限(例如,SYSADM 权限)指定给角色。

安全管理员或安全管理员使用 WITH ADMIN OPTION 为其授予了角色中的成员资格的任何用户都可以使用 GRANT(Role)语句将该角色中的成员资格授予给其他用户、组、PUBLIC 或角色。可能已使用 WITH ADMIN OPTION 并直接或通过 PUBLIC、组或角色间接授予用户在角色中的成员资格。

要撤销用户在角色中的成员资格,安全管理员或拥有对该角色的 WITH ADMIN OPTION 特权的用户可使用 REVOKE(Role)语句。

创建角色示例

如果某个角色具有一组特权,那么授予了此角色中的成员资格的用户将继承这些特权。继承特权使得在将一个用户的特权重新指定给另一个用户时不必管理各个特权。使用角色时唯一需要的操作是撤销一个用户在角色中的成员资格并将角色中的成员资格授予给其他用户。

例如,职员 BOB 和 JOHN 在部门 DEV 中工作,他们具有对表 SERVER、CLIENT 和 TOOLS 的 SELECT 特权。一天,管理人员决定将他们转到一个新部门 QA,因此数据库管理员必须撤销他们对表 SERVER、CLIENT 和 TOOLS 的 SELECT 特权。后来,部门 DEV 雇佣了一位新职员 TOM,数据库管理员必须将对表 SERVER、CLIENT 和 TOOLS 的 SELECT 特权授予给 TOM。

使用角色时,将执行下列步骤:

1. 安全管理员创建角色 DEVELOPER:

注:用户 gyzhang 拥有 SECADM 权限。

 C:\Documents and Settings\Administrator>db2 connect to sample 

  数据库连接信息

数据库服务器  = DB2/NT 9.7.0 
 SQL 授权标识  = GYZHANG 
本地数据库别名  = SAMPLE 

 C:\Documents and Settings\Administrator>db2 grant
  accessctrl on database to user 
 db2admin 
 DB20000I SQL 命令成功完成。

 C:\Documents and Settings\Administrator>db2 connect
  to sample user db2admin usin 
 g db2admin 

  数据库连接信息

数据库服务器  = DB2/NT 9.7.0 
 SQL 授权标识  = DB2ADMIN 
本地数据库别名  = SAMPLE 

 C:\Documents and Settings\Administrator>db2 create
  role developer 
 DB21034E 该命令被当作 SQL 语句来处理,因为它是无效的“命令行处理器”命令。在
 SQL 处理期间,它返回:
 SQL0552N "DB2ADMIN" 没有执行操作 "CREATE ROLE" 的特权。 SQLSTATE=42502 

注: 只有 SECADM权限才可以创建角色。

 C:\Documents and Settings\Administrator>db2 connect to sample 

  数据库连接信息

数据库服务器  = DB2/NT 9.7.0 
 SQL 授权标识  = GYZHANG 
本地数据库别名  = SAMPLE 


 C:\Documents and Settings\Administrator>db2 grant
  secadm on database to user db2admin 
 DB20000I SQL 命令成功完成。

 C:\Documents and Settings\Administrator>db2 connect
  to sample user db2admin using db2admin 

  数据库连接信息

数据库服务器  = DB2/NT 9.7.0 
 SQL 授权标识  = DB2ADMIN 
本地数据库别名  = SAMPLE 

 C:\Documents and Settings\Administrator>db2 create role developer 
 DB20000I SQL 命令成功完成。

2. 拥有 DBADM 权限的数据库管理员将对表 SERVER、CLIENT 和 TOOLS 的 SELECT 特权授予给角色 DEVELOPER:

 C:\Documents and Settings\Administrator>db2 connect to sample 

  数据库连接信息

数据库服务器 = DB2/NT 9.7.0 
 SQL 授权标识  = GYZHANG 
本地数据库别名  = SAMPLE 


 C:\Documents and Settings\Administrator>db2 grant
  select on table server to role developer 
 DB20000I SQL 命令成功完成。

 C:\Documents and Settings\Administrator>db2 grant
  select on table client to role developer 
 DB20000I SQL 命令成功完成。

 C:\Documents and Settings\Administrator>db2 grant
  select on table tools to role developer 
 DB20000I SQL 命令成功完成。

3. 安全管理员将角色 DEVELOPER 授予给部门 DEV 中的用户 John 和 Bob:

C:\Documents and Settings\Administrator>db2 grant
 role developer to user john,user bob
DB20000I SQL >命令成功完成。

4. 当 JOHN 和 BOB 离开部门 DEV 后,安全管理员撤销用户 JOHN 和 BOB 的角色 DEVELOPER:

 C:\Documents and Settings\Administrator>db2 revoke
  role developer from user joh,user bob 
 DB20000I SQL 命令成功完成。

5. 当部门 DEV 中雇佣 TOM 时,安全管理员将角色 DEVELOPER 授予给用户 TOM:

 C:\Documents and Settings\Administrator>db2 grant
  role developer to user tom 
 DB20000I SQL 命令成功完成。
将数据库权限、安全权限、系统权限授权给角色
 C:\Documents and Settings\Administrator>db2 connect to sample 

  数据库连接信息

数据库服务器  = DB2/NT 9.7.0 
 SQL 授权标识  = GYZHANG 
本地数据库别名  = SAMPLE 

 C:\Documents and Settings\Administrator>db2 grant
  secadm on database to user db2admin 
 DB20000I SQL 命令成功完成。

 C:\Documents and Settings\Administrator>db2 connect
  to sample user db2admin usig db2admin 

  数据库连接信息

数据库服务器  = DB2/NT 9.7.0 
 SQL 授权标识  = DB2ADMIN 
本地数据库别名  = SAMPLE 

 C:\Documents and Settings\Administrator>db2 grant
  secadm on database to role developer 
 DB20000I SQL 命令成功完成。

其它一些授权命令:
 db2 grant dbadm on database to role developer 
 db2 grant accessctrl on database to role developer 
 dDb2 grant dataaccess on database to role developer 
 db2 grant sqladm on database to role developer 
 db2 grant wlmadm on database to role developer

结论

DB2 9.7 在安全性方面有了较大的增强。在 DB2 9.7 中,不仅提出了分离职责的概念,明确划分了系统管理员、数据库管理员和安全性管理员的职责,同时,增加了新的权限,进一步增强了数据库的安全功能。另外,在安全性方面,DB2 9.7 还提供了角色、Trusted Context、LBAC 标签安全以及增强的审计功能。通过结合使用上述功能,可以使数据库系统的安全功能得到更进一步的增强。有关角色、Trusted Context、LBAC 标签安全以及增强的审计功能的具体内容,请参考 DB2 9.7 信息中心中的相关内容。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值