如何在 Windows 中安全地存储数据库凭据?

Posted

技术标签:

【中文标题】如何在 Windows 中安全地存储数据库凭据?【英文标题】:How to securely store database credentials in windows? 【发布时间】:2018-08-15 13:52:50 【问题描述】:

我使用 python 和 SQL-server 来管理数据库,但我不知道有关数据库管理的“良好做法”,对安全信息知之甚少。

在 Windows 中将数据库凭据保存为环境变量并将其用于带有os.environ 的脚本是否安全?像这样:

import os
DB_HOST = os.environ['DBHOST']
DB_USER = os.environ['DBUSER']
... 

如何正确存储凭据以自动使用数据库?

【问题讨论】:

【参考方案1】:

如果您询问是否应该为您的笔记本电脑永久设置环境变量 - 我会避免这样做,因为任何进程都可以很容易地列出 PC 上的所有环境变量以及相关的存储值。

相反 - 我建议查看 Keyring。这将使用 Windows Credential Locker(或其他操作系统特定的密钥环服务)。

【讨论】:

【参考方案2】:

通常安全凭据存储在与您当前环境相关的 .env 文件中,然后从您的代码中获取。例如 DB_HOST = env('DBHOST')。

基本上是您现在正在做的事情,但存储在文件中(尽可能安全,可能已加密),而不是直接作为环境变量,因为它们可以从整台机器访问。

【讨论】:

【参考方案3】:

通过在 sqlserver 中使用 Encryptedbypassphrase('key','Your_Password') 方法, 例如,

create table #temp(id int identity(1,1),Password varbinary(max)) insert into #temp(Password) values(encryptbypassphrase('12','Passw0rd')) select * from #temp

在该代码中,我们提供了原始密码,但它存储在数据库中 按加密值表。

我的输出截图:

【讨论】:

以上是关于如何在 Windows 中安全地存储数据库凭据?的主要内容,如果未能解决你的问题,请参考以下文章

MySQL / 存储 MySQL 凭据

在 GitLab 中安全地存储秘密和凭据

如何在 C++ 中安全地实现可重用的暂存存储器?

IBM 工作灯。是不是可以安全地存储用户凭据并在没有用户交互的情况下恢复它们?

Git http - 安全地记住凭据

如何在移动应用程序中安全地存储密码