Django中的MySQL密码

rah*_*huL 6 python mysql django

我刚开始使用Django项目,在项目的settings.py文件中,daabase部分如下所示:

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.
    }
}
Run Code Online (Sandbox Code Playgroud)

无论如何,我不需要输入明文密码,但可能以某种加密形式输入密码?

Mar*_*ers 8

尝试保护该密码没有意义.

该文件中可用于访问数据库的任何令牌都可供其他任何人使用来访问数据库.这就是共享秘密安全的工作原理.用随机生成的令牌替换密码,例如,您仍然必须将该令牌传递settings.py给它.

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


ife*_*inm 7

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

export MYSQL_PASSWORD=1234
Run Code Online (Sandbox Code Playgroud)

并从您的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.
    }
}
Run Code Online (Sandbox Code Playgroud)

您应该为所有"敏感数据"执行此操作,例如EMAIL_HOST_PASSWORD,AWS令牌和机密以及这类内容,这样您就可以将配置与环境分开,而无需在测试服务器或本地环境中更改这些参数,您只需确保您的环境变量相同,但根据您的环境指向正确的位置.

  • ......呃.这似乎是一个坏主意.无论在何处导出该环境变量,它仍然存在于某个文件中,因此它仍然位于磁盘上的明文中,并且您不会在设置文件中获得任何内容 - 除非您现在还有其他文件保持安全.环境变量不再是世界上不可读的文件,应用程序用户总是只需要cat/proc /(pid)/ environ并查看值. (3认同)
  • 这个想法是限制访问,因此,只要用户可以看到该变量,我通常会遵循此http://12factor.net/,而环境变量是我发现让多个开发人员在同一个应用程序及其本地应用上工作的方式环境,并且在部署到我的测试服务器或生产服务器时不必更改很多参数。 (2认同)
  • 我们的settings.py是在我们的git中提交的,所以开发人员可以"开箱即用"运行它,同时只有服务器管理员知道实际服务器的密码我认为这是要走的路,应该更多upvotes (2认同)