SQL30082N 尝试建立连接失败,安全性原因为 "19"

SQL30082N 尝试建立连接失败,安全性原因为 "19"

数据库 2009-11-18 14:14:45 阅读183 评论0   字号:大中小 订阅

       今天解决了一个DB2数据库连接的问题。

       问题的现象是,Windows 2003 Server,安装了DB2 8.x数据库,使用administrator账号通过远程桌面登录到操作系统。在CLP中直接 db2 connect to mydb,是可以成功连接的。但如果改成 db2 connect to mydb user administrator using xxxxxx,则会报错:  SQL30082N  尝试建立连接失败,安全性原因为 "19"("USERID DISABLED or RESTRICTED")。  SQLSTATE=08001。

       我改用其他数据库账号,现象也是一样的,不加 user xxx using xxxx 时可以连接成功,加了就报上面的错误。我先检查了一下db2 get dbm cfg | find /i "GROUP",发现SYSADM组没有设定,那么对于windows操作系统来说默认的就是administrator组,我到 administrator组下检查了一下,发现这几个数据库账号都在该组下,所以应该没什么问题。

      再db2 get dbm cfg | find /i "AUTH",看到身份认证模式是SERVER,这正好回答了为什么不加user xxx using xxxx时可以连接上数据库,因为这时候我已经成功登录操作系统了,所以不带这些参数时DB2会认为该用户已经验证通过了,可以直接访问数据库。那为什么加上 user xxx using xxxx 以后就不行了呢,因为此时 DB2 会调用 Windows 自己的验证机制来做身份认证。对于windows 2003 server,到控制面板-->管理工具-->本地安全策略-->本地策略-->用户权限分配 中,可以看到两个策略:从网络访问此计算机、拒绝从网络访问这台计算机。检查了一下,数据库账号所在组确实包含在“从网络访问此计算机”策略中,没有问题,再检查一下“拒绝从网络访问这台计算机”策略,发现其中有个组包含了数据库帐户(因为数据库帐户不仅在 administrator组中,也还在其它组中存在)。从该策略中删除这些组,然后 db2stop、db2start,重新 db2 connect to mydb user administrator using xxxxxx,连接成功!

      问题解决了,但深层的原因还需要继续挖掘和学习,比如为什么这些账号可以从远程桌面登录,说明这些账号是可以从网络访问此计算机的,但却不能访问DB2数据库?这里并不需要db2comm参数和services来支持远程客户端连接阿。另外一个心得是,最好给db2建立独立的用户组,而不是直接用 administrator组,这样安全性没有保障,而且安全策略也不好分配。

你可能感兴趣的:(windows,数据挖掘,db2)