【问题标题】:Allowing a user to access a table in DB2允许用户访问 DB2 中的表
【发布时间】: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


【解决方案1】:

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

SELECT * FROM db2admin.tb1

看看这是否有效。

【讨论】:

  • 我已经尝试过了,它正在工作。我已经更新了这个问题。谢谢!
【解决方案2】:

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

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

【讨论】:

  • 谢谢!我已经尝试过了,它正在工作。请查看更新后的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-28
  • 2018-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多