上一章:数据库的并发性控制第九章安全性控制提纲:1、DB2支持的认证类型2、利用DB2存取控制机制实现数据库的安全性3、利用用户组实现控制的继承性4、系统中权限的划分5、隐式权限和显式权限的区别9.1、DB2服务器的认证类型对实例或数据库进行存取首先要求认证用户。
每个实例的认证类型确定如何以及在何处验证用户。
认证类型在数据库管理程序配置文件中指定。
它是在创建实例时进行的初始设置。
每个实例都有一个认证类型,该类型控制对实例和该实例控制下的所有数据库的存取。
DB2提供了下列认证类型:●SERVER:指定使用服务器断操作系统安全性在服务器端进行认证。
若在尝试连接期间指定了用户ID 和口令,则在服务器上将它们与有效的用户ID 和口令比较,以确定是否允许该用户存取这个实例。
这是缺省的安全性机制。
服务器会检测一个连接是本地的还是远程的。
对于本地连接,当认证是SERVER 时,由于系统在用户登录时已经检查过用户ID和口令,因此不需要在连接时提供用户ID 和口令,除非是用户需要以与登录身份不同的用户对数据库进行存取时才需要提供用户ID和口令。
如果用户需要连接到一个远程实例,并且该实例的认证类型为SERVER,则即使用户已经登录到本地机器上,该用户也必须提供用户ID 和口令。
●SERVER_ENCRYPT指定使用加密的SERVER 认证方案。
该认证类型与SERVER认证类型类似,只不过当客户机将用户ID 和口令传送给该服务器来认证的时候,口令将被加密。
若在客户机中指定SERVER_ENCRYPT,在服务器中指定SERVER,由于认证级别不匹配会返回一个错误。
●CLIENT指定使用客户端操作系统安全性来进行认证。
在客户机节点上,将在一个尝试连接期间指定的用户ID和口令与有效的用户ID 和口令的组合比较,以确定是否允许此用户ID存取这个实例。
用户和口令都是在本地操作系统上定义。
值得注意的是,远程实例的认证类型为CLIENT类型,并不等于认证过程将在客户端进行,有另两个数据库管理器配置参数将确定最终的认证方式:trust_allclnts 和trust_clntauth。
其中trust_allclnts决定信任来自何方的客户端,该参数如果被设定为YES,则DB2服务器会允许所有要求连接的客户端进行对它进行连接,而不需要提供用户ID和口令。
如果trust_allclnts被设置为NO,则DB2服务器只允许可信赖的客户端对其进行连接。
(可信赖客户端是具有可靠的、本地安全系统的客户机。
比如Windows NT、UNIX等,而Windows 3.1、Windows95/98等由于不具有严格的安全性被认为是不可信赖的客户端)。
trust_clntauch决定认证在何处完成。
如果该参数被设定为SERVER,即使对于可信赖的客户端,认证过程也将在服务器端完成。
而如果trust_clntauch被设定为CLIENT,则当连接命令提供了口令时,认证过程将会在服务器端完成,而当连接命令没有提供口令时,认证过程将会在客户端完成。
●DCS主要用于需要通过DB2 Connect对主机数据库进行存取的环境。
当在数据库管理程序配置文件中指定认证类型为DCS时,并通过“分布式关系数据库体系结构”(DRDA) 的“应用服务器”(AS) 体系结构来存取主机数据库服务器的时候,认证将在主机服务器上进行,但只在APPC 层进行。
如果没有使用DRDA体系结构对数据库服务器进行存取,则认证方式与SERVER类型相同。
●DCS_ENCRYPT指定使用加密的DCS 认证方案。
该认证类型与DCS认证类型类似,只不过当客户机将用户ID 和口令传送给服务器来认证的时候,口令将被加密。
若在客户机中指定DCS_ENCRYPT,在服务器中指定DCS,由于认证级别不匹配会返回一个错误。
9.2、访问控制—权限9.2.1、DB2访问控制的层次结构DB2中的访问控制层次如上图所示。
可以对DB2的用户赋于不同级别的权力和各种特权。
其中权力(Authorities)是对一组数据库对象进行存取的特权集,有特定的名称。
而特权(Privileges)则是对特定对象访问的权利。
权力(Authorities)分为以下级别:(1)、SYSADM—系统管理该权限是一个实例中的最高权限。
可以完成一个实例范围内任何管理工作。
可以通过实例配置变量中的SYSADM_GROUP参数来指定一个用户组拥有该权限。
如果该参数为空,在Windows NT环境下,创建该实例的用户拥有该权限;在UNIX环境下,与实例同名的用户拥有该权限。
(2)、SYSCTRL—系统控制该权限可以完成系统中的管理功能,但不能访问数据。
但拥有该权限的用户可以创建数据库,并管理自己创建的数据库中的数据。
可以通过实例配置变量中的SYSCTRL_GROUP参数来指定一个用户组拥有该权限(3)(3)、SYSMAINT—系统维护该权限只能完成系统中与维护有关的任务,但不能访问数据,而且拥有该权限的用户不能创建数据库。
可以通过实例配置变量中的SYSMAINT_GROUP参数来指定一个用户组拥有该权限。
(4)、DBADM—数据库管理该权限是数据库级的权限,可以完成数据库的管理工作。
该权限可以通过SQL语句授予。
四种级别的权力对比如下:特权(Priveleges)可以分为以下几种类型:(1)、拥有者特权(Control)对于大多数数据库对象,对象的创建者自动被赋予Control特权,拥有该对象的全部访问特权。
(2)、个体特权(Individual)特定数据库对象上的指定权限,如:表上的删除、插入等特权。
(3)、隐式特权不是通过授权语句显式赋予的权限。
具体特权如下图所示:其中:数据库级别的特权:CREATETAB:允许用户在特定数据库中创建表。
CREATE_NOT_FENCED:允许用户在特定数据库中创建非隔离的用户自定义函数。
IMPLICIT_SCHEMA:允许用户使用在与数据库连接时使用的用户ID作为其缺省的模式名。
如果用户在命令中没有指定数据库对象的模式名称。
系统将使用该用户的缺省模式名。
BINDADD:允许用户通过捆绑命令在特定数据库中生成程序包。
CONNECT:允许用户对特定数据库进行连接。
模式的特权:CONTROL:相当于该SCHMA的拥有者,拥有以下所有特权,并可以删除该模式。
CREATEIN:允许用户使用该模式作为模式名来创建数据库对象。
ALTERIN:允许用户对以该模式为模式名的数据库对象进行转换操作。
DROPIN:允许用户对以该模式作为模式名的数据库对象进行删除操作。
程序包上的特权:CONTROL:相当于该程序包的拥有者,拥有以下所有特权,并可以删除该程序包。
BIND:允许用户使用rebind命令对该程序包进行重新捆绑。
EXECUTE:允许用户执行该程序包表上的特权:CONTROL:相当于该表的拥有者,拥有以下所有特权,并可以删除该表。
ALTER:允许用户对该表进行转换操作。
DELETE:允许用户对该表使用DELETE语句。
INDEX:允许用户在该表上建立索引。
INSERT:允许用户对该表使用INSERT语句。
REFERENCE:允许用户以该表为父表建立参照完整性约束。
SELECT:允许用户对该表使用SELECT语句。
UPDATE:允许用户对该表使用UPDATE语句。
ALL:相当于ALTER、DELETE、INDEX、INSERT、REFERENCE、SELECT和UPDATE 权限的总和。
索引上的权限:CONTROL:相当于该索引的拥有者,并可以删除该索引。
视图上的权限:CONTROL:相当于该视图的拥有者,并可以删除该索引。
9.2.2、通过模式(SCHEMA)的控制实现安全性模式是数据库对象的逻辑分组。
它的一个主要作用就是可以用来进行安全性的控制。
在DB2环境下,要想对一个数据库对象进行存取,需要两部分的权限,一部分是对模式的相应使用权;另一部分是该对象上的相应权限。
比如:如果一个用户需要删除表user1.table1,则该用户除了需要有该表上的DROP权限,还需要有模式user1上的DROPIN权限。
9.2.3、通过应用程序进行资源保护在使用由嵌入式SQL接口开发的应用程序时,该程序的数据库存取计划是以程序包的形式存放在数据库中的。
用户是否能够执行该程序对数据库进行存取要看是否有相应程序包上的执行权限。
而用户对含有SQL语句的程序拥有执行的权限并不一定有在管理环境下如(CLP、控制中心)中执行该SQL语句的权力。
所以系统管理员可以通过应用程序进行安全控制。
9.3、显式授权和隐式授权DB2中的各种权限可以通过SQL命令直接显式授权,或由于执行了某些操作(比如创建数据库对象等)而被隐式地赋予了某种权限。
9.3.1、显式授权DB2中用来授权的命令是GRANT,用来撤消权限的命令是REVOKE,我们可以通过这两个命令进行权限管理。
例如:在进行授权时,可以对某个用户单独进行授权,也可以对某个用户组进行授权。
如果授权的对象是用户组,则包含在该用户组中的所有用户都享有该特权。
另外,在DB2中还提供了一个特殊的授权对象—PUBLIC,它代表数据库系统中的所有用户,如果把某个权限赋予了PUBLIC,就意味着所有的用户都享有该权限。
因此,在大多数情况下(在某些情况下PUBLIC权限不被检查)判断一个用户是否具有执行某项任务的权限,需要检查其用户的权限、用户所在组的权限及PUBLIC的权限的并集。
DB2的合法用户一定是操作系统用户,但是由于在某些操作系统(如AIX)中允许用户的标识符和组标识符相同,这对于DB2内的授权检查会引起问题。
GRANT和REVOKE语句提供了可选的参数以用于指明特权想给予的用户和组的ID。
现使用如下三个GRANT或REVOKE语句对用户进行检查:语句1:GRANT SELECT ON TABLE EMPLOYEE TO CAL或GRANT SELECT ON TABLE EMPLOYEE TO USER CAL语句2:GRANT SELECT ON TABLE EMPLOYEE TO CAL或GRANT SELECT ON TABLE EMPLOYEE TO GROUP CAL语句3:GRANT SELECT ON TABLE EMPLOYEE TO CAL以上语句在不同操作系统上及不同用户定义情况下得到的支持情况如下表:语句1:由于系统中只有名为cal的用户,则语句1的两种形式都可以得到支持,cal用户将被赋予EMPLOYEE表上的SELECT权限。
语句2:由于系统中只有名为cal的组,则语句2的两种形式都可以得到支持,cal组中所包含的所有用户将被赋予EMPLOYEE表上的SELECT权限。