加密PowerShell密码

7
我有一个 Powershell 脚本,用于连接 MySQL 数据库 - 当然,这个连接需要一个密码。我想以某种方式加密密码,而不是将密码存储为明文。
我已经研究了 SecureString 方法,并将密码输出到文件中,但我认为它们不起作用,因为只有原始用户才能解密加密的密码,而该脚本将分发到网络上的多台计算机。
请问是否有其他有用的方法?谢谢。
2个回答

4
如果脚本将分发到网络上的多台机器,则您脚本使用的所有凭据都将对这些用户可见,这是无法避免的。
如果存在任何私有的每个用户数据,则可以采取以下两种措施:
1. 为程序的每个用户在数据库中创建一个新的帐户,并具有限制性权限,只允许他们执行您想让他们执行的操作,什么都不能做; 2. 拥有一个代理服务器,该服务器将对其进行身份验证并以其名称连接到数据库(这是大多数网站的工作方式)。
如果所有数据都是公开且只读,则可以选择以下两种方法之一:
1. 为只读访问创建一个用于数据库的用户帐户,并在您程序的所有分发副本中使用其凭据; 2. 拥有一个不验证用户但连接到数据库的代理服务器,而不是使其暴露给公众。
对于安全历史记录为MySQL的每个数据库,通常推荐使用上述两个选项中的第2个选项,但对于类似CouchDB的数据库,建议使用上述两个选项中的第1个选项。
永远不要在您的程序中分发任何您不希望用户使用的凭据。

0

2
如果您将加密版本的 $connString 与应用程序一起分发,则还必须分发加密密钥("4#&7yaoff"),任何人都可以使用该密钥解密 $connString。您基本上已经交换了隐藏数据库密码的问题,以隐藏加密密码的问题。而且您不能仅使用另一个密码加密该密码,这样就会无限循环下去。 - Zed
你可以使用带有Library-StringCrypto的GnuPG。 - Chad Miller
1
你可以使用PGP,你可以使用AES,你可以使用任何对称或非对称的块密码或流密码。但最终你仍需要给你的应用程序密钥以解密数据,不是吗?如果你一开始就将密钥提供给用户,算法的强度是无关紧要的。同样,你可以使用Base64编码,因为它根本不提供任何安全性。 - Zed
好的。我实际上建议结合我们两个答案的解决方案,即为每个用户提供单独的凭据,并以只允许特定用户使用其用户密钥解密的方式存储它们。我认为你的解决方案适用于用户密码。我只是担心以那种方式存储主数据库密码,但可能我没有表达清楚。我只想明确你存储用户凭据的想法非常好。 - Zed
我不是一个安全专家,但还有另一个危险......即使用户无法轻易解密密码以了解它,他们仍然拥有使用密码进行身份验证的脚本。然后,他们可以使用该身份验证来执行该帐户具有权限执行的任何操作。请记住,加密是一种防止第三方进入的方法,而不是隐藏用户需要的信息的方法。 - JasonMArcher
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接