0

我正在创建一个拥有许多用户的 Web 应用程序。每个用户都有自己的登录名和密码来访问应用程序。应用程序的数据将存储在数据库中。

由于应用程序将有很多用户,我想知道让用户通过我的应用程序连接到数据库的正确方法。

是创建多个数据库用户(帐户)还是简单地使用 master/root 从应用程序连接到数据库更好?


编辑/注意:应用程序用户将无法直接访问数据库。数据库与应用程序在同一台服务器上,不会对外开放。

4

2 回答 2

3

标准解决方案是您的应用程序有一个主登录名/密码来连接数据库。然后,您创建一个包含如下列的表:

  • 用户身份
  • 用户名
  • 密码加密
  • 电子邮件地址
  • 权限

请注意,密码会带来安全问题,您应该使用包来处理授权,或者阅读大量有关该主题的内容。不要在没有强加密的情况下将用户密码存储在数据库中。

于 2012-06-19T02:07:29.697 回答
3

各有利弊。

使用共享服务帐户对数据库进行身份验证具有能够更有效地汇集到数据库的连接的优势。也就是说,可以在用户之间重复使用连接,从而最大限度地减少有时打开新连接的成本高昂的操作,如果每个用户单独进行身份验证,您将不得不这样做。一个明确的问题是,您必须格外小心地验证用户正在运行的任何 SQL,因为该帐户的权限必须能够执行系统中最强大的用户需要能够执行的操作。

为每个用户使用一个帐户可以让您更灵活地为各种用户分配权限,而无需在应用程序中实现您自己的自定义授权方案。此外,它使审核系统更容易一些,因为您在检查数据库连接时就知道谁连接了。最后,这种方法可以减少您对 SQL 注入的脆弱性,因为您可以锁定每个用户的帐户(最好在 DB 平台中使用基于角色的安全性),以便只能执行应允许用户执行的操作。

因此,例如,如果他们以某种方式注入了 DELETE FROM UsersTable,那么您将锁定它并且注入的命令将失败,即使它通过了您的验证逻辑。

如果您的用户知道如何使用数据库工具(尤其是 MS Access)并且可以直接访问数据库服务器,那么还有另一个考虑因素。如果您使用每用户授权模型,您可能会遇到精明的用户绕过您的应用程序并直接针对数据库工作的麻烦。如果您的用户是一群程序员,您可能希望使用共享帐户。

如果您的应用程序被大量执行小交易的并发用户大量使用,请使用共享服务帐户进行数据库访问。

当您有较少的用户同时连接到系统或者您想要更高的安全性和/或更好地控制对对象的授权时,请使用帐户/每个用户方案。

于 2012-06-19T02:22:47.277 回答