【发布时间】:2011-06-28 23:23:39
【问题描述】:
我有一个grant alter sequence 给用户。但是我必须指定schema name 来更改顺序,否则它会返回错误sequence does not exist。是否可以通过某种方式进行授权,这样我就不必指定架构名称?我可以在不指定架构名称的情况下执行select/insert/update。
【问题讨论】:
标签: oracle sequence alter grant
我有一个grant alter sequence 给用户。但是我必须指定schema name 来更改顺序,否则它会返回错误sequence does not exist。是否可以通过某种方式进行授权,这样我就不必指定架构名称?我可以在不指定架构名称的情况下执行select/insert/update。
【问题讨论】:
标签: oracle sequence alter grant
名称解析和访问权限是不同的概念。 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;
【讨论】:
alter sequence 仍然无法正常工作,当我尝试更改它时收到sequence does not exist 错误。
听起来您以与拥有该序列的用户不同的用户身份连接到数据库。在这种情况下,您需要在序列前加上模式,否则您所谈论的序列会模棱两可。
如果您作为拥有用户连接到数据库,则不需要架构限定符:
SQL> create sequence foo;
Sequence created.
SQL> grant alter on foo to hr;
Grant succeeded.
【讨论】:
你可以:
ALTER SESSION SET CURRENT_SCHEMA myschema..
然后您可以引用所有不带限定符的项目。
【讨论】: