我对用户有一个grant alter sequence
。但是我必须指定schema name
来改变序列,否则它会返回错误sequence does not exist
。是否可以以某种方式执行授权,因此我不必指定模式名称?我可以在不指定架构名称的情况下执行select/insert/update
。
答案 0 :(得分:6)
名称解析和访问权限是单独的概念。 grant
授予您更改架构的权限,但仍然受到您所在的命名空间的限制。有四种方法可以使一个架构中的名称在另一个架构中解析:
select schema_name.sequence_name.nextval from dual;
alter session set current_schema = schema_name;
create synonym sequence_name for schema_name.sequence_name;
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
..
然后你可以引用没有限定符的所有项目。