【问题标题】:Create oracle read only user for ODBC为 ODBC 创建 oracle 只读用户
【发布时间】:2019-02-21 20:02:08
【问题描述】:

我在 oracle 数据库上创建了一个用户,使用

create user xxx identified by test; 
grant create session to xxx;
grant select any table to xxx;
grant select any dictionary to xxx;

我还从 Excel 设置了一个 ODBC 连接,该连接对用户 yyy 工作正常,但是当我尝试对 xxx 执行相同操作时,我收到错误:表或​​视图不存在。

所以我的问题是,如何让表格显示/可供用户 xxx 使用?

感谢您的帮助。 干杯

【问题讨论】:

  • 对不起,同样要明确一点,用户 xxx 应该对数据库/表具有只读访问权限。
  • 提供更多信息,它可能会帮助您得到答案。例如谁是表的所有者,从哪个用户调用 GRANTS,表是否有公共同义词
  • @ThomasG - 请解释一下您如何认为连接“属于默认模式 (SYS)。首先,没有“默认”模式,当然不是 SYS,它掌握着王国的钥匙。其次,当用户连接时,他总是“陷入”(奇怪的术语)他自己的模式,其中所有非限定名称引用都解析为他自己的命名空间。
  • 感谢 cmets,我对这个设置很陌生,也是第一次尝试这个。我正在使用用户 XXX(在数据库中称为 oracle)创建用户 YYY。当我以 YYY 身份登录时,我可以在 ORACLE 用户下看到数据库中的所有表,但是当我以 YYY 用户身份登录时,我看不到任何表。 @DesignerAnalyst 我不确定如何检查所有者或它是否具有公共同义词。

标签: oracle


【解决方案1】:

您需要在模式 XXX 中为模式 YYY 中的表创建 SYNONYM。

grant create synonym to XXX;

以用户 YYY 运行此 SQL。

select 'CREATE SYNONYM ' ||tname|| ' for  '||'YYY.'||TNAME||';'  from tab
where tname not like 'BIN$%'

例如,输出这条sql。

CREATE SYNONYM TEST2 for  YYY.TEST2;
CREATE SYNONYM TEST_ARCHIVE for  YYY.TEST_ARCHIVE;
CREATE SYNONYM TEST_ONLINE for  YYY.TEST_ONLINE;

以 XXX 身份运行此 SQL

CREATE SYNONYM TEST2 for  YYY.TEST2;
CREATE SYNONYM TEST_ARCHIVE for  YYY.TEST_ARCHIVE;
CREATE SYNONYM TEST_ONLINE for  YYY.TEST_ONLINE;

【讨论】:

    【解决方案2】:

    同义词的解决方案是可以的。另一个选项是更改当前架构

    1. grant alter session to xxx
    2. 以 xxx 身份登录
    3. 登录到数据库后。 ALTER SESSION SET CURRENT_SCHEMA = yyy

    现在每个对象的名称都将在模式 yyy 下解析

    【讨论】:

    • 或者完全限定表的名称,即SELECT * FROM YYY.SOME_TABLE而不是SELECT * FROM SOME_TABLE。在第一种情况下,OP 会准确地知道他们正在访问哪个表。
    猜你喜欢
    • 2011-11-22
    • 1970-01-01
    • 2014-08-11
    • 1970-01-01
    • 2020-07-04
    • 2015-01-31
    • 2019-01-18
    • 1970-01-01
    • 2010-10-20
    相关资源
    最近更新 更多