【问题标题】:Is there a way to encrypt the MySQL password stored in Django?有没有办法加密存储在 Django 中的 MySQL 密码?
【发布时间】:2013-08-20 09:29:10
【问题描述】:

我刚开始做一个 Django 项目,在项目的settings.py 文件中,数据库部分如下所示:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.
        'NAME': 'blogengine',                 # Or path to database file if using sqlite3.
        # The following settings are not used with sqlite3:
        'USER': 'blogadmin',
        'PASSWORD': 'blog@123',
        'HOST': 'localhost',                 # Empty for localhost through domain sockets or '127.0.0.1' for localhost through TCP.
        'PORT': '3306',                      # Set to empty string for default.
    }
}

有没有什么方法可以让我不必以明文形式输入密码,但可以以某种加密形式输入?

【问题讨论】:

标签: python mysql django


【解决方案1】:

试图保护该密码是没有意义的。

该文件中可用于访问数据库的

任何令牌都可以被其他任何人用来访问数据库。这就是共享秘密安全的工作原理。例如,将密码替换为随机生成的令牌,您仍然需要将该令牌传达给 settings.py

最好的办法是限制哪些计算机可以使用该用户名和密码连接到您的 MySQL 数据库,从而增加额外的安全层。哦,通过正确保护您的网络服务器和源代码控制系统,确保没有人可以访问 settings.py

【讨论】:

  • 好吧..我想我明白了。
【解决方案2】:

您可以做的另一件事是不要将您的密码/令牌存储在您的 settings.py 中,这是一种不好的安全做法,您应该在运行您的应用程序的用户中创建一个环境变量让我们说:

export MYSQL_PASSWORD=1234

并从您的 django 应用程序中读取它,如下所示

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.
        'NAME': 'blogengine',                 # Or path to database file if using sqlite3.
        # The following settings are not used with sqlite3:
        'USER': 'blogadmin',
        'PASSWORD': os.getenv('MYSQL_PASSWORD'),
        'HOST': 'localhost',                 # Empty for localhost through domain sockets or '127.0.0.1' for localhost through TCP.
        'PORT': '3306',                      # Set to empty string for default.
    }
}

您应该为您的所有“敏感数据”(如 EMAIL_HOST_PASSWORD、AWS 令牌和机密等)执行此操作,这样您就可以将配置与环境分开,而不必在测试服务器中更改这些参数或本地环境,您只需要确保您的环境变量相同,但根据您的环境指向正确的位置。

【讨论】:

  • ...呃。这似乎是个坏主意。无论该环境变量被导出到哪里,它仍然在某个文件中,因此它仍然在磁盘上的明文中,并且您不会仅仅将它放在设置文件中获得任何收益 - 除非现在您有一个额外的文件,您必须保持安全。环境变量并不比世界上不可读的文件更私密,应用程序用户总是可以只 cat /proc/(pid)/environ 并查看值。
  • 这个想法是限制访问,所以,只是用户可以看到变量,我通常遵循这个12factor.net,并且环境变量是我发现有多个开发人员在同一个应用程序上工作的方式以及他们的本地环境,并且在部署到我的测试服务器或生产服务器时不必更改很多参数。
  • 我们的 settings.py 在我们的 git 中提交,因此开发人员可以“开箱即用”运行它,同时只有服务器管理员知道实际服务器的密码,我认为这是要走的路,应该有更多的支持
猜你喜欢
  • 2019-02-10
  • 2021-01-10
  • 1970-01-01
  • 2020-07-16
  • 2013-12-07
  • 2014-06-23
  • 2014-11-29
  • 1970-01-01
  • 2016-12-13
相关资源
最近更新 更多