浅谈分布式数据库跨库操作的安全设计

时间:2022-09-30 12:25:01

浅谈分布式数据库跨库操作的安全设计

摘要:在通信帐务系统中,由于分布式式数据库的使用,从而存在许多的跨库操作和应用的跨库设计。但是在跨库操作带来方便的同时,由于设计的不合理,许多情况也会给数据库的安全管理带来隐患。本文从实际应用中用到较多的数据库链接、同义词、存储过程的跨库操作简单阐述跨库设计时应注意的安全事项。

关键词:数据库链接 同义词 存储过程 权限

中图分类号:TP311.13 文献标识码:A 文章编号:1007-9416(2012)09-0186-02

在现在通信行业业务支撑系统建设中,由于数据库数据量的巨大,通常会根据不同业务模块建设成分布式数据库。如将计费帐务系统中数据可以按清单查询提供、前台帐务营收、计费处理、报表统计等划分,分布到不同的数据库实例,这样,通过模块化的数据分流,减轻了单一数据库的资源压力,均衡了负载,提高了各应用模块程序的效能。

同时,各数据库实例作为一个整体,存在一定的耦合性,分布的数据库之间的存在不同程度的相互沟通。如统计数据需要采集清单数据、营收帐务数据,计费处理时需要访问客户资料数据等。这些操作如果通过数据库之间进行操作就涉及到跨库操作的问题。

作为一个整体系统中的分布式数据库之间存在跨库操作是非常普遍的,尤其是数据库链接、同义词和存储过程的跨库操作在应用程序中广泛使用,这些给应用程序的设计实现带来了极大的方便,同时,从安全的角度也带来了一些问题。下面从安全管理的角度针对跨库操作进行一些讨论。

1、数据库链接(DATABASE LINK)

数据库链接是在分布式环境下,为了访问远程数据库而创建的数据通信链路。通过数据库链接隐藏了对远程数据库访问的复杂性。数据库之间通过数据库链接的创建,使得登陆到本地数据库上的用户可以访问远程数据库上的数据或进行其他跨库操作。可以说,跨库操作实现的基础就是数据库链接的使用。

创建数据库链接的语句如下:

CREATE DATABASE LINK 链接名 CONNECT TO 账户 IDENTIFIED BY 口令 USING 服务名;

数据库链接建立测试成功后,就可以采用以下形式来访问远程用户的表:

表名@数据库链接名

例如:在局域网上创建和使用数据库链接。

首先:在本地数据库网络服务名配置文件(tnsnames.ora)中添加远端数据库的服务名,假定服务名为remotedb。

然后:登录本地数据库,执行创建数据库链接命令:

CREATE DATABASE LINK link_rmt1 CONNECT TO scott IDENTIFIED BY tiger USING 'remotedb';

测试是否可以使用:

SELECT sysdate FROM dual@link_rmt1;

如果正常返回远端数据库的系统时间,则数据库链接正常建立。

这里有两个问题需要注意,一是远端数据库scott帐户的权限,二是public参数。

建立数据库链接用到的远端数据库帐户的权限对跨库操作有很大的影响,从一定意义上说,跨库操作的安全级别就是由这个帐户所决定的。本地用户在本地数据库可以进行的操作,只要这个数据库链接用户拥有这些权限,本地用户同样可以用于远端数据库进行操作(通过数据库链接是不可以进行DDL操作的,如create、drop、truncate等)。本例中,如本地用户拥有resources权限,在本地数据库可以对自己的对象进行DML(update、delete、insert)操作。在数据库链接用户scott具有update any tables权限的情况下,本地用户是可以对远端数据库进行update any tables操作的,如

UPDATE scott2.test_table@link_rmt1 SET state=’YES’;

即在本地数据库只能对自己所属对象进行DML操作的权限限制,在远端数据库则没有这个限制了。

其次,在对public参数使用上,也是要比较注意的。Public参数在数据库中处于较低的级别,几乎不可能对登陆数据库用户进行限制访问。建立了public数据库链接,就等于承认在数据库链接的权限范围内,远端数据库对本地数据库所有用户都是开放的。

再者,在测试库等管理相对开放的数据库用权限较大的帐户建立了数据库链接,必将成为远端数据库管理的安全漏洞。

所以,在进行数据库设计时,应该严格控止public参数的数据库链接的建立;其次,建立的数据库链接尽量避免使用具有DML权限的用户;然后,对数据库中的密码定期进行修改也可起到一定修补安全漏洞的效果。

2、同义词(SYNONYM)

同义词是数据库方案对象的一个别名,经常用于简化对象访问和提高对象访问的安全性。在Oracle数据库中的大部分数据库对象,如表、视图、同义词、序列、存储过程、函数、JAVA类、包等,都可以根据实际情况为他们定义同义词。同义词可以分两类,分别是公用同义词与私有同义词。公用同义词由一个特殊的用户组Public所拥有,数据库中所有的用户都可以使用公用同义词。私有同义词是由创建他的用户或者方案所有。

使用同义词有以下优点,可以实现在不同的数据库用户之间的无缝交互,不同用户在访问时都使用同一个名称;可以创建指向远端数据库的对象,简化了远程数据库的对象的访问;可以为不存在的对象创建同义词,为应用开发提供了方便。

创建同义词语句:

CREATE OR REPLACE SYNONYM 同义词名 FOR 对象名;

跨库操作使用远程的数据库上的表的同义词,如下语句:

CREATE SYNONYM customer_t FOR erp.customer_t@remotedb;

在使用同义词时,Oracle数据库将它翻译成对应方案对象的名字。用户使用同义词访问对象可以分两部分,使用同义词和访问对象。例如,PUBLIC同义词是数据库中所有用户都可以使用的,但是要想实际访问到数据,还必须有访问原本对象的权限。如果没有同义词指向的表的操作权限,就会遇到报错信息“ora-00942: table or view does not exist”。

在跨库同义词的管理上,首先,要注意使用公用同义词,避免同义词和其他对象名称的重叠,如本地库中的表和指向远程数据库的表的同义词名称一样,可能就会在操作时造成一定混淆;其次,要注意同义词操作权限的赋予,尽量避免DML操作,当然,跨库同义词的操作权限是同数据库链接的权限相关的。

3、存储过程(PROCEDURES)

数据库中过程是一个PL/SQL块描述,它存储在数据字典中并可被应用调用。

存储过程在分布式数据库环境下,可以分两部分理解,

一个是跨库调用存储过程,二是在存储过程中使用了数据库链接或者跨库同义词。

跨库调用存储过程在实际应用中很少用到。当然,用不到更好。因为跨库存储过程的调用有很多限制,会发生意想不到的错误事件,如DDL操作在跨库操作时是不允许的;同时,由于执行跨库存储过程调用对本地用户和数据库链接用户的权限要求都比较高,也不利于数据库权限的管理。

在本地存储过程中使用到数据库链接或者跨库同义词在分布式数据库环境的应用中是经常用到的。好处是它可以增加数据库之间的耦合性,减少了设计难度,尤其是跨库同义词的使用,对程序的编写也提供了方便。缺点是,为了使用的方便而忽略了安全的考虑,如 public数据库链接、public同义词的使用,远端数据库DML权限的赋予等。因为这些设计是应用的基础,后期发现安全问题再去修复将花费相当的时间和代价。

4、结语

跨库操作方便了大型应用系统分布式数据库之间的互访性,同时,也带了安全隐患,只有从数据库管理的基础层面考虑,将设计基于安全层面之上,才能使应用得到充分的施展,也能将数据得到有效的保障。

参考文献

[1]李晓军等.《Oracle8数据库管理员手册》[M].北京:机械工业出版社 1998.393.

[2]Oracle数据库链接建立技巧与实例讲解(1) http:///art/200810/93619.htm.

[3]冯凤娟.《SQL与PL/SQL程序设计基础》.北京.清华大学出版社,2002.11

上一篇:校园网络安全问题及对策研究 下一篇:复合型三维扫描测量机软件系统的测量技术与数...