3

我正在设计一个 Web 应用程序,这是我的第一个严肃的 Web 应用程序。它会有一些具有不同权限的用户(RBAC/ACL)。可以想象,我有点担心权限管理和安全性

这就是为什么我想知道为什么在 Web 应用程序中,用户通常存储在数据库中而不是数据库用户(例如 Joomla!)。我觉得这是一种不安全的身份验证方法:数据库连接总是使用对 db 具有完全或非常高权限的 db 用户来完成,所以可以做和不能做的事情由 Web 应用程序通过编写 RBAC/ACL 授权来管理层(所以我在数据库中有一堆表,其中包含用户、权限级别等)。

从概念的角度来看,我认为更好的方法是使用更多的数据库用户(每个权限级别至少一个,或者每个 Web 应用程序的用户更好)以保护数据库中的数据(如果我存在安全漏洞并且攻击者发现了数据库的连接信息,他的权限将受到被黑用户帐户权限的限制)。

我看到这种方法实施起来相当笨拙,但另一方面它更安全。

为什么不使用这种方法?这只是为了方便起见,还是在安全性和易于编码之间寻求正确的权衡?或者,也许我只是把两个不同的东西(数据库和应用程序用户)混在一起,这意味着两个不同的范围。

抱歉,如果这个问题很愚蠢,但是在学习时您会了解数据库用户和权限,并且当您看到真正的软件时(显然)是以不同的方式完成的。

谢谢!

4

1 回答 1

3

这种方法听起来确实更安全,但它是实现的噩梦,当您开始考虑扩展到一百万以上用户时更是如此:-O

最好的方法(从安全角度和可行性角度来看)是为数据库设置两个用户帐户。一种具有只读权限,另一种具有读/写权限。 仅当您需要添加用户或更改密码时才使用读/写凭据。 不要对这些凭据感到愚蠢。永远不要让他们以客户端代码或注释的形式进入客户端(我在 HTML 注释中看到了 DB 凭据 *sigh*)。

如果您的应用程序/用户群非常小并且总是如此,那么也许您可以为每个用户帐户分配一个沙盒数据库帐户。那会更安全。但是,我永远不会假设您的用户群总是很小。你永远不知道未来会带来什么,而不得不重新实现它会很糟糕。

于 2013-04-12T23:28:39.430 回答