【发布时间】:2011-11-26 02:20:14
【问题描述】:
这是场景(简化示例):
我有一个名为 ABC 的 Oracle 用户/模式。 ABC 拥有一个名为 TRN 的表。客户端代码作为 ABC 连接到数据库并从 ABC.TRN 中选择。
到目前为止一切顺利。但是,我不希望客户端代码指定 Oracle 模式名称。现在我想我已经删除了客户端代码中所有引用模式的引用,但我想对此进行测试以确保。
所以我想创建一个名为 DEF 的新用户/模式,客户端将使用它来连接到数据库。当客户端应用程序从 ABC.TRN 中选择时,它必须给出错误。但是,如果客户端应用程序从 TRN(无模式名称)中选择,它必须返回数据。
有没有办法做到这一点?注意DEF必须和ABC在同一个数据库,只有一个表TRN表(ABC所有),不能使用数据库链接。
我尝试使用指向 ABC.TRN 的同义词创建一个新的 XYZ 用户,并赋予它在 ABC.TRN 上的选择权限。然后,我使用指向 XYZ.TRN 的同义词创建了 DEF 用户,并赋予 DEF 对 XYZ.TRN 的选择权限。这可行,但 Oracle 足够聪明,知道如果 DEF 有权从 XYZ.TRN 中进行选择,那么它也有权从 ABC.TRN 中进行选择,从而违背了本练习的目的,因为我希望这个案例给出错误。
交给你...
【问题讨论】:
标签: database oracle schema synonym rights