我在Oracle方面没有太多经验,所以如果这是一个简单的问题,我很抱歉。
我必须将数据库中的许多对象从一个模式移动到另一个模式。我也在尝试更新所有依赖项,但为了安全起见,我想留下一个链接。
示例:
现在我的 Schema 1 ( S1 ) 中有一个MyTable。用户像这样引用它:
S1.MyTable
我想将MyTable移动到 Schema 2 ( S2 )
S2.MyTable
我希望我的用户仍然能够像以前一样使用 MyTable。
S1.MyTable / MyTable 确实在 S2 中,但用户可以通过 S1 /
我一直在阅读同义词,似乎您可以创建公共的,以便用户可以直接引用对象,例如:
MyTable
但我需要他们能够编写S1.MyTable
我可以为此使用同义词吗?
是的当然。您只需要在 S1 模式中创建同义词(不是公共同义词)。
以下是搜索任何对象的工作原理(此示例假定用户具有适当的权限,并且您没有以“schema.table”的形式进行调用)
因此,如果您创建一个公共同义词,则任何有权访问基础表上的至少 select 的用户都可以看到它,而无需您采取任何进一步的行动,甚至可以为新用户继续前进。如果您创建私有同义词,则必须为必须访问该特定对象的每个用户创建私有同义词,并且您必须为移动的每个对象执行此操作(这适用于表、序列,以及各种其他 DDL,如包、函数等)。
任一选项都是可接受的,具体取决于该对象所需的安全级别。