【发布时间】:2014-04-22 22:40:29
【问题描述】:
我使用的是 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 的模式中?
【问题讨论】:
-
下面的答案是正确的。用户在发出查询时最好使用完全限定的表名 (
schema.table),而不是依赖于CURRENT SCHEMA。同样,在创建表时,明确指定架构:CREATE TABLE schema.table (...)
标签: db2