在很多面向对象设计中,面向对象的数据库设计是基础,它比应用程序更重要、更复杂。
由应用对象模型映射而来的面向对象的关系数据库,从结构上保证了数据库表和应用程序有较强的可维护性,而且便于实现从数据库功能设计出发的数据库结构设计。但是,结构再好的数据库,倘若没有确保其中数据安全可靠的体制和措施,即使只有一两个数据不真实,用户也有理由认为整个数据库不可信。因为一般用户不会直接关心数据库是如何优化的,特别是经过信息隐蔽处理,把应用程序中的某些静态数据(包括与它们封装在一起的服务器端处理程序)也放在服务器数据库中以后,数据库安全性问题还将影响到客户端应用程序是否正常运行。
在数据库性能设计中,安全性设计是最重要的课题,是数据库基础设计的一部分。
一、 数据库安全性设计的误区
在我国,数据库应用系统还很年轻,普及率不很高,没有形成社会依赖性,缺乏国外因数据库安全性事故而导致整个系统失效的惨痛教训,所以对安全性设计缺乏较深刻的认识,其表现大致可以列举如下:
1.亡羊补牢式的安全性设计
数据库安全性保障是基于结构的、体制的,是数据库设计中的上层设计。
但是,常常见到一些数据库应用系统开发人员,直到数据录入程序且已进入调试,才开始追加数据库用户管理设计,或者全部将其扔给服务器端的 DBMS 去管理。这是程序级系统设计的典型实例之一。
2.安全性设计是 DBMS 的任务
随着 DBMS 的发展,原来 DBMS 用户程序的一些共同处理越来越多地被 DBMS 所代替。80年代初期的数据库管理系统支持安全性、可靠性功能很弱,诸如用户管理、日志管理、数据库镜像、用户审计等完全由应用程序自己来完成。
目前,以 DBMS 为统领的各种数据库管理系统一般都有支持安全性功能。但是,这些功能大多需要在 DBMS 使用者的指示下工作。也就是说它需要数据库设计者进行安全性体系设计,然后把这个设计中 DBMS 可以完成的部分通知它,由 DBMS 去执行。在做安全性设计之前,有必要弄清以下一些问题:哪些功能是 DBMS 无条件为用户做的?哪些功能是DBMS 在用户的指示下做的?哪些功能需要用户与DBMS合作完成?哪些功能需要用户独立去完成?