我正在寻找一种方法来将数据库密码存储在工作机器上,以便我自己的应用程序可以读取它(以便连接到数据库),但没有管理权限的用户无法读取它。管理员必须能够更改密码,最好是自动更改。
我想到的是PostgreSQL 的 .pgpass 文件在 Linux 环境中。在 Windows 环境中也可以这样做吗?
我认为密码文件只能由管理员访问。但是,用户可以执行的程序也可以访问此文件吗?此外,是否可以借助组策略通过网络分发此类文件?
我正在考虑的其他解决方案(可能需要付出更多努力):
- 加密密码文件。只有应用程序和管理员才拥有有效的密钥来解密和更改/读取文件。
- 从网络资源中检索密码,大概也是加密的。
答案1
回答您关于仅限管理员访问的问题 -
Windows 使用用户的权限执行服务(除非您专门以管理员或其他用户身份运行),因此如果用户无权访问文件,则程序也无权访问文件。
回答组策略问题:
是的,您可以使用组策略通过组策略首选项分发文件。(参见:https://www.adamfowlerit.com/2016/07/group-policy-preferences-replace-existing-file/)
答案2
如果有人感兴趣:我想出了以下解决方案。
密码以加密形式存储在 XML 文件(“密码容器”)中。可以使用管理员密码打开和编辑该容器。加密是对称的。该容器位于网络资源上,即网络目录中。
该应用程序获得了密码容器的位置,并且能够打开密码容器,因为管理员密码存放在代码中。
我知道这个解决方案不是 100% 安全的,因为密码不应该存储在代码中。但是,对于这些要求(数据库密码必须对用户隐藏,数据库密码必须可管理),这个解决方案已经足够好了。