这是我在ServerFault上的第一个问题,我比pipe理更熟悉软件开发,所以我不确定这是否是一个有效的问题。
我正在创build一个Web应用程序作为学习练习,我不确定我是否正在采取正确的安全方法。 我目前的计划是为数据库中的应用程序创build一个用户帐户,并删除除执行代表Web应用程序的一组存储过程所必需的所有权限。
参考应用程序将用PHP编写,使用的数据库是MySQL
一般来说,最好通过接口进行authentication/授权,然后允许接口使用应用程序帐户与存储库进行交互。 为应用程序帐户提供应用程序运行所需的最小访问量,以限制受入侵的帐户的影响。
我还build议避免在源代码或configuration文件中使用纯文本凭据。 考虑encryption凭据,或者很可能让应用程序在一个帐户下运行,以便所有数据库请求都在该帐户的上下文中完成。 这样服务器pipe理员负责维护凭据,而不是开发人员。
最后,我build议您将应用程序帐户添加到数据库中的某个angular色,并为该angular色授予您所需的必要权限。 这样可以更轻松地处理将来对帐户的更改(即添加/删除angular色,而不是授予/拒绝100个单独的权限)。
是的这是一个推荐的方法。 有一件事情也是可以的,当你的应用程序变得越来越复杂,而且你有不同的部分需要在你的数据库上做不同的工作时,你可以创build更多的账户,例如一个使用rw访问,另一个只读访问。
但是一定不要让它变得更加复杂。 这将恢复所有的安全考虑,因为在某个时间点,你不知道哪个用户使用哪个用户,并且每个用户将获得比他需要更多的权限。
是的,你说得对。 即使用户login系统,对于该login来说,最好的方法就是使用该程序进行身份validation,而数据库访问由单个用户进行处理。
这样做的缺点是,当你去检查你的SQL日志,如果发生了什么不愉快的事情,所有的变化将由同一个用户,使得很难缩小一个来源。 良好的应用程序devise应该能够防止这个大部分,但只是牢记在心。
一个更好的做法,但是“在理想世界中”种类,应该是在应用程序中拥有相同的数据库标识,并且数据库用户帐户只有在数据库中具有与其权限相匹配的权限应用程序。 然后,您可以解决Dynamo正确指出的情况 – 您可以在数据库中看到应用程序中的相同用户。
我不知道该如何实现(我当然没有看到这样做),但是比单个应用程序用户拥有应用程序数据库的所有权利要好 – 这本身比使用“ sa'帐户或类似的应用程序的连接。