Oracle授予更改序列

时间:2011-06-28 23:23:40

标签: oracle sequence alter grant

我对用户有一个grant alter sequence。但是我必须指定schema name来改变序列,否则它会返回错误sequence does not exist。是否可以以某种方式执行授权,因此我不必指定模式名称?我可以在不指定架构名称的情况下执行select/insert/update

3 个答案:

答案 0 :(得分:6)

名称解析和访问权限是单独的概念。 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;

答案 1 :(得分:1)

听起来您以与拥有序列的用户不同的用户身份连接到您的数据库。在这种情况下,您需要在序列前加上模式,否则您所说的是什么序列是不明确的。

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

SQL> create sequence foo;

Sequence created.

SQL> grant alter on foo to hr;

Grant succeeded.

答案 2 :(得分:0)

你可以:

ALTER SESSION SET CURRENT_SCHEMA myschema ..

然后你可以引用没有限定符的所有项目。