分散式資料庫系列(三)

wisdomone1發表於2013-02-27

Names for Database Links
資料庫連結的命名
通常情況下,資料庫連結名稱與要連線的遠端資料庫的全域性資料庫名稱一樣.比如:
遠端資料庫的全域性資料庫名稱叫sales.us.example.com,資料庫連結也叫sales.us.example.com;
如配置初始化引數global_names=true,則必須配置資料庫連結和遠端的全域性資料庫名一致.
資料庫每次連線遠端資料庫時,會檢查資料字典中的全域性資料庫名稱.而非初始化引數的db_domain.
但若配置global_names=false,沒必要使用全域性命名規則了.資料庫連結可以任意命名.

資料庫連結的型別
Types of Database Links
每天工作明細/文件/oracle文件/oracle11g官方文件/server.112/e25494/ds_concepts002.htm#i1007709

型別              所用者                                                                   描述
private           建立db_link的使用者,可用dba_db_links檢視資訊                               唯建立db_link的使用者及使用者所在的plsql包可使用db link

public            此使用者名稱為public,同上用dba_db_links檢視資訊                              與上區別,資料庫上所有使用者及plsql包可以此db_link


global            同上                                                                      建立一個全網範圍或全網級別的資料庫連結.當oracle網路使用目錄伺服器時,目錄
                                                                                            伺服器會自動建立和管理此全網範圍內的每個資料庫的資料庫連結.每個資料庫中的
                                                                                            使用者及PLSQL透過資料庫連結可以訪問遠端資料庫的物件.
                                                                                            (注:早期資料庫版本,資料庫連結是註冊到ORACLE NAMES SERVER,而現版本是用目錄伺服器)
                                                                                             進行管理
                                                                                            

選取上述資料庫連結的原則:
1,如考慮到安全性,可選用private,僅建立DB LINK的使用者可儲存遠端資料庫的物件
2,如想一些人用一個路徑訪問儲存遠端資料庫,可用PUBLIC
3,如在ORACLE網路環境已構建了目錄伺服器,當然最好使用global,可集中一站式管理

資料庫連結的使用者
Users of Database Links

使用者型別                              描述                                                                    建立語法
connected user                        任何可以訪問資料庫連結的資料庫使用者,不用指定固定的使用者及密碼;
                                      即如以system資料庫訪問資料庫連結,則以system訪問遠端資料庫               create public database link hq using 'hq';
                                     

curren user                           處於current_user資料庫的連結的全域性使用者. 此全域性使用者必須透過
                                      x.509認證(一種基於ssl認證的企業使用者).這個處於current_user資料庫         create public database link hq connect to current_user
                                      的連結是oracle高階安全元件一個部分.這個全域性使用者位於包含此資料庫         using 'hq';
                                      連結的資料庫中.
                                     
fixed user                            必須在定義資料庫連結中指定使用者及密碼.連線資料庫連結時,必須用            create public database link hq connect to jane identified by
                                      資料庫連結中的使用者密碼訪問遠端資料庫.                                   password using 'hq';
                                     
                                     


Connected User Database Links                                                                                                                                                                      
--測試connect user database links,未指定使用者及密碼
SQL> create public database link second1 using 'second';
 
Database link created
 
SQL> show user
User is "scott"
--在遠端資料庫tbl_bck使用者已建立表t_sex
---但在源端查提示使用者密碼不存在
SQL> select * from ;
 
select * from
 
ORA-01017: 使用者名稱/口令無效; 登入被拒絕
ORA-02063: preceding line from SECOND1

---在源端建立與遠端同樣的使用者
SQL> conn as sysdba
Connected to Oracle Database 11g Enterprise Edition Release 11.2.0.1.0
Connected as AS SYSDBA
 
SQL> create user tbl_bck identified by system account unlock;
SQL>
 
User created
 
SQL> grant dba to tbl_bck;
 
Grant succeeded
--而且還要以對應使用者連線
SQL> conn
Connected to Oracle Database 11g Enterprise Edition Release 11.2.0.1.0
Connected as
--再次執行即可查詢
SQL> select * from ;
 
                                      A
---------------------------------------
                                      1
---確認下本地不存在此表
SQL> desc t_sex;
Object t_sex does not exist.

其不利因素:
  1,需要進行更多的許可權管理工作,因為資料庫連結的使用者需要遠端資料庫的許可權.為了安全.
僅提供完成工作的許可權即可
  2,本地使用者連線或使用密碼認證或採用作業系統認證或網路認證服務.如使用者採用作業系統外
部認證,遠端資料庫remote_os_authent必須配置為true,否則不能連線到遠端資料庫用資料庫連結.
  3,此引數已棄用,僅用於相容
 
 
Fixed User Database Links
 源庫當前使用者建立指定使用者密碼的資料庫連結
 定義資訊儲存在資料字典中
 
Current User Database Links
1,必須使用全域性使用者
2,全域性使用者必須使用x.509認證
3,全域性使用者必須位於資料庫連結所有的資料庫中
4,使用current_user database link的使用者不必是全域性使用者,即
  jane使用者(不是全域性使用者)採用密碼認證到資料庫accounts payable.
  jane使用者透過儲存過程儲存hq資料庫的資料.
  此儲存過程使用current user database link
  在儲存過程中使用全域性使用者scott訪問hq資料庫.
  (說白:使用集中一個資訊庫訪問遠端資料庫,這個資訊庫由一個儲存過程管理,僅去訪問此儲存過程即可訪問遠端資料庫)
 
current user database link一些要點:(current user database link略為連結)
1,如不能訪問儲存過程(資訊庫)中的連結,當前即使用當前連結的使用者
2,如執行一個訪問連結的儲存過程,此儲存過程可能是儲存過程,檢視,或觸發器,當前使用者
  即這些物件的用有者,而非呼叫這些物件的使用者.
3,如資訊庫(儲存過程)是一個invoker's rights function,儲存過程,包,基於invoker's 認證id進行連線遠端資料庫.
  如:使用者jane呼叫scott.p儲存過程(由scott建立invoker's rights procedure),但jane是當前使用者;
  (說白:就是哪個呼叫,哪個就是當前使用者,非建立者)
4,不能以一個企業使用者連線到資料庫,不用使用已存在的一個共享,全域性使用者的儲存過程中的current use link
  如:使用者jane訪問遠端資料庫hq共享使用者的一個儲存過程,jane不能使用其儲存過程所含的current database link
  訪問遠端資料庫.
 
資料庫連結一些操作限制:
1,不能對遠端資料庫的物件進行授權操作
2,不能對遠端資料庫物件執行desc,但如下物件支援desc,
   tables
   views
   procedures
   functions
3,不能分析遠端物件
4,不能定義遠端物件的引用完整性
5,不能為遠端物件授於角色
6,?Obtain nondefault roles on a remote database. For example, if jane connects to the local database
  and executes a stored procedure that uses a fixed user link connecting as scott,
 jane receives scott's default roles on the remote database. Jane cannot issue
 SET ROLE to obtain a nondefault role.
  不能獲取遠端資料庫的非預設角色.比如:jane連線到本地庫,並呼叫一個使用fixed user link(其以scott連線)
  的儲存過程, 如此,jane會接收遠端資料庫scott的預設角色.但jane不能使用set role獲取非預設角色.
7,未基於ssl,pasword,nt本地認證的current user link不能操作.

--測試示例:
--不允許對遠端資料庫進行ddl操作
SQL> create table int);
 
create table int)
 
ORA-02021: DDL operations are not allowed on a remote database

--不允許遠端授權
SQL> grant select on to new;
 
grant select on to new
 
ORA-02021: DDL operations are not allowed on a remote database

不允許遠端分析
SQL> exec );
 
begin ); end;
 
ORA-06550: line 2, column 7:
PLS-00512: Implementation Restriction: 'DEFAULT_ESTIMATE_PERCENT': Cannot directly access remote package variable or cursor

--與上述限制不符,不能desc遠端表及檢視
SQL> desc ;
Object does not exist.

SQL> desc v_t_sex;
Object v_t_sex does not exist.

--alter不允許遠端操作
SQL> alter table add primary key(a);
 
alter table add primary key(a)
 
ORA-02021: DDL operations are not allowed on a remote database

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

相關文章