偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

Oracle重編譯同義詞(Synonym)遇到ORA-01031總結

數(shù)據(jù)庫 Oracle
我們在編譯INVALID的同義詞(synonym)的時候,可能在某些版本會遇到一些特殊權限問題,具體來說是遇到ORA-01031錯誤。

[[409302]]

本文轉載自微信公眾號「DBA閑思雜想錄」,作者瀟湘隱者。轉載本文請聯(lián)系DBA閑思雜想錄公眾號。

我們在編譯INVALID的同義詞(synonym)的時候,可能在某些版本會遇到一些特殊權限問題,具體來說是遇到ORA-01031錯誤。下面構造這樣一個例子:

如下所示,scott用戶下面創(chuàng)建了一個公共同義詞emp(下面測試環(huán)境為Oracle 10.2.0.5)

  1. SQL> show user
  2. USER is "SCOTT" 
  3. SQL> create public synonym emp for scott.emp; 
  4.  
  5. Synonym created. 
  6.  
  7. SQL>  

假設我們需要重新編譯同義詞,在system用戶下去編譯同義詞時,就會遇到ORA-01031

  1. SQL> show user
  2. USER is "SYSTEM" 
  3. SQL> alter public synonym emp compile; 
  4. alter public synonym emp compile 
  5. ERROR at line 1: 
  6. ORA-01031: insufficient privileges 

另外一種情況也會遇到這個錯誤,UserA 去編譯UserB下的同義詞的話,也會遇到這個錯誤。按照我的理解,如果用戶擁有CREATE ANY SYNONYM和DROP ANY SYNONYM權限的話,應該是可以編譯其它SCHEMA下的同義詞。而且SYSTEM用戶被授予了DBA角色,DBA角色擁有CREATE ANY SYNONYM 或DROP ANY SYNONYM的權限。

  1. SQL>  SELECT * FROM DBA_SYS_PRIVS WHERE PRIVILEGE IN('CREATE ANY SYNONYM','DROP ANY SYNONYM'AND GRANTEE='DBA'
  2.  
  3. GRANTEE                        PRIVILEGE                                ADM 
  4. ------------------------------ ---------------------------------------- --- 
  5. DBA                            DROP ANY SYNONYM                         YES 
  6. DBA                            CREATE ANY SYNONYM                       YES 
  7.  
  8.  
  9. SQL> SELECT * FROM DBA_ROLE_PRIVS WHERE GRANTEE='SYSTEM'
  10.  
  11. GRANTEE                        GRANTED_ROLE                   ADM DEF 
  12. ------------------------------ ------------------------------ --- --- 
  13. SYSTEM                         AQ_ADMINISTRATOR_ROLE          YES YES 
  14. SYSTEM                         DBA                            YES YES 
  15. SYSTEM                         MGMT_USER                      NO  YES 

但是metalink上的文檔Doc ID 1299001.1提示:同義詞的編譯時,要么是sys用戶或者同義詞的OWNER才能編譯,也就是說,你要編譯同義詞emp,必須是scott用戶或sys用戶。

  1. SQL> show user 
  2. USER is "SYS" 
  3. SQL> alter public synonym emp compile; 
  4.  
  5. Synonym altered. 

所以在Oracle 10g下要編譯其它schema下的同義詞,必須是sys用戶。Ora-01031 When Compiling A Synonym (Doc ID 1299001.1)的介紹如下:

文檔Ora-01031 When Executing Alter Synonym Compile For Other Schema (Doc ID 1435898.1)中也有相關簡單闡述

在Oracle 11.2.0.4.0中測試也是如此。但是后續(xù)官方文檔中將這個現(xiàn)象視為一個Bug,官方文檔4189542 - Only SYS can "alter synonym... compile" for another users's synonym (Doc ID 4189542.8)中有簡單介紹,并且在后面的一些版本中修復了這個Bug,Doc ID 4189542.8的具體信息如下如下:

  1. Only SYS can "alter synonym... compile" for another users's synonym. 
  2.  
  3. Other users get ORA-1031 attempting to compile another users synonym. 
  4.   
  5.   
  6.  
  7. With this fix a user with both CREATE ANY SYNONYM and DROP ANY SYNONYM  
  8.  
  9. privilege is allowed to issue ALTER SYNONYM .. COMPILE for another users synonym. 

相同的現(xiàn)象在不同文檔中有不同闡述,確實有點讓人迷惑,如果獲取的信息不全或比較片面的話,可能會對這個問題和現(xiàn)象有不同的理解。

參考資料:

Ora-01031 When Compiling A Synonym (Doc ID 1299001.1)

Ora-01031 When Executing Alter Synonym Compile For Other Schema (Doc ID 1435898.1)

Bug 4189542 - Only SYS can "alter synonym... compile" for another users's synonym (Doc ID 4189542.8)

 

責任編輯:武曉燕 來源: DBA閑思雜想錄
相關推薦

2011-04-13 16:39:43

2010-04-22 14:29:12

Oracle同義詞

2010-04-22 14:26:00

Oracle創(chuàng)建同義詞

2021-01-19 08:09:04

Oracle數(shù)據(jù)庫權限

2010-05-06 09:09:13

Oracle同義詞

2010-04-22 14:55:39

2010-05-04 14:02:53

Oracle同義詞

2011-08-12 12:59:33

Oracle數(shù)據(jù)庫同義詞

2011-08-02 17:06:29

Oracle遠程數(shù)據(jù)庫創(chuàng)建DB Link

2010-10-28 10:37:54

Oracle批量賦權

2023-03-08 15:38:56

Linux命令dict

2010-10-12 13:55:41

MySQL EXPLA

2021-04-17 23:10:59

Python微軟Word

2020-07-07 10:50:19

Python丄則表達文本

2010-04-22 11:32:57

Lvs負載均衡

2010-02-02 10:33:22

C++引用

2011-07-21 16:10:11

button按鈕jQuery Mobi

2025-03-28 03:20:00

MySQL數(shù)據(jù)庫搜索

2017-11-13 13:39:24

SparkHadoop大數(shù)據(jù)

2013-05-20 10:56:35

點贊
收藏

51CTO技術棧公眾號