管理应用程序与数据库服务器交互的最佳实践

管理应用程序与数据库服务器交互的最佳实践

这是我在 ServerFault 上提出的第一个问题,而且我对软件开发比管理更熟悉,所以我不确定这是否是一个有效的问题。

我正在创建一个 Web 应用程序作为学习练习,但我不确定我是否采取了正确的安全方法。我目前的计划是在数据库中为该应用程序创建一个用户帐户,并删除除执行一组代表 Web 应用程序的存储过程所需的权限之外的所有权限。

  1. 这是一个推荐的方法吗
  2. 我应该注意哪些事项?

作为参考,该应用程序将用 PHP 编写,使用的数据库是 MySQL

答案1

一般来说,最好通过界面进行身份验证/授权,然后允许界面使用应用程序帐户与存储库进行交互。为应用程序帐户提供应用程序正常运行所需的最低访问权限,以限制帐户被盗的影响。

我还建议避免在源代码或配置文件中使用纯文本凭据。考虑加密凭据,或者让应用程序在单个帐户下运行,以便所有数据库请求都在该帐户的上下文中完成。这样,服务器管理员就有责任维护凭据,而不是开发人员。

最后,我建议您将应用程序帐户添加到数据库中的角色,并授予该角色所需的必要权限。这样可以更轻松地处理将来对帐户的更改(即添加/删除角色,而不是授予/拒绝 100 个单独的权限)。

答案2

是的,这是一种推荐的方法。有一件事也是可能的,当您的应用程序变得越来越复杂并且您有不同的部分必须在数据库上执行不同的工作时,您可以创建更多帐户,例如一个具有读写访问权限的帐户和一个只有读访问权限的帐户。

但请确保不要根据需要使其变得更加复杂。这将恢复所有安全考虑,因为在某个时间点您不知道哪个用户使用什么,并且每个用户都会获得比他需要的更多的权限。

答案3

是的,你说得对。即使用户登录系统,最好也只是进行身份验证以使用该程序,而数据库访问则由单个用户处理。

这样做的缺点是,如果发生意外,当您检查 SQL 日志时,所有更改都是由同一用户进行的,因此很难缩小来源范围。良好的应用程序设计应该能够在很大程度上防止这种情况,但只需记住这一点即可。

答案4

更好的做法(但有点“理想化”)是数据库中的 ID 与应用程序中的 ID 相同,并且数据库用户帐户在数据库中的权限仅与应用程序内的权限相匹配。然后,您可以解决 Dynamo 正确指出的情况 - 您可以在数据库中看到应用程序中的相同用户。

我不知道这实现起来有多现实(我当然没有见过这样做),但它比拥有应用程序数据库所有权限的单个应用程序用户要好——这本身就是很多比使用“sa”帐户或类似的帐户来连接应用程序更好。

相关内容