Oracle 如何确定用户是否需要架构来访问表?

Oracle 如何确定用户是否需要架构来访问表?,oracle,Oracle,应用程序需要访问各种Oracle数据库。有些数据库在模式中有表,有些没有-对此无法控制 如果数据库正在使用模式,则除非用户输入模式,否则适用的模式将不起作用。我希望它能够通过SQL查询确定访问表是否需要架构,以便向用户发出警告 我知道这个问题——但这只告诉我可以访问什么模式,而不是访问表是否需要使用模式 是否有对其中一个系统表的SQL查询可以使用该用户的权限执行此操作 注意:应用程序只有登录凭据,不知道任何表详细信息 希望这是清楚的。谢谢。这个问题让人困惑。在Oracle的大部分中,可以考虑Lo

应用程序需要访问各种Oracle数据库。有些数据库在模式中有表,有些没有-对此无法控制

如果数据库正在使用模式,则除非用户输入模式,否则适用的模式将不起作用。我希望它能够通过SQL查询确定访问表是否需要架构,以便向用户发出警告

我知道这个问题——但这只告诉我可以访问什么模式,而不是访问表是否需要使用模式

是否有对其中一个系统表的SQL查询可以使用该用户的权限执行此操作

注意:应用程序只有登录凭据,不知道任何表详细信息


希望这是清楚的。谢谢。

这个问题让人困惑。在Oracle的大部分中,可以考虑Logi==用户==schema。当您与用户一起登录到数据库时,您可以查看和访问该用户模式中的所有对象

如果连接的用户具有访问表的权限(有不同的权限…),则SCHEMA2.TABLE1可以访问其他模式(在同一数据库服务器上)中的对象。如某些注释中所述,如果存在同义词,则不需要为表添加前缀。
如果存在适当的数据库链接,用户甚至可以访问某些远程服务器上的表。

Oracle数据库中的所有对象都在架构中。如果您是以其他用户身份登录的,则必须使用架构名称限定对另一架构(即,由另一用户拥有)中对象的访问。除非(a)有一个同义词,它可以是您登录的用户拥有的私有同义词,或者(我认为)在您的情况下更可能是一个公共同义词,您可以在
所有同义词中检查它;或者当前架构已通过
alter session
更改(这可以通过登录触发器完成。无论如何,您仍然可以使用架构进行验证。您试图处理的是什么场景?@AlexPoole Yep抱歉。我对Oracle的了解不够,不知道我在问什么。:-)-问题是一些用户可以访问他们的数据而不指定模式,而一些用户则不能(取决于他们的数据库结构)。有些是以数据拥有者的身份登录的,有些不是。我希望能够确定他们何时输入连接凭据,是否也需要输入架构详细信息synonyms@tbone-我想你误解了。无法控制数据库或数据结构。他们都不一样。这纯粹是从应用程序端开始的——它需要能够适应这种变化,并确定连接是否需要“模式”。否则,它可能会使用一个不应该提供或不需要提供的模式。如果应用程序不知道将访问哪些表(它允许一般查询?),则无法提前测试。一些表可能有公共同义词,但其他表没有,所以一个测试也没用。如果它们可能在不同的模式中,那么
alter会话也不会有帮助。总是用模式作为前缀不会有什么坏处,只是需要更多的输入。我能想到的唯一粗略猜测是看看您登录的用户是否拥有任何表(在
user_tables
);如果他们不这样做,那么他们将需要一个模式,除非有同义词,如果他们这样做,那么他们会假设他们拥有他们想要访问的所有东西吗?