DB2 的安全性

转自:http://blog.csdn.net/shangboerds/article/details/4794143

DB2 的安全性由两方面组成:认证和授权

认证

认证就是系统验证用户身份的过程。说的简单点,就是验证用户名和密码,因为DB2用户同时也是操作系统用户,所以,首先必须得到操作系统的认可。在默认情况下,DB2使用的就是基于操作系统的用户认证。当然,你也可以指定其它认证方式。DBM CFG 的AUTHENTICATION参数决定在哪里进行用户认证。

AUTHENTICATION可以设定为以下值:

[c-sharp] view plain copy print ?
  1. SERVER (default)            认证在服务器端执行  
  2. CLIENT                          认证在客户端执行  
  3. SERVER_ENCRYPT                  和SERVER 参数相似,而且用户的id 和密码都经过加密  
  4. KERBEROS                    认证使用Kerberos 安全机制  
  5. SQL_AUTHENTICATION_DATAENC  在服务器端进行认证,数据库连接时必须使用数据加密  
  6. SQL_AUTHENTICATION_DATAENC_CMP  与上面类似,但当条件不允许的情况下,可以不对数据进行加密  
  7. GSSPLUGIN                   使用外部的基于GSS API 插件的安全工具进行认证  
 

查看当前设置:db2 get dbm cfg | grep AUTHENTICATION

 

授权

授权是 DB2  获取有关已认证的DB2 用户的信息的过程,此信息指示该用户可执行的数据库操作,以及可访问的数据对象。


很多人都感觉DB2的权限非常难理解,其实非常简单,大家之所以感觉难理解,主要原因是IBM把它介绍复杂了,然后,各种书籍、资料把DB2 的官方资料翻译出来呈现在大家面前,有的翻译的可能并不是很好,所以大家就感觉难理解了。其实,大家完全可以把DB2想象一个仓库,仓库中有好多房间,房间中有好多东西。仓库管理员有所有房间的钥匙,你想进入某个房间时,你必须有该房间的钥匙。如果你没有钥匙,你可以像管理员申请。那么DB2 有哪些房间呢(也就是DB2的组成部分)? DB2由 实例、数据库、表空间、模式、表、视图等组成。每个组成部分都定义了相应的权限,如:你想访问某个表,那么你首先得连接数据库,所以,你必须具有该数据库的CONNECT权限,同时你还必须有该表的SELECT 权限。这就相当于,你想进入一个房间,你必须有该房间的钥匙。下面我们来了解一下DB2的不同组成部分定义了哪些权限:

实例级别权限:

[c-sharp] view plain copy print ?
  1. SYSADM  系统管理权限  
  2. SYSCTRL 系统控制权限  
  3. SYSMAINT系统维护权限  
  4. SYSMON  系统监视权限  
 

实例权限

数据库级别权限:

[c-sharp] view plain copy print ?
  1. ACCESSCTRL  允许拥有者授予和撤销所有对象特权和数据库权限以及 ACCESSCTRL、DATAACCESS、DBADM 和 SECADM 权限  
  2. BINDADD                     允许拥有者在数据库中创建新包  
  3. CONNECT                     允许拥有者连接到数据库  
  4. CREATETAB                   允许拥有者在数据库中创建新表  
  5. CREATE_EXTERNAL_ROUTINE     允许拥有者创建过程以供数据库的应用程序和其他用户使用  
  6. CREATE_NOT_FENCED_ROUTINE   允许拥有者创建未受防护的用户定义的函数(UDF)或过程  
  7. DATAACCESS                  允许拥有者访问存储在数据库表中的数据。  
  8. DBADM                       允许拥有者充当数据库管理员  
  9. EXPLAIN                     允许拥有者说明查询方案,而不要求他们拥有访问这些查询方案所引用的表中数据的特权  
  10. IMPLICIT_SCHEMA             允许任何用户隐式地创建模式  
  11. LOAD                        允许拥有者将数据装入到表中。  
  12. QUIESCE_CONNECT             允许拥有者在数据库处于停顿状态时访问该数据库。  
  13. SECADM                      允许拥有者充当数据库的安全管理员。  
  14. SQLADM                      允许拥有者监视和调整 SQL 语句。  
  15. WLMADM                      允许拥有者充当工作负载管理员  
  16. GRANT  CREATETAB ON DATABASE  TO USER <user_name>  
  17. REVOKE  CREATETAB ON DATABASE  FROM USER <user_name>  

表空间特权

[c-sharp] view plain copy print ?
  1. USE 允许用户在该表空间中创建表  
  2. GRANT USE OF TABLESPACE <tablespace_name> TO USER <user_name>  
  3. REVOKE USE OF TABLESPACE <tablespace_name> FROM USER <user_name>  

模式特权

[c-sharp] view plain copy print ?
  1. CREATEIN  允许用户在模式中创建对象  
  2. ALTERIN   允许用户在模式中改变对象  
  3. DROPIN    允许用户在模式中删除对象  
  4. GRANT CREATEIN,DROPIN,ALTERIN ON SCHEMA <schema_name> TO USER <user_name>  
  5. REVOKE CREATEIN,DROPIN,ALTERIN ON SCHEMA <schema_name> FROM USER <user_name>  

表和视图特权

[c-sharp] view plain copy print ?
  1. SELECT       允许用户检索表或视图中的行、对表创建视图以及运行 EXPORT 实用程序。  
  2. INSERT       允许用户将行插入表或视图以及运行 IMPORT 实用程序。  
  3. UPDATE       允许用户更改表或视图中的条目,或表或视图中的一个或多个特定列的条目。用户只能对特定的列拥有此特权。  
  4. DELETE       允许用户从表或视图中删除行。  
  5. ALTER       允许用户修改表,例如,为表添加列或唯一约束。具有 ALTER 特权用户还可以 COMMENT ON 一个表,或者表的一列。  
  6. INDEX       允许用户对表创建一个索引。索引创建者自动具有索引的 CONTROL 特权。  
  7. REFERENCES  允许用户创建和删除一个外键,并指定该表为关系中的父表。用户可能只对特定的列拥有此特权。  
  8. CONTROL     给用户提供对表或视图的所有特权,包括删除它以及授予和撤销各个表特权的功能。  
  9. GRANT  SELECT ON TABLE <table_name> TO USER <user_name>  
  10. REVOKE SELECT ON TABLE <table_name> FROM USER <user_name>  

 索引特权

[c-sharp] view plain copy print ?
  1. CONTROL    允许用户删除和修改索引  
  2. GRANT  CONTROL ON INDEX <indext_name> TO USER <user_name>  
  3. REVOKE CONTROL ON INDEX <indext_name> FROM USER <user_name>  

函数、过程、方法特权

[c-sharp] view plain copy print ?
  1. EXECUTE    允许用户执行函数、过程、方法  
  2. GRANT EXECUTE ON FUNCTION <function_name> TO USER <user_name>  
  3. GRANT EXECUTE ON PROCEDURE <procedure_name> TO USER <user_name>  
  4. GRANT EXECUTE ON METHOD <method_name> TO USER <user_name>  
 

程序包特权

[c-sharp] view plain copy print ?
  1. EXECUTE  允许用户执行或运行程序包  
  2. BIND     允许用户重新绑定或绑定该程序包以及添加具有相同程序包名和创建者的新程序包版本  
  3. CONTROL  给用户提供重新绑定、删除或执行程序包的功能,以及将那些特权授予其他用户的功能  
  4. REVOKE  EXECUTE ON PACKAGE <package_name> FROM USER <user_name>  
  5. GRANT  EXECUTE ON PACKAGE <package_name> TO USER <user_name>  
 

用户、用户组、PUBLIC组

DB2 的用户是操作系统用户,当然,DB2用户组也是操作系统用户组。由上面的介绍大家就可以知道赋予用户权限是非常繁琐的,为了方便权限管理,我们可以把权限赋给用户组,这样,任何属于该组的用户都可以获得相应的权限。值得注意的是DB2还定义了一个PUBLIC组,任何人或组都属于PUBLIC组,当一个数据库建立时,下面的特权都会自动的授予PUBLIC 组:CONNECT,CREATETAB,IMPLICIT SCHEMA,BINDADD,这就是当我们新建一个操作系统用户,没有赋给它任何权限,而它却可以连接数据库的原因。

 

赋予用户实例级别权限

细心的朋友可能已经发现了,我们在介绍实例级别权限的时候没有说明如何赋予用户实例级别权限,那是因为我们不能通过GRANT和REVOKE语句赋予和撤销权限,而且实例级别权限也不能赋予单个用户,只能赋予用户组。那么到底该怎么赋予用户组实例级别权限呢?在DBM CFG中定义以下4个参数,我们只要修改这几个参数就可以赋予用户组相应的实例级权限。

[c-sharp] view plain copy print ?
  1. db2 get dbm cfg | grep GROUP  
  2. SYSADM_GROUP  
  3. SYSCTRL_GROUP  
  4. SYSMAINT_GROUP  
  5. SYSMON_GROUP  

DB2 用户和其它数据库有些不同,DB2用户必须是个操作系统用户,所以要增加DB2用户需要下面2步:

1、增加一个操作系统用户

[c-sharp] view plain copy print ?
  1. groupadd test---添加用户组test  
  2. useradd -m -g test -d /home/test test---添加用户test  
  3. passwd test---修改test的密码  

 

2、赋予用户DB2权限

[c-sharp] view plain copy print ?
  1. db2 connect to sample---连接到sample数据库  
  2. db2 grant connect on database to user test---赋予test用户sample数据库的connect权限  
  3. db2 connect reset--关闭连接  

3、修改test用户的.bashrc文件

[c-sharp] view plain copy print ?
  1. -- 将下面的代码添加到test用户的.bashrc文件中。  
  2. if [ -f /db2home/db2inst1/sqllib/db2profile ]; then  
  3.     . /db2home/db2inst1/sqllib/db2profile  
  4. fi  
  5.    
  6. --测试连接  
  7. source .bashrc  
  8. db2 connect to sample  

    知道了如何添加DB2用户,那么想删除DB2用户该怎么办呢?很简单,只要删除操作系统中的用户就可以了,如下:

userdel test---删除操作系统用户

 

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

在操作系统层面,设置用户密码策略
smit user

 

用户login后,能够直接连接到数据库(db2 connect to brio8rep),但是无法通过设置用户名和密码的方式进行验证(db2 connect to brio8rep user briodb using password)

错误再现:

$ db2 connect to brio8rep

   Database Connection Information

 Database server        = DB2/6000 8.2.9

 SQL authorization ID   = HPSQRY

 Local database alias   = BRIO8REP

[db2inst] /db2/db2inst > db2 connect to brio8rep user hpsqry using password

SQL30082N  Attempt to establish connection failed with security reason "19"

("USERID DISABLED or RESTRICTED").  SQLSTATE=08001

Solution:

因为该用户设置为不允许登录系统的,在/etc/security/user里面设置"login=false,rlogin=false".

hpsqry:

        admin = false

        login = false    #这是不允许本地登录

        su = true

        rlogin = false   #这是不允许远程登录,例如ssh,telnet等等方式。

        loginretries = 3

为什么不加用户名就能够connect到数据库呢,这是有数据库authentication的方式决定的。

db2 connect to db_name,不经过OS系统认证这一步,因为AUTHENTICATION=SERVER,而你已经成功登录该系统,db2就会认为你是合法的user,但是用db2 connect to db_name user user_name using password,db2 需要通过OS进行重新Authentication,而系统会check /etc/security/user里面hpsqry的login=false,所以我们就会得到"USERID DISABLED or RESTRICTED" 的错误。

有两种方式可以解决这个问题,一是设置login=true。 另一种方式就是即可以保证user是不允许login,又要保证该user能够通过db2 connect to db_name user user_name using password方式连接数据库,就要设置一个db2 registry variable,那就是db2set DB2LOGINRESTRICTIONS=NONE,然后db2stop,在db2start重启数据库,就能够让该用户登录了。

 
Re: USERID DISABLED or RESTRICTED SQLSTATE=08001
Jan 31, 2010 in response
Hi,

This looks like to be OS permission related.
Please, check these links for additional information:
http://www.ibm.com/developerworks/forums/message.jspa?messageID=13805535
http://www.ibm.com/developerworks/forums/thread.jspa?messageID=14150887
http://publib.boulder.ibm.com/infocenter/db2luw/v9r5/index.jsp?topic=/com.ibm.db2.luw.messages.sql.doc/doc/msql30082n.html

Regards

 

 

http://www-01.ibm.com/support/docview.wss?uid=swg21222158

http://www-01.ibm.com/support/docview.wss?uid=swg21222158

Answer

To resolve this issue you can:

  • Ask the Windows administrator (someone with Administrator privileges) to add the "Access this computer from the network" privilege to the accounts of users who are connecting to the database. This can be done through "Computer Configuration\Windows Settings\Security Settings\Local Policies\User Rights Assignment" setting. If server authentication is being used, then the userid must have this access on the DB2 UDB server. If client authentication is being used, then the userid must have this privilege on the DB2 UDB client.

Alternatively:
  • Add the user to DB2ADMIN or DB2USERS group. During the installation of DB2 UDB, "Access this computer from the network" privilege is automatically granted to these groups if the Extended Security is enabled (that is, the DB2_EXTSECURITY registry variable is set to YES).

2.) Make sure that your user ID connecting to the DB2 database is not locked. (If the user id is locked out or disabled please contact your system administrator as this is outside of DB2 support scope.)

3.) Please make sure that the User ID in questions meets the following requirement:

  • Must have a primary group other than guests, admins, users, and local
  • Can include lowercase letters (a-z), numbers (0-9), and the underscore character ( _ )
  • Cannot be longer than eight characters
  • Cannot begin with IBM , SYS, SQL, or a number
  • Cannot be a DB2 reserved word (USERS, ADMINS, GUESTS, PUBLIC, or LOCAL), or an SQL reserved word
  • Cannot use any User IDs with root privilege for the DB2 instance ID, DAS ID or fenced ID.
  • Cannot include accented characters
  • If existing user IDs are specified instead of creating new user IDs, make sure that the user IDs:
  • Do not have expired passwords


4.) You can try setting the following DB2 environment variable:

db2set DB2LOGINRESTRICTIONS=NONE
(only for AIX)

 

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值