公有私有synonym中的許可權實際指向和dblink中global_names和許可權封裝
公有和私有同義詞和資料庫鏈路訪問
同義詞主要是用於訪問使用者的物件的一種方式,特別是公有同義詞可以省去別的user例如select * from user.tablename,
dba最常用的做法就是先grant select username.tablename,然後建public synonym賦予相應的select synonym或者本表,其實就是授予select synonym也實際上授予的是本表
如果同義詞和本表的name相同,預設的是優先訪問本表,然後私有同義詞,最後公有同義詞
下面涉及到同義詞的一些細節的地方都是本人測試的結果 oracle 10G 10.2.0
drop public synonym r$user 刪除public synonym
drop synonym r$user 刪除私有public synonym
建立遠端dblink的table的synonym
create or replace public synonym r$user_syn for
授權涉及到遠端資料庫的同義詞時
grant select on r$user_syn to syn
出現不允許對dblink的資料庫進行ddl操作ora-02021
建立使用者的objects下的同義詞生成的sql,個人覺得這個sql雖然大家都能寫出來,但是未必能想到
select 'create synonym'||object_name||'for abc.'||object_name||';' from user_objects
where object_type in ('TABLE','VIEW','PROCEDURE','TRIGGER','FUNCTION','PACKAGE')
刪除同義詞必須是同義詞的建立者或者有drop any synonym的許可權的user
建立public synonym
create public synonym inf_apply_syn for inf_apply
但是此時別的user還是不能訪問
select * from inf_apply_syn
授予select on synonym_name的許可權就可以了
grant select on inf_apply_syn to syn
建立私有同義詞
create or replace synonym student_syn for student
同樣訪問私有synonym也需要授權user訪問synonym_name的許可權
grant select on student_syn to syn
私有synonym必須指定user
select * from ashuang.student_syn
以上看出可能同義詞對應的還是真正存在的table view等,所以訪問同義詞還是實際訪問的table,view等,所以你必須有訪問實際物件的許可權,
不然即使grant select on synonym_name to user此user也是無權訪問的,現在也就可以解釋上面的無法對dblink的資料庫進行ddl操作。
因為你實際ddl操作的物件不是同義詞還是dblink的資料庫表,沒有遠端資料庫訪問的許可權肯定也就無法授權select遠端資料庫的表。
既然提到了資料庫鏈路
create public|database link database_link_name
connect to username identified by password
using 'service_name'
注意上面的這個service_name是tns檔案中的資料庫服務的別名
建立資料庫連結的帳號必須有CREATE DATABASE LINK或CREATE PUBLIC DATABASELINK的系統許可權,
用來登入到遠端資料庫的帳號必須有CREATE SESSION許可權。這兩種許可權都包含在CONNECT角色中(CREATEPUBLIC DATABASE LINK許可權在DBA中)。
一個公用資料庫連結對於資料庫中的所有使用者都是可用的,而一個私有連結僅對建立它的使用者可用。
由一個使用者給另外一個使用者授權私有資料庫連結是不可能的,一個資料庫連結要麼是公用的,要麼是私有的。
上面的私有dblink不等同於私有的synonym,私有的synonym是可以透過grant select on synonym_name to username來授權訪問的
但是私有的dblink不可能授權另一使用者。
此外還有一個引數需要注意global_names
sql>show parameter global_names
預設的是false
此時false值並不要求database link name和遠端資料庫name一致。
但是為TRUE時就會要求了此時database link name必須要於遠端資料庫select * from global_name;
此時如果select count(*) from ;
ORA-02085: 資料庫連結 DATABASE_LINK_JHQL 連線到 JHQL
還有關於dblink中涉及到遠端資料庫的lob欄位的物件是無法訪問,關於dblink封裝的許可權網上找不到比較全的資訊。
個人得出dblink是連線到遠端資料庫的指定user,那麼這個遠端的user的所有許可權我們透過dblink的都可以得到,也就是這個user的許可權我們dblink全封裝進去了。
.[@more@]
同義詞主要是用於訪問使用者的物件的一種方式,特別是公有同義詞可以省去別的user例如select * from user.tablename,
dba最常用的做法就是先grant select username.tablename,然後建public synonym賦予相應的select synonym或者本表,其實就是授予select synonym也實際上授予的是本表
如果同義詞和本表的name相同,預設的是優先訪問本表,然後私有同義詞,最後公有同義詞
下面涉及到同義詞的一些細節的地方都是本人測試的結果 oracle 10G 10.2.0
drop public synonym r$user 刪除public synonym
drop synonym r$user 刪除私有public synonym
建立遠端dblink的table的synonym
create or replace public synonym r$user_syn for
授權涉及到遠端資料庫的同義詞時
grant select on r$user_syn to syn
出現不允許對dblink的資料庫進行ddl操作ora-02021
建立使用者的objects下的同義詞生成的sql,個人覺得這個sql雖然大家都能寫出來,但是未必能想到
select 'create synonym'||object_name||'for abc.'||object_name||';' from user_objects
where object_type in ('TABLE','VIEW','PROCEDURE','TRIGGER','FUNCTION','PACKAGE')
刪除同義詞必須是同義詞的建立者或者有drop any synonym的許可權的user
建立public synonym
create public synonym inf_apply_syn for inf_apply
但是此時別的user還是不能訪問
select * from inf_apply_syn
授予select on synonym_name的許可權就可以了
grant select on inf_apply_syn to syn
建立私有同義詞
create or replace synonym student_syn for student
同樣訪問私有synonym也需要授權user訪問synonym_name的許可權
grant select on student_syn to syn
私有synonym必須指定user
select * from ashuang.student_syn
以上看出可能同義詞對應的還是真正存在的table view等,所以訪問同義詞還是實際訪問的table,view等,所以你必須有訪問實際物件的許可權,
不然即使grant select on synonym_name to user此user也是無權訪問的,現在也就可以解釋上面的無法對dblink的資料庫進行ddl操作。
因為你實際ddl操作的物件不是同義詞還是dblink的資料庫表,沒有遠端資料庫訪問的許可權肯定也就無法授權select遠端資料庫的表。
既然提到了資料庫鏈路
create public|database link database_link_name
connect to username identified by password
using 'service_name'
注意上面的這個service_name是tns檔案中的資料庫服務的別名
建立資料庫連結的帳號必須有CREATE DATABASE LINK或CREATE PUBLIC DATABASELINK的系統許可權,
用來登入到遠端資料庫的帳號必須有CREATE SESSION許可權。這兩種許可權都包含在CONNECT角色中(CREATEPUBLIC DATABASE LINK許可權在DBA中)。
一個公用資料庫連結對於資料庫中的所有使用者都是可用的,而一個私有連結僅對建立它的使用者可用。
由一個使用者給另外一個使用者授權私有資料庫連結是不可能的,一個資料庫連結要麼是公用的,要麼是私有的。
上面的私有dblink不等同於私有的synonym,私有的synonym是可以透過grant select on synonym_name to username來授權訪問的
但是私有的dblink不可能授權另一使用者。
此外還有一個引數需要注意global_names
sql>show parameter global_names
預設的是false
此時false值並不要求database link name和遠端資料庫name一致。
但是為TRUE時就會要求了此時database link name必須要於遠端資料庫select * from global_name;
此時如果select count(*) from ;
ORA-02085: 資料庫連結 DATABASE_LINK_JHQL 連線到 JHQL
還有關於dblink中涉及到遠端資料庫的lob欄位的物件是無法訪問,關於dblink封裝的許可權網上找不到比較全的資訊。
個人得出dblink是連線到遠端資料庫的指定user,那麼這個遠端的user的所有許可權我們透過dblink的都可以得到,也就是這個user的許可權我們dblink全封裝進去了。
.[@more@]
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/25362835/viewspace-1052880/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- linux 檔案許可權 s 許可權和 t 許可權解析Linux
- Oracle中定義者許可權和呼叫者許可權案例分析Oracle
- Android系統許可權和root許可權Android
- 選單許可權和按鈕許可權設定
- Oracle的物件許可權、角色許可權、系統許可權Oracle物件
- 如何用 Vue 實現前端許可權控制(路由許可權 + 檢視許可權 + 請求許可權)Vue前端路由
- Linux的檔案存取許可權和0644許可權Linux
- [技術討論]資料許可權中的理論和實際
- linux中安全和許可權那些事Linux
- Oracle 中的references許可權Oracle
- 角色許可權(Role)和系統許可權(System)的幾個澄清實驗
- 許可權之選單許可權
- 對定義者許可權和呼叫者許可權的理解
- Android6.0------許可權申請管理(單個許可權和多個許可權申請)Android
- android 6.0許可權機制的簡單封裝(支援批量申請許可權)Android封裝
- AIX 的許可許可權(轉)AI
- 系統許可權傳遞和物件許可權傳遞的測試物件
- Linux 中的許可權管理Linux
- 賬號和許可權管理
- 許可權系統:一文搞懂功能許可權、資料許可權
- 小知識:軟體開發的許可權控制和許可權驗證
- Linux-許可權管理(ACL許可權)Linux
- MySQL中如何得到許可權資訊MySql
- ClearCase中批量重置許可權命令
- 實現ABP中Person類的許可權功能
- Android 中的危險許可權Android
- Linux中的許可權機制Linux
- Linux中的檔案許可權Linux
- Linux中檔案的許可權Linux
- 查詢沒有許可權但資料字典中顯示有許可權
- 總結sysdba和sysoper許可權
- mysql使用者和許可權MySql
- 一對一原始碼,前端頁面許可權和按鈕許可權控制原始碼前端
- unlimited tablespace許可權的授予和回收MIT
- OGG的加密和許可權控制加密
- 【自然框架】許可權的視訊演示(二):許可權到欄位、許可權到記錄框架
- mysql許可權MySql
- MySQL 許可權MySql