问:我们公司正在想办法扩展现有的数据库管理系统(DBMS)基础设施,而且我们也在考虑如何以最佳方式来处理遗留数据的问题。为什么一家公司必须得把数据库和数据仓库分开呢?为什么不能只用一个大型数据库来存储当前的和历史的所有数据呢?把所有数据都存储在同一个数据库中,会不会产生重大的安全问题?
答:我之所以要强烈建议你不要把所有数据都移到一个大型数据库中,主要有以下几个原因。首先,如果你把所有数据都放在一个数据库中,那么此数据库就会成为对恶意黑客而言极具吸引力的攻击目标。这样,黑客只需攻击一个数据库就可以了,如果他们成功潜入此该数据库,那么他就可以访问所有的历史数据,而不光是你的当前数据。
但持反对意见的人则认为,只运行一个数据库可以节约成本,这样公司就可以增加在实施最佳安全控制措施方面的预算,并且集中所有防御能力来保护这个唯一的数据库。然而,在实际实施过程中,这种说法是站不住脚的。公司的数据库需要提供交易和分析服务,这意味着不同用户的数量、任务和访问要求将使安全配置过于复杂,会更容易出现错误配置和滥用的现象,很可能导致系统非常不安全。
例如,如果公司的数据库是用来处理网上订单的,那么就要保证互联网用户以及各个内部部门(如客户支持、决算和实现、以及诸如运送服务类的第三方供应商)对所下的订单拥有访问权。如果公司只有一个数据库,还必须制定一些形式来访问销售、营销和研究部门。数据库的最小特权安全原则要求减少访问实时数据的用户数量和类型,上述做法无疑是让你背离了这条安全原则。
正如你所看到的,如果设立的用户群体种类繁多,对这些群体设置中央数据库的访问权限和控制连接也将会相当复杂和困难,保护公司的数据库安全并不像你预想的那样简单。我建议你把历史数据移到数据仓库,并为当前活动创建一个独立的事务性数据库,这样二者的安全配置就都简单了很多。例如,用于分析的数据仓库,可以设计成执行查询的只读系统。由于数据仓库可以设计成专门处理复杂查询的系统,所以返回查询结果速度就会更快,而且也不会减慢实时交易的处理速度。对实时交易而言,及时做出反应至关重要。