允许用户访问DB2中的表

允许用户访问DB2中的表,db2,Db2,我使用的是DB210.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 t

我使用的是DB210.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的模式中

表示找不到对象。我的猜测是,由于您没有提供模式,因此表被隐式地放在
db2admin
模式中。试着做

SELECT * FROM db2admin.tb1
看看是否有效。

表示找不到该对象。我的猜测是,由于您没有提供模式,因此表被隐式地放在
db2admin
模式中。试着做

SELECT * FROM db2admin.tb1

然后看看这是否有效。

您从用户DB2ADMIN创建了表,将使用隐式模式。在本例中,该表称为db2admin.tb1


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

您从用户DB2ADMIN创建了表,将使用隐式架构。在本例中,该表称为db2admin.tb1


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

我已经尝试过了,它正在工作。我已经更新了这个问题。谢谢我已经试过了,而且很有效。我已经更新了这个问题。谢谢谢谢我已经试过了,而且很有效。请查看更新的问题。谢谢!我已经试过了,而且很有效。请查看更新的问题。下面的答案是正确的。用户在发出查询时最好使用完全限定的表名(
schema.table
),而不是依赖当前的模式。同样,在创建表时,请明确指定模式:
create table schema.table(…)
下面的答案是正确的。用户在发出查询时最好使用完全限定的表名(
schema.table
),而不是依赖当前的模式。类似地,在创建表时,明确指定模式:
create table schema.table(…)