我正在创建一个拥有许多用户的Web应用程序。每个用户都有自己的登录名和密码来访问该应用程序。应用程序的数据将存储在数据库中。
由于应用程序将拥有许多用户,我想知道使用户通过我的应用程序连接到数据库的正确方法。
创建数据库(帐户)的许多用户或仅使用master / root从应用程序连接到数据库是否更好?
编辑/注意:应用程序用户将无法直接访问数据库。数据库位于应用程序的同一服务器中,不会对外部访问开放。
答案 0 :(得分:3)
每个人都有利弊。
使用共享服务帐户对数据库进行身份验证的优点是能够更有效地池连接到数据库。也就是说,可以在用户之间重复使用连接,从而最大限度地减少打开新连接的有时昂贵的操作,如果每个用户单独进行身份验证,则必须执行此操作。一个明确的想法是,您必须格外小心验证用户正在运行的任何SQL,因为该帐户的权限必须能够执行系统中最强大的用户需要能够执行的操作。
为每个用户使用一个帐户可以更灵活地为各种用户分配权限,而无需在应用程序中实现自己的自定义授权方案。此外,它使审核系统变得更容易,因为您在检查数据库连接时知道谁连接了。最后,这种方法可以减少您对SQL注入的漏洞,因为您可以锁定每个用户的帐户(最好使用数据库平台中的基于角色的安全性),以便只能执行允许用户执行的操作。
因此,例如,如果他们以某种方式注入了DELETE FROM UsersTable,那么你就会将其锁定,注入的命令即使通过验证逻辑也会失败。
如果您的用户知道如何使用数据库工具(尤其是MS Access)并且可以直接访问数据库服务器,则还有另一个考虑因素。如果您使用每用户授权模型,那么精明的用户可能无法绕过您的应用程序并直接针对数据库工作。如果您的用户是一群程序员,您可能希望使用共享帐户。
如果您的应用受到大量小型交易的并发用户的大量投放,请使用共享服务帐户进行数据库访问。
当您同时连接到系统的用户较少或者您希望更高的安全性和/或更好地控制对象授权时,请使用帐户/每用户方案。
答案 1 :(得分:2)
标准解决方案是您的应用程序有一个主登录名/密码来连接数据库。然后,您创建一个包含如下列的表:
请注意,密码会带来安全问题,您应该使用程序包来处理授权,或者阅读主题上的批次。如果没有强加密,请不要将用户密码存储在数据库中。