为什么另一个用户看不到一个用户创建的Oracle类型?

时间:2015-10-09 16:11:41

标签: database oracle rights-management

我在OracleXE db中有2个用户:ALICEBOB。以下一系列步骤在我的本地机器上成功完成:

  • ALICE
  • 连接
  • 创建顶级类型:create or replace type testtype as object(x number(16)); (编辑:错误名称foo的更正误导了Matthew McPeak)
  • BOB
  • 连接
  • BOB查看ALICE的类型:
    • select * from all_types返回行
    • declare x ALICE.testtype; begin null; end;编译

在类型对BOB不可见的情况下应用于我们的开发数据库产量的相同步骤,即select不返回类型的行,PLSQL块编译失败并出现PLS-00201: identifier 'ALICE.TESTTYPE' must be declared错误。

我需要让类型可见,所以我问:可能导致这种差异的原因是什么?(我猜测需要对类型或公共同义词进行授权,但是这个简约的例子证明了相反的情况。)用户/会话的一些属性?我尽力使用谷歌搜索,但现在我被困住了,但我希望解决方案是微不足道的。两个数据库都是Oracle 11g(11.2.0.1.0 dev,11.2.0.2.0 local)。

谢谢!

1 个答案:

答案 0 :(得分:0)

我假设这不仅仅是您为类型foo命名,而是尝试将其用作testtype

如果foo是正确的名称,则为ALICE

grant execute on foo to bob;

Bob可能在第一个数据库中具有EXECUTE ANY TYPE或类似的系统特权。