【问题标题】:Oracle grant alter sequenceOracle 授予更改序列
【发布时间】:2011-06-28 23:23:39
【问题描述】:

我有一个grant alter sequence 给用户。但是我必须指定schema name 来更改顺序,否则它会返回错误sequence does not exist。是否可以通过某种方式进行授权,这样我就不必指定架构名称?我可以在不指定架构名称的情况下执行select/insert/update

【问题讨论】:

    标签: oracle sequence alter grant


    【解决方案1】:

    名称解析和访问权限是不同的概念。 grant 允许您更改架构,但您仍然受到您所在的命名空间的限制。有四种方法可以使一个架构中的名称在另一个架构中解析:

    1. 使用对象名称引用架构:
      select schema_name.sequence_name.nextval from dual;
    2. 更改当前会话以解析名称,就像您在其他架构中一样:
      alter session set current_schema = schema_name;
    3. 为当前架构中的对象创建同义词:
      create synonym sequence_name for schema_name.sequence_name;
    4. 为对象创建公共同义词:
      create public synonym sequence_name for schema_name.sequence_name;

    【讨论】:

    • 我发现我们已经有一个公开的同义词,而alter sequence 仍然无法正常工作,当我尝试更改它时收到sequence does not exist 错误。
    【解决方案2】:

    听起来您以与拥有该序列的用户不同的用户身份连接到数据库。在这种情况下,您需要在序列前加上模式,否则您所谈论的序列会模棱两可。

    如果您作为拥有用户连接到数据库,则不需要架构限定符:

    SQL> create sequence foo;
    
    Sequence created.
    
    SQL> grant alter on foo to hr;
    
    Grant succeeded.
    

    【讨论】:

      【解决方案3】:

      你可以:

      ALTER SESSION SET CURRENT_SCHEMA myschema..

      然后您可以引用所有不带限定符的项目。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-11-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-09-25
        • 2020-11-30
        相关资源
        最近更新 更多