2

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

4

3 回答 3

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;
于 2011-06-29T15:18:04.723 回答
2

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

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

SQL> create sequence foo;

Sequence created.

SQL> grant alter on foo to hr;

Grant succeeded.
于 2011-06-29T00:31:07.317 回答
0

你可以:

ALTER SESSION SET CURRENT_SCHEMA myschema..

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

于 2011-06-28T23:34:26.490 回答