构建这些类型的 Web 应用程序最常用的设计方法是将安全策略整合到 Web 应用程序的业务逻辑中,即由应用程序决定某个用户是否有权访问数据库中的某个数据。在这种情形下,数据库的角色仅为存储数据和依请求提供数据。换句话说,如果 Web 应用程序命令数据库提供特定信息,则数据库会直接执行该命令而不检查用户的权限。
从 Web 应用程序控制数据访问会怎么样?大多数情况下没有问题;这是个不错的解决方案,尤其是在涉及的数据为非任务关键或绝密的时候。许多书和在线资源中都用到了该方法。实际上,有本很受欢迎的 PHP/MySQL 书明确反对每个应用程序创建一个以上的数据库用户帐户,这是因为“额外的用户或复杂的权限会因某个操作在继续前要检查更多的信息而降低 MySQL 的执行速度”。确实如此;但是,在放弃将安全性整合到数据库逻辑中的想法前可能要考虑几件事情。我们来看以下示例。
假设创建一个内容管理系统 (CMS)。其中使用数据库来存储网站上发布的内容。大部分数据是公开的,允许匿名 Web 用户读取;但只允许编辑更改数据。使用单一数据库帐户访问和修改数据库中的记录,并通过用口令保护仅管理员可以访问的页面的访问权限用 PHP 代码控制安全性。