分布式数据库系列(三)

Names for Database Links
数据库链接的命名
通常情况下,数据库链接名称与要连接的远程数据库的全局数据库名称一样.比如:
远程数据库的全局数据库名称叫sales.us.example.com,数据库链接也叫sales.us.example.com;
如配置初始化参数global_names=true,则必须配置数据库链接和远程的全局数据库名一致.
数据库每次连接远程数据库时,会检查数据字典中的全局数据库名称.而非初始化参数的db_domain.
但若配置global_names=false,没必要使用全局命名规则了.数据库链接可以任意命名.

数据库链接的类型
Types of Database Links
file:///C:/Users/123/Desktop/每天工作明细/文档/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 t_sex@second1;
 
select * from t_sex@second1
 
ORA-01017: 用户名/口令无效; 登录被拒绝
ORA-02063: preceding line from SECOND1

---在源端创建与远端同样的用户
SQL> conn sys/system@orcl as sysdba
Connected to Oracle Database 11g Enterprise Edition Release 11.2.0.1.0
Connected as sys@orcl 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 tbl_bck/system@orcl
Connected to Oracle Database 11g Enterprise Edition Release 11.2.0.1.0
Connected as tbl_bck@orcl
--再次运行即可查询
SQL> select * from t_sex@second1;
 
                                      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 t_remote@second1(a int);
 
create table t_remote@second1(a int)
 
ORA-02021: DDL operations are not allowed on a remote database

--不允许远端授权
SQL> grant select on t_sex@second1 to new;
 
grant select on t_sex@second1 to new
 
ORA-02021: DDL operations are not allowed on a remote database

不允许远端分析
SQL> exec dbms_stats.gather_table_stats@second1(user,'t_sex');
 
begin dbms_stats.gather_table_stats@second1(user,'t_sex'); 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 t_sex@second1;
Object t_sex@second1 does not exist.

SQL> desc v_t_sex;
Object v_t_sex does not exist.

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

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/9240380/viewspace-754822/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/9240380/viewspace-754822/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值