2011-06-28 124 views
2

我有一個grant alter sequence給用戶。但是我必須指定schema name來更改序列,否則會返回錯誤sequence does not exist。是否有可能以某種方式進行授權,所以我不必指定模式名稱?沒有指定模式名稱,我可以做select/insert/updateOracle grant alter sequence

回答

6

名稱解析和訪問權限是不同的概念。該grant給你的權限改變架構,但你還是通過您所在的命名空間受限的有四種方法可以使一個名字在一個模式的決心。另:

  1. 參考與架構對象名稱:
    select schema_name.sequence_name.nextval from dual;
  2. 將當前會話,如果你是在其他模式來解析名稱:
    create synonym sequence_name for schema_name.sequence_name;
  3. 創建一個公共區域:
    alter session set current_schema = schema_name;
  4. 在當前模式的對象創建一個同義詞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.