我正在使用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的模式中?
答案 0 :(得分:3)
答案 1 :(得分:3)
您是从用户DB2ADMIN创建的表,将使用隐式架构。在这种情况下,该表称为db2admin.tb1
当您从DB2USER执行select时,隐式模式是相同的用户名,并且该表不存在。