为了账号安全,请及时绑定邮箱和手机立即绑定

Postgres 数据库安全性:在环境变量中存储什么?

Postgres 数据库安全性:在环境变量中存储什么?

四季花海 2022-01-05 10:59:08
我使用 SQLAlchemy 连接了一个 Postgres 数据库。我目前将数据库的连接参数(数据库名称、主机、端口、用户名、密码)全部硬编码在 Python 文件中。我想改变这一点。我在这里读到应该将这些参数存储在环境变量中。在五个连接参数中,我应该在环境变量中存储什么?显然我会存储密码,但我是否应该另外存储用户名和主机?这里的约定是什么?
查看完整描述

3 回答

?
慕的地8271018

TA贡献1796条经验 获得超4个赞

将设置放在环境变量中不仅仅是为了安全。这也与灵活性有关。任何可能在环境之间发生变化的东西都是放在环境变量中的一个很好的候选者。

考虑您的数据库。主机名、用户名和数据库名在不同的环境中是否可能不同?我怀疑是这样。许多项目可能会在使用数据库localhost或称为泊坞窗图像上dbdocker-compose.yml发展,并在生产中使用的专用数据库服务器或托管数据库。

一种常见的模式是在单个环境变量中对整个数据库连接字符串进行编码DATABASE_URL。格式¹类似于

<engine>://<user>:<password>@<host>:<port>/<database>

例如,您可能会使用类似

postgres://db_user:password@localhost/app_db

许多数据库库,包括 SQLAlchemy可以直接使用这个字符串连接到数据库。


¹这是对常规 URL 语法的专门化。


查看完整回答
反对 回复 2022-01-05
?
湖上湖

TA贡献2003条经验 获得超2个赞

为什么要硬编码任何东西?只需将所有这些参数移动到环境变量中即可。


查看完整回答
反对 回复 2022-01-05
?
莫回无

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完成。见这里


查看完整回答
反对 回复 2022-01-05
  • 3 回答
  • 0 关注
  • 212 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信