Oracle中的同義詞SYNONYM

Hoegh發表於2015-04-29

同義詞實質上是指定方案物件的一個別名。透過遮蔽物件的名稱和所有者以及對分散式資料庫的遠端物件提供位置透明性,同義詞可以提供一定程度的安全性。同時,同義詞的易用性較好,降低了資料庫使用者的SQL語句複雜度。

同義詞允許基物件重新命名或者移動,這時,只需對同義詞進行重定義,基於同義詞的應用程式可以繼續執行而無需修改。

你可以建立公共同義詞和私有同義詞。其中,公共同義詞屬於PUBLIC特殊使用者組,資料庫的所有使用者都能訪問;而私有同義詞包含在特定使用者的方案中,只允許特定使用者或者有基物件訪問許可權的使用者進行訪問。

同義詞本身不涉及安全,當你賦予一個同義詞物件許可權時,你實質上是在給同義詞的基物件賦予許可權,同義詞只是基物件的一個別名。

 

建立同義詞

在你自己的方案中建立私有同義詞時,你必須擁有CREATE SYNONYM許可權;在其他方案中建立私有同義詞時,你必須擁有CREATE ANY SYNONYM許可權;建立公共同義詞,你必須擁有CREATE PUBLIC SYNONYM系統許可權。

我們透過CREATE SYNONYM語句來建立一個同義詞,需要注意的是,為了成功建立同義詞,我們既不需要基物件一定存在,也不需要擁有訪問基物件的許可權。下面的語句建立了jward使用者下emp表的公共同義詞public_emp

 

點選(此處)摺疊或開啟

  1. CREATE PUBLIC SYNONYM public_emp FOR jward.emp


當你為遠端的過程或者函式建立同義詞時,你必須限定遠端物件的方案名稱;相應的,你可以為駐留在本地資料庫的遠端物件建立本地公共同義詞,在這種情況下,在後續呼叫儲存過程或者函式時必須包含資料庫連結。

 

DML語句中使用同義詞

你可以使用方案內部的所有私有同義詞;另外,只要你擁有訪問基物件的必要許可權,或者明確地透過特定角色,再或者透過PUBLIC,你就可以訪問任意的公共同義詞。你也可以訪問其他方案的私有同義詞,前提是你被賦予了訪問相應基物件的許可權。

只要你被賦予了基物件許可權,你就可以使用其他使用者的私有同義詞。例如,你只擁有jward.emp表的SELECT許可權,jward.emp表有一個同義詞jward.employee,這時,你就只能對jward.employee同義詞進行查詢操作,而不能使用它進行插入資料。

DML語句中,同義詞的使用方式和基物件的使用方式完全相同。例如,一個名稱為employee的同義詞,下面語句是有效的:

點選(此處)摺疊或開啟

  1. INSERT INTO employee (empno, ename, job)
  2.     VALUES (emp_sequence.NEXTVAL, 'SMITH', 'CLERK');


如果fire_emp是一個獨立的程式或程式包的同義詞,你就可以執行以下命令:


點選(此處)摺疊或開啟

  1. EXECUTE Fire_emp(7344);



刪除同義詞
       你可以刪除本方案中的任一私有同義詞;如果你要刪除其他使用者方案的私有同義詞,你必須擁有DROP ANY SYNONYM系統許可權;如果你要刪除公共同義詞,你必須擁有DROP PUBLIC SYNONYM系統許可權。

你可以透過DROP SYNONYM語句來刪除一個不再需要的同義詞,當刪除私有同義詞時,省略PUBLIC關鍵字;當刪除公共同義詞時,需要包含PUBLIC關鍵字。

例如,下面語句刪除名為emp的同義詞:

 

點選(此處)摺疊或開啟

  1. DROP SYNONYM emp;

下面的語句刪除名為public_emp的公共同義詞:

 

點選(此處)摺疊或開啟

  1. DROP PUBLIC SYNONYM public_emp;

當你刪除一個同義詞時,它的定義就會從資料字典中移除。與此同時,與之相關的所有物件依然存在,但是,他們的狀態都變為無效(不可用)。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30162081/viewspace-1610012/,如需轉載,請註明出處,否則將追究法律責任。

相關文章