2011-06-28 13 views
2

私はgrant alter sequenceをユーザに持っています。しかし、schema nameを指定してシーケンスを変更しなければ、エラーsequence does not existが返されます。スキーマ名を指定する必要がないように、許可を行うことは可能ですか?スキーマ名を指定せずにselect/insert/updateを実行できます。Oracleによる許可変更シーケンス

答えて

6

名前解決とアクセス権限は別々の概念です:あなたが所有するユーザとしてデータベースに接続している場合は

は、スキーマ修飾子を必要としません。 。

  1. 参考とスキーマ:別に1点のスキーマの解決に名前を作る4つの方法がありますgrantは、スキーマを変更する許可を与えますが、あなたはまだあなたがしている名前空間によって制約していますオブジェクト名:
    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. PUBLを作成します。オブジェクトのためのIC同義語:
    create public synonym sequence_name for schema_name.sequence_name;
+0

私たちはすでにパブリック・シノニムを持っていると 'sequence'はまだ動作しません変更を発見、私はそれを変更しようとすると、シーケンスがエラーをexist'しません'取得します。 – Eqbal

0

あなたは可能性があります

ALTER SESSION SET CURRENT_SCHEMA myschema ..

、あなたが修飾子なしですべての項目を参照することができます。

1

シーケンスを所有するユーザーとは異なるユーザーとしてデータベースに接続しているようです。その場合は、シーケンスをスキーマで始める必要があります。そうでない場合は、あなたが話しているシーケンスがあいまいです。

SQL> create sequence foo; 

Sequence created. 

SQL> grant alter on foo to hr; 

Grant succeeded. 
関連する問題