允许用户访问DB2中的表

时间:2014-04-22 14:00:56

标签: db2

我正在使用DB2 10.5并且有两个用户:db2admin和db2user。 db2admin是Windows 7操作系统的管理员,而db2user是普通用户。我使用db2admin创建了一个名为DB1的数据库,现在我想允许db2user访问其中的TB1表。

我使用了以下命令:

db2 => connect to db1 user db2admin using db2admin
db2 => grant select, insert, update, delete on tb1 to user db2user

按照以下命令执行结果:

connect to db1 user db2user using db2user
SELECT * FROM SYSIBMADM.PRIVILEGES WHERE AUTHID = SESSION_USER AND AUTHIDTYPE = 'U'

AUTHID     AUTHIDTYPE PRIVILEGE   GRANTABLE OBJECTNAME
DB2USER    U          UPDATE      N         TB1
DB2USER    U          SELECT      N         TB1
DB2USER    U          INSERT      N         TB1
DB2USER    U          DELETE      N         TB1

根据该结果集,db2user似乎具有TB1的权限。但是,当我尝试使用db2user以编程方式访问它时,抛出了以下错误:

DB2 SQL Error: SQLCODE=-204, SQLSTATE=42704, SQLERRMC=DB2USER.TB1

根据错误代码,DB2USER架构中没有TB1。

以下命令确认:

connect to db1 user db2user using db2user
db2 => list tables

0 record(s) selected.

我错过了什么或做错了什么?任何关于如何使这项工作的指导都非常感谢。

更新:我已经尝试使用db2admin访问同一个表,它运行正常。我想要做的是使用db2user访问它,但db2user不应该创建表;这是db2admin的工作。那我该怎么做呢? db2admin如何将表放在db2user的模式中?

2 个答案:

答案 0 :(得分:3)

SQLCODE -204表示无法找到该对象。我的猜测是,由于您没有提供架构,因此您的表被隐式放在db2admin架构中。尝试做

SELECT * FROM db2admin.tb1

看看是否有效。

答案 1 :(得分:3)

您是从用户DB2ADMIN创建的表,将使用隐式架构。在这种情况下,该表称为db2admin.tb1

当您从DB2USER执行select时,隐式模式是相同的用户名,并且该表不存在。

相关问题