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

问题描述 投票:1回答:3

我使用SQLAlchemy连接了一个Postgres数据库。

我目前在Python文件中都有硬编码的数据库连接参数(数据库名称,主机,端口,用户名,密码)。我想改变这一点。

我读here,应该将这些参数存储在环境变量中。在五个连接参数中,我应该在环境变量中存储什么?

显然我会存储密码,但是我应该另外存储用户名和主机吗?这里的约定是什么?

python database postgresql database-design database-connection
3个回答
2
投票

将设置放在环境变量中不仅仅是安全性。这也是关于灵活性的。 Anything that's likely to change between environments是适合环境变量的好人选。

考虑你的数据库。主机,用户名和数据库名称可能在不同环境中有所不同吗?我怀疑是这样的。许多项目可能在localhost上使用数据库,或者在开发中使用db中名为docker-compose.yml的Docker镜像,并在生产中使用专用数据库服务器或托管数据库。

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

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

例如,您可能会使用类似的东西

postgres://db_user:password@localhost/app_db

许多数据库库including SQLAlchemy可以直接使用此单个字符串连接到数据库。


¹这是regular URL syntax的专业。


2
投票

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


1
投票

从安全角度来看,其中一种方法如下所示。假设我们将密码分类为敏感数据,并且我们只想加密密码。休息信息可以是环境变量,也可以是配置文件。

1)具有基于随机值的salt,该盐特定于加密程序调用时生成的服务器。该值保存到文件中。让我们称之为salt.bin

2)更改salt.bin文件的权限,使其只能运行您的程序的操作系统用户。

3)将安全个人/委托人员输入密码加密程序并将加密值保存到文件中。让我们称它为db_config.bin。

4)更改db_config.bin文件的权限,使其只能由运行程序的操作系统用户读取。

现在在程序执行期间,让程序读取salt.bin文件和db_config.bin文件。使用salt.bin解密db_config.bin。程序使用此密码以及主机,端口和其他详细信息的配置文件值来连接到数据库。

以上所有内容都可以通过python.See here完成。

© www.soinside.com 2019 - 2024. All rights reserved.