Oracle synonym 同義詞
Oracle synonym 同義詞是資料庫當前用戶通過給另外一個用戶的對象創建一個別名,然後可以通過對別名進行查詢和操作,等價於直接操作該資料庫對象。Oracle同義詞常常是給表、視圖、函數、過程、包等制定別名,可以通過CREATE 命令進行創建、ALTER 命令進行修改、DROP 命令執行刪除操作。
Oracle synonym 同義詞按照訪問權限分為私有同義詞、公有同義詞。
私有同義詞:私有同義詞只能當前用戶可以訪問,前提:當前用戶具有create synonym 權限。
公有同義詞:公有同義詞只能具有DBA用戶才能進行創建,所有用戶都可以訪問的。
語法結構:
CREATE [OR REPLACE] [PUBLIC] SYSNONYM [當前用戶.]synonym_nameFOR [其他用戶.]object_name;
解析:
1、create [or replace] 命令create建表命令一樣,噹噹前用戶下同義詞對象名已經存在的時候,就會刪除原來的同義詞,用新的同義詞替代上。
2、[public]:創建的是公有同義詞,在實際開發過程中比較少用,因為創建就代表著任何用戶都可以通過自己用戶訪問操作該對象,一般我們訪問其他用戶對象時,需要該用戶進行授權給我們。
3、用戶名.object_name:oralce用戶對象的權限都是自己用戶進行管理的,需要其他用戶的某個對象的操作權限,只能通過對象擁有者(用戶)進行授權給當前用戶。或者當前用戶具有系統管理員權限(DBA),即可通過用戶名.object_name操作該對象。
案例分析:
我們在jsq_copy用戶下也創建了一張學生信息表(stuinfo),該信息表只存在一個學生信息「張三丰」。由於我們當前用戶student用戶不具有jsq_copy.stuino的權限,因此要需要該用戶授權,然後才能訪問。代碼如下:
--未授權之前查詢(提示表不存在,沒有操作權限)select * from jsq_copy.stuinfo;--登錄jsq_copy用戶進行授權conn jsq_copy/123456;grant all on stuinfo to student;--授權後再次查詢該表數據conn student/123456;select * from jsq_copy.stuinfo;
結果:
我們現在為jsq_copy.stuinfo創建同義詞stuinfo_copy,然後通過當前用戶student直接操作同義詞stuinfo_copy查詢jsq_copy.stuinfo表數據。代碼如下:
create synonym stuinfo_copy for jsq_copy.stuinfo;
結果:
同義詞刪除
同義詞刪除只能通過同義詞擁有者的用戶或者具有DBA權限的用戶才能刪除。
語法結構:
DROP [PUBLIC] SYNONYM [用戶.]sysnonym_name;