我一直在测试我帮助开发的一个软件,它驻留在一个32位应用程序服务器上。它将连接到一个64位数据库服务器,该服务器使用IBM DB2 v10.1。
我是安装DB2的人,但我很确定它已经被修改了;我不能再使用用户名/密码:db2admin/db2admin进行连接。
我必须使用Administrator/p@ssw0rd。我不记得自己创建了这个用户——它是计算机本身的一个本地帐户——但从我的ODBC测试中,它可以连接到数据库。
然而,它似乎没有任何特权。我试图查看这个"用户"使用Data Studio 3.2.0的位置,但失败了,不过考虑到我使用DB2的经验(缺乏经验),这并不奇怪。
我的担心是双重的:
- 查找此"管理员"所在的位置。
- 并修改其特权以复制db2admin的特权,后者实际上是数据库管理员。
我试图在网上研究这个问题,结果失败了——要么是所谓的解决方案不起作用,要么是它太复杂了,我无法理解它是否起作用(它没有)。
我已经试过了:
- 通过Data Studio 3.2.0直接修改数据库右键单击数据库,选择Manage Privileges,并检查我能找到的所有内容——注意,我没有找到任何"Administrator",只有"PUBLIC"、"DB2ADMIN"、"SYSDEBUG"。而且,它似乎不保存。
- 'Select * from SYSCAT。DBAUTH where grant = 'Administrator';我猜,这会生成一长串表格。不知道如何处理它们,但是如果我将'Administrator'替换为'db2admin',我会得到完全相同的结果。
- 使用Data Studio创建名为'Administrator'的新用户;
拜托,我想要一些关于这个的启示;DB2是一个非常令人沮丧的数据库。我使用的是DB2 v10.1、Data Studio 3.2.0和Windows Server 2008。
DB2身份验证依赖于外部机制,例如操作系统安全性或ldap。如果你的情况是,似乎是Windows安全。
DB2授权是内部的,所以任何授权都在数据库内部,除了一些例外。
DB2中有几个权限,一些在实例级,另一些在数据库级。在数据库级别,您可以通过查询目录在数据库中找到它们,并且可以将它们分配给用户或组。在实例级的其他权限与操作系统组(外部机制)相关联
数据库中的最高权限是DBADM,实例级别的最高权限是SYSADM。与SYSAMD相关联的组中的每个用户自动成为实例内所有数据库中的DBADM。
好吧,这只是对DB2安全性的一个简短解释。这意味着您的"Administrator"用户具有"connect"特权(有时"connect"特权是公共的,这意味着任何用户都可以连接),但它没有任何其他特权,也没有权限。
最后,在Windows环境中,还有另一个安全层,它将两个组DB2ADMNS和DB2USERS中的用户关联起来。欲了解更多信息,请查看此链接http://publib.boulder.ibm.com/infocenter/db2luw/v10r1/topic/com.ibm.db2.luw.admin.sec.doc/doc/c0023391.html
好了,我解决了它,但是为什么会发生这种情况还有待观察;
创建用户'Administrator'后,我通过检查所有内容来修改权限。
你必须在TABLE上给USER一个SELECT权限。
GRANT SELECT, INSERT ON mytable TO USER peter
"db2不令人沮丧!"