我注意到大多数FOSS应用程序(例如Wordpress)只使用一组已授予所有权限的数据库凭据。这似乎违反了最小特权原则。
在编写这样的应用程序时,最好使用多个帐户,例如,一个帐户只用于SELECT查询,另一个帐户用于UPDATE等?
答案 0 :(得分:2)
这肯定违反了最小特权原则。我们回到definition:
在信息安全,计算机科学等领域, 最小特权原则,也称为最小原则 特权或最小特权,要求特定 计算环境的抽象层,每个模块(例如 基于我们的层的过程,用户或程序 考虑)必须能够只访问这些信息和 为合法目的所必需的资源。
在Wordpress示例中,公共用户使用SQL帐户从数据库中检索数据,该帐户还可以更改或删除该数据。此用户的“最小权限”不包括访问更改该数据是否直接在存储过程的表上。这绝对不符合“仅访问其合法目的所必需的此类信息和资源”。
SQL环境中的风险主要是SQL注入。一个小缺陷,如果公共账户有权造成损害,那么你最终会遇到各种各样的问题。是的,输入应该被验证,是的查询应该参数化,但这是一个额外的防御层,为您提供额外的保险。
我在OWASP Top 10 for .NET developers part 1: Injection专门讨论了这个问题。
答案 1 :(得分:1)
我想如果只是为了维护问题会更糟。一个用户意味着凭证是一个地方,并且可以在一个地方为每个服务器更新凭证。此外,大多数框架都假设有一个凭据设置来统治所有框架,虽然允许两个+并不太难,但它更令人讨厌。
如果你有一个只有select的权限的用户,你可以获得一些好处,你不必担心SQL注入(肯定不是Bobby Tables级别),但即便如此也是如此保证,所以你必须要清理你的数据输入(他们仍然可以根据选择......进行注射攻击。)。
答案 2 :(得分:0)
最佳做法是为存储过程而不是在表级别授予权限。