DB2授权和特权安全机制

DB2中有三种主要的安全机制:身份验证authentication)、授权authorization)和特权privilege)。本文主要介绍后两种安全机制。

l          授权,决定用户和用户组可以执行的操作以及他们可以访问的数据对象。用户执行高级数据库和实例管理操作的能力由指派给他们的权限决定。DB2中有5中不同的权限级别:SYSADMSYSCTRLSYSMAINTDBADMLOAD

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

 

一、  授权

DB2数据库权限分为实例级权限(SYSADMSYSCTRLSYSMAINT数据库级权限(DBAMDLOADDB2中用户所拥有的权限主要考虑三个方面:实例级、数据库级、数据库操作级别,查看命令是db2 get authorizations

DB2授权分为实例级权限授权和数据库级授权。实例级权限必须由拥有SYSADM权限的用户通过update cfg来授予用户组;数据库级权限由DBAMD权限用户通过grant命令显示地授予用户或用户组

 

1、实例级权限的获得(SYSADMSYSCTRLSYSMAINT

它们的范围包含实例级命令以及针对这个实例中的所有数据库的命令。这些权限只能分配给组。可以通过DBM CFG文件分配这些权限。

 

1)、获得SYSADM权限(系统管理权限)

对一个实例拥有SYSADM权限的用户能够对这个实例、实例中的任何数据库以及这些数据库中的任何对象发出任何DB2命令。他们还能够访问数据库中的数据以及对其他用户授予或撤销特权或权限。只允许SYSADM用户更新DBM CFG文件。

SYSADM权限由DBM CFG文件中的SYSADM_GROUP参数控制。查看DBM CFG配置:db2 get dbm cfg。在 Windows 上,在创建实例时,这个参数设置为 Administrator(但是,如果发出命令 db2 get dbm cfg,它看起来是空的)。在 UNIX 上,它设置为创建这个实例的用户的主组。

db2 update dbm cfg using SYSADM_GROUP db2grp1

这一修改直到实例重启之后才会生效。

 

2)、获得SYSCTRL权限(系统控制权限)

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

SYSCTRL用户可以对实例中的任何数据库执行的命令如下:

·db2 start/db2 stop

·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

 

3)、获得SYSMAINT权限(系统维护权限)

SYSMAINT用户只能执行与维护相关的任务:

·db2 start/db2 stop

·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

 

 

2、数据库级权限的获得(DBADMLOAD

 

1)、获得DBADM权限(数据库管理权限)

DBADM用户对一个数据库有几乎完全的控制能力。

可以执行的任务:

·db2 create/drop table

·db2 grant/revoke(任何特权)

·db2 runstats(任何表)

不能执行某些维护或管理任务:

·drop database

·drop/create tablespace

·backup/restore database

·update db cfg for database db name

DBADM用户被自动地授予对数据库对象及其内容的所有权。

DBADM是数据库级权限,可以分配给用户和用户组。

 

以下命令将授予DBADM权限:

l          db2 create database test

创建数据库test时, DBADM 权限隐式地授予发出此命令的用户。

l          db2 connect to sample

db2 grant dbadm on database to user tst1

这个命令只能由 SYSADM 用户发出

它向用户 tst1 授予示例数据库上的 DBADM 权限;

注意,在授予 DBADM 权限之前,发出这个命令的用户必须连接到示例数据库。

l          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

 

 

 

二、  特权

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

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

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

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

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

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

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

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

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

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

 

对象级特权:

特权名称

相关对象

描述

CONTROL

表、视图、索引、包、别名、不同的类型、用户定义函数、序列

提供对对象的全部权限。拥有这种特权的用户还可以向其他用户授予或撤消对对象的特权。

DELETE

表、视图

允许用户从对象中删除记录。

INSERT

表、视图

允许用户通过 INSERT IMPORT 命令将记录插入对象中。

SELECT

表、视图

提供使用选择语句来查看对象内容的能力。

UPDATE

表、视图

允许用户使用更新语句修改对象中的记录。

ALTER

允许用户使用更改语句更改对象定义。

INDEX

允许用户使用创建索引语句在对象上创建索引。

REFERENCES

提供在对象上创建或删除外键约束的能力。

BIND

允许用户重新绑定现有的包。

EXECUTE

包、过程、函数、方法

允许用户执行包和例程。

ALTERIN

模式

允许用户修改模式中的对象定义。

CREATEIN

模式

允许用户在模式中创建对象。

DROPIN

模式

允许用户删除模式中的对象。

 

1、显示地授予、撤销特权

可以使用GRANTREVOKE命令显示地对用户或组授予或撤销特权。

以下示例给用户test1(隶属于组db2grp1)授权,示例数据库(sample)中的模式名是gmilne(即:由用户gmilne发出db2sampl命令)。这些授权由拥有SYSADM权限的用户发出:

授予特权:

db2 grant select on table gmilne.org to user test1

db2 grant insert on table gmilne.org to group db2grp1

(因为test1db2grp1组的成员)

db2 grant dropin on schema gmilne to all

 

撤销特权:

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组的成员)仍然拥有对这个表的选择权,如果它是被直接授予这个特权的。

 

2、隐式地授予、撤销特权

当发出某些命令时,DB2 可能会自动地授予特权,而不需要像前面看到的那样发出显式的 GRANT 语句。当删除创建的对象时,这些特性会隐式地撤消。但是,当显式地撤消更高级的特权时,不会撤消它们。

下表总结了会导致数据库管理程序隐式地授予特权的一些命令。

发出的命令

授予的特权

被授予特权的用户

CREATE TABLE mytable

mytable 上的 CONTROL

发出命令的用户

CREATE SCHEMA myschema

myschema 上的 CREATEINALTERIN DROPIN,以及将这些特权授予其他用户的能力

发出命令的用户

CREATE VIEW myview

myview 上的 CONTROL(只有在用户拥有 myview 定义中引用的所有表和视图上的 CONTROL 特权的情况下)

发出命令的用户

CREATE DATABASE mydb

mydb 的系统编目表上的 SELECTmydb 上的 IMPLICIT_SCHEMA

PUBLIC

 

注:1当用户创建数据库时,隐式地授予这个用户这个数据库上的 DBADM 权限。获得 DBADM 权限就会隐式地授予 CONNECTCREATETABBINDADDIMPLICIT_SCHEMA CREATE_NOT_FENCED 特权。即使撤消了 DBADM 权限,这个用户仍然会保留这些特权。

2PUBLIC 是一个特殊的 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

 

3、间接获得特权

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

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

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

 

 

 

 

 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/25744374/viewspace-750046/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/25744374/viewspace-750046/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值