3 回答
TA贡献1796条经验 获得超4个赞
将设置放在环境变量中不仅仅是为了安全。这也与灵活性有关。任何可能在环境之间发生变化的东西都是放在环境变量中的一个很好的候选者。
考虑您的数据库。主机名、用户名和数据库名在不同的环境中是否可能不同?我怀疑是这样。许多项目可能会在使用数据库localhost
或称为泊坞窗图像上db
的docker-compose.yml
发展,并在生产中使用的专用数据库服务器或托管数据库。
一种常见的模式是在单个环境变量中对整个数据库连接字符串进行编码DATABASE_URL
。格式¹类似于
<engine>://<user>:<password>@<host>:<port>/<database>
例如,您可能会使用类似
postgres://db_user:password@localhost/app_db
许多数据库库,包括 SQLAlchemy可以直接使用这个字符串连接到数据库。
¹这是对常规 URL 语法的专门化。
TA贡献1865条经验 获得超7个赞
从安全的角度来看,其中一种方法如下。假设我们将密码归类为敏感数据,并且我们只想对密码进行加密。其余信息可以在环境变量中或在配置文件中。
1) 有一个基于随机值的盐,它特定于在加密程序调用时生成的服务器。该值被保存到文件中。让我们称之为 salt.bin
2) 更改 salt.bin 文件的权限,使其只能被运行您的程序的操作系统用户读取。
3) 让安全人员/受托人员向加密程序输入密码,并将加密值保存到文件中。让我们称之为 db_config.bin。
4) 更改 db_config.bin 文件的权限,使其只能由将运行您的程序的操作系统用户读取。
现在在程序执行期间,让程序读取 salt.bin 文件和 db_config.bin 文件。使用 salt.bin 解密 db_config.bin。程序使用此密码以及主机、端口和其他详细信息的配置文件值来连接到数据库。
以上都可以用python完成。见这里。
添加回答
举报