这是场景(简化示例):
我有一个名为 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 中进行选择,从而违背了本练习的目的,因为我希望这个案例给出错误。
交给你...