【发布时间】:2011-10-27 06:05:05
【问题描述】:
什么决定了 Oracle 对象(表、视图等)是否需要使用模式名称(例如 schema.table_name 或 schema.view_name 等)进行限定?有时我可以访问远程对象(通过数据库链接)而无需限定模式,但有时,我收到一条错误消息,指出“表或视图不存在”,为了纠正这个问题,我必须限定模式名称。
我知道始终限定架构名称是一种最佳做法,但我只是好奇为什么我能够在没有限定架构的情况下访问某些远程对象,而只能通过限定架构访问其他对象。
【问题讨论】:
-
正如您所指出的,最佳做法是使用模式名称进行限定。请注意,如果您不这样做,并且有人获得了深入的数据库访问权限,他们可能会劫持您的工作。例如,如果他们更改了同义词以使 DBMS_UTILITY 指向 MyBadSchema.DBMS_UTILITY 而不是 SYS.DBMS_UTILITY,该怎么办。您不会知道,他们可以轻松捕获您的电话或做其他有问题的事情。所以有资格。