我有一个基本的网络应用程序,为系统的每个“租户”使用单独但相同的DB。有一个主数据库包含一个将每个用户链接到他们的数据库副本的表。我应该在哪里以及如何存储租户数据库密码?
目前,我已将所有租户数据库连接详细信息以明文形式存储在主表中。我知道它不好,只是一个临时措施,所以我可以继续编写功能。
我只能想到两种方法来确保连接细节(见下文),这两种方法似乎有缺陷,所以我希望得到一些建议,如果你不介意的话,请吗?
使用某种形式的盐和散列方法来存储密码,与存储在应用程序的本地文件的密钥访问。
使用第三方服务(如Amazon KMS)加密整个主数据库。
我认为第二个选项是最安全的,但后来我在一个数据库插件,我不完全理解和第三方服务,这会降低性能的依赖。
这两个问题我的问题是,如果有人能够将SELECT查询插入我的代码并访问主表(所有查询变量都绑定为参数),它将始终解密密码我用什么方法。这是否总是这样,我们只是接受,还是有另一层安全来阻挡潜在的攻击者?
谢谢!
感谢您的咨询!正如你所说,密码哈希似乎是绝对必要的。我已经设法让自己摆脱了完全数据库加密的想法,因为仅仅降低性能可能会导致这种特殊用例的问题。 我已经在数据库服务器上使用了一个受限帐户,它只提供SELECT,UPDATE和INSERT权限,但我喜欢将这些权限分解到两个帐户之间,并可能在今天晚些时候实现。 谢谢! – Andy
此外,不幸的是,2FA在这种情况下是矫枉过正的,它实际上是一个以移动为中心的应用程序,所以用户的IP地址将频繁更改。尽管它确实是个不错的主意,但考虑到它只有少量的工作,我可能会在这方面为桌面用户提供一个额外的障碍来帮助某人解决问题。移动API非常有限,所以这可能是我需要的额外保护!再次感谢! – Andy