|
一点说明
DB2 Sercurity Overview
DB2的安全策略是由两部分组成:
² 认证(Authentication):是指对用户的合法性验证,解决的问题是当一个用户登陆到数据库,他的密码和用户名是否匹配,这个验证并不是由DB2来完成,而是由外部的程序,如操作系统或者是第三方的身份验证程序。
² 授权许可(Authorization):当用户通过认证之后,要开始操作数据,这个时候DB2会察看该用户是否有权限进行要求的操作,这个工作是在DB2系统内部来做的。
举例:CONNECT TO sample USER bob using pwd,DB2会做两件事情:
² 将该用户名和密码发送个操作系统或是第三方程序验证,该用户的合法性;
² 合法性验证通过之后,DB2将检查这个用户是否有权限连接到 Sample数据库;
也就是说DB2首先认为数据库服务器的操作系统应该是安全的,所以也要注意对数据库服务器的安全策略的设置。
External Database Sercurity(Authentication)
上面提到了Authentication是完全在DB2之外进行验证用户合法性的,DB2的客户端只需要发送用户名和密码给操作系统或是第三方验证程序。鉴于网络环境的复杂性和安全考虑DB2设计很多Authentication方式来进行用户验证以满足各种要求。
Authentication Types
Authentication type决定了验证发生的场所,DB2的缺省验证类型为Server,即在服务器端进行验证。DB2还支持如下方式验证。下面具体介绍各种方式的意义。
在讲述Authentication之前,我们先来看一下Authentication所发生的环境,主要有两种:
² Client/Server环境
² Client/DB2 Connect Server/Host Server 环境
Authentication Type Server
用户验证发生在服务器上,密码在传输过程中不加密。
Authentication Type DCS
用户验证发生在Host系统中(DRDA环境),密码在传输过程中不加密。
Ecrypted Password
² Server Encrypt :Server 方式的加密选择
² DCS Encrypt :DCS方式的加密选择
密码在传输过程是加密的。
Authentication Type DCE
借助于第三方身份验证软件来进行用户验证。会有一个专门的DCE Server来负责身份验证。密码在传输过程是加密的。
Authentication Type Kerberos
另一种基于第三方服务的验证方式,使用户可以不必重复登录就可以登录到处于Kerberos模式下的所有服务资源。目前Win2k支持此服务。
Sercurity Extension
² DCE_Server_Encypt
在Server端使用DCE_Server_Encypt,在客户端提供了多种选择:
Client Authentication Server Authentication Authentication Result
DCE DCE_Server_Encypt DCE
Server DCE_Server_Encypt Server
Server_Encypt DCE_Server_Encypt Server_Encypt
² Kerberos_Server_Encrpt
在Server端使用Kerberos_Server_Encrypt,在客户端提供了多种选择:
Client Authentication Server Authentication Authentication Result
Kerberos Kerberos_Server_Encrypt Kerberos
非Kerberos Kerberos_Server_Encrypt Server_Encrypt
Authentication的搭配
对Authentication我们关心的问题就是,用户验证发生在哪里,在验证信息的传递过程中密码是否被加密。
环境一:Client/Server
Client Authenticationtype DB2 server authentication type Authenticatedat Client toDB2 ConnectServer encryption
SERVER SERVER SERVER NO
SERVER_ENCRYPT SERVER SERVER YES
SERVER SERVER_ENCRYPT SERVER NO
SERVER_ENCRYPT SERVER_ENCRYPT SERVER YES
DCE DCE DCE SERVER YES
KERBEROS KERBEROS KERBEROS SERVER YES
CLIENT CLIENT CLIENT N/A
环境二:Client/DB2 Connect Server/Host Server
Client Authenticationtype DB2 Connectserver authentication type Authenticatedat Client toDB2 ConnectServerencryption DB2 ConnectServerto hostencryption
SERVER SERVER_ENCRYPT DB2 CONNECT SERVER NO N/A
SERVER_ENCRYPT SERVER_ENCRYPT DB2 CONNECT SERVER YES N/A
DCS SERVER_ENCRYPT DB2 CONNECT SERVER NO N/A
DCS_ENCRYPT SERVER_ENCRYPT DB2 CONNECT SERVER YES N/A
SERVER SERVER DB2 CONNECT SERVER NO N/A
SERVER_ENCRYPT SERVER DB2 CONNECT SERVER YES N/A
DCS SERVER DB2 CONNECT SERVER NO N/A
DCS_ENCRYPT SERVER DB2 CONNECT SERVER YES N/A
SERVER DCS HOST SERVER NO NO
SERVER_ENCRYPT DCS HOST SERVER YES NO
DCS DCS HOST SERVER NO NO
DCS_ENCRYPT DCS HOST SERVER YES NO
SERVER DCS_ENCYPT HOST SERVER NO YES
SERVER_ENCRYPT DCS_ENCYPT HOST SERVER YES YES
DCS DCS_ENCYPT HOST SERVER NO YES
DCS_ENCRYPT DCS_ENCYPT HOST SERVER YES YES
DCE DCE DCE SERVER YES YES
CLIENT CLIENT CLIENT N/A N/A
规则:虽然这里有很多种组合,但是其实是有规律的。
首先需要搞清客户端和服务器的关系,在Client/Server环境中,客户端和服务器是非常清晰的,在Client/DB2 Connect Server/Host Server环境中,把它分为两段即:Client/DB2 Connect Server段和DB2 Connect Server/Host Server段。在Client/DB2 Connect Server段,Client为客户端,DB2 Connect Server为服务器,DB2 Connect Server/Host Server中DB2 Connect Server为客户端,Host Server为服务器;这样我们可以发现密码是否加密传输是由客户端的Authentication选项来决定,而Authentication发生在哪里是由服务器的Authentication选项来决定的。
Authentication Type Client
前面虽然讲到Client的时候我们都是假定验证在Client端发生。但是当Client/Server上都配置了Client,那么用户验证究竟在哪里发生还和以下两个参数有关。
讲到这里首先要为大家定义一下客户端的分类:
² Untrust Client:Win95/98,Win3.x,Macintosh
² Trust Client:Windows NT, Windows 2000,OS/2, all the supported UNIX operating systems, MVS, OS/390, VM, VSE和AS/400。
² Host Client:是Trust Client的子集MVS, OS/390, VM, VSE和AS/400。
在连接的时候可以提供或不提供用户名和密码,在Authentication为Client时,如果不提供用户名和密码则使用本机登录的用户名和密码。
和Client验证方式相关的两个参数是Trust_AllClnts,Trust_ClntAuth:
² Trust_AllClnts:有三种设置;
YES:所有的客户机不管是Trust和Untrust的客户端都在客户端进行验证;
No:Untrust的客户端必须提供了用户名和密码,并且验证在Server端发生;
DRDA ONLY:只有Host Client才能在本地验证;
² Trust_ClntAuth:有两种设置:
Client:不管是否提供了用户名和密码,验证都在Client端发生;
Server:如果提供了用户名和密码,验证会在Server端发生;
两个参数和客户端分类需要结合起来来决定Authentication发生的地方。
Database Internal Sercurity
在这里主要讨论是在用户连接到数据库或Attach到实例后,要对数据对象进行操作和访问的时候,数据库会进行Authorazation方面的权限验证。
DB2的权限分以下五类:
² SYSADM
² SYSCTRL
² SYSMAINT
² DBADM
² LOAD
带SYS的三种权限是不能被GRANT的,后两中权限是可以被Grant的。
Authorities in DBM Configuration
在Instance的配置参数中可以看见有三个和Sys相关的参数;这三个参数的值都应该是用户组的名称(NT、2000中),应该注意这三个参数的字符数都不能超过8位,否则无效,当把SYSADM_GROUP被置为空的时候,系统缺省确认操作系统的Administrator组具有SYSADM权限。
Priviliges
Database Privileges
² BINDADD:允许用户创建一个新的Package;
² Create Not Fenced:允许用户以Not Fenced方式创建一个UDF(User Defined Function),所谓Not Fenced方式就是指所创建的UDF将在共享内存中使用,而不是被分配在独立的线程和进程中执行的。
² Impilit Schema:允许用户在创建一个对象的时候同时创建一个Schema
² 所有以上权限都是被分配给Public组的,这个组是一个DB2定义的逻辑组,在操作系统中是没有的,它被用来分配DB中的Privilige。所有的登录用户都缺省为Public成员。
Schema Privileges
² Create In :在Schema下创建对象
² Alter In:在Schema下修改对象
Table Privileges
² Control :拥有表上的所有权限
² Select,Update,Delete,Insert数据操纵权限;
² Alter:修改表结构及相关属性
² Index:创建索引
² Reference:允许用户将此表作为外键关系中的父表;
Package Privileges
² Control:拥有所有的权限
² Bind:允许用户可以重新绑定一个已经存在的Package(Bind和BindAdd权限一定要分清楚,考试经常会考到)
² Execute:允许用户执行个已经存在的Package
Index Privileges
² Control
Tablespace Privileges
² Use:允许用户在Tablespace中创建表。
User or Group Support(Unix)
在某些操作系统上是允许用户名和组名相同,所以在授权的时候如果存在这种情况的时候必须指明授权给group还是User,否则系统将返回一个错误信息。
DB2_GRP_LookUp
在Winnt中,会出现很多域方面的用户认证问题,下面来讨论一下:
DB2_GRP_LookUp有两种设置:
² Local:在网络机构相对简单的情况下,例如部门级应用中,一般是以工作组方式来构建网络,这个时候可以是Local选项,在用户验证的时候,Server只会在本地寻找用户和组名,不过如果该数据库服务器同时也是一台域控制器的时候也需使用Local;
² Domain:在域模式下,用户名和组名的搜索范围决定于网络的复杂程度,本域内的用户可以通过PDC来进行查找,而信任域中的用户DB2也需要通过本域的PDC询问信任域的BDC来查找,而不是直接去查找。
试验:
在操作系统中环境变量中把db2instance改成DB2A
db2 get instance 察看先在使用的db Manager;
db2 update dbm cfg using sysadm_group db2group;
在windows中创建一个组叫做DB2GROUP
在Windows中创建一个用户名字叫做DB2A
将DB2A放到DB2GROUP中去。
使用DB2A重新登录; |
|