我有grant alter sequence
一个用户。但是我必须指定schema name
来更改序列,否则它会返回错误sequence does not exist
。是否可以通过某种方式进行授权,这样我就不必指定架构名称?我可以select/insert/update
不指定架构名称。
问问题
21965 次
3 回答
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;
于 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 回答