Django Postgres连接强制SSL

yc0p9oo0  于 2023-07-01  发布在  Go
关注(0)|答案(4)|浏览(121)

我想强制Django使用SSL连接到我的postgres数据库。
This question表示我需要将sslmode='require'传递给psycopg2连接调用。如何将其添加到Django的数据库参数中?

k4ymrczo

k4ymrczo1#

'OPTIONS': {'sslmode': 'require'},添加到数据库配置中。例如:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': "db_name",
        'USER': "db_username",
        'PASSWORD': "db_password",
        'HOST': "db_host",
        'OPTIONS': {'sslmode': 'require'},
    },
}

作为jklingen92 points out,如果您使用的是数据库URL,例如通过django-environ,请将?sslmode=require添加到数据库URL的末尾。例如:

postgres://<DB_USERNAME>:<DB_PASSWORD>@<DB_HOST>:<PORT>/<DB_NAME>?sslmode=require
yeotifhr

yeotifhr2#

如果要配置数据库URL,则可以将选项作为查询参数传递:

DATABASE_URL=postgres://USER:PASSWORD@HOST:PORT/NAME?sslmode=require

这适用于Django ConfigurationsDjango Environ。Django配置是基于dj_database_url构建的,所以你也可以传递ssl_require=True,就像@frmdstryr说的:

DATABASES = values.DatabaseURLValue(environ_required=True, ssl_require=True)
fiei3ece

fiei3ece3#

如果你使用的是dj_database_url,你可以传递ssl_require=True,它会为你设置选项。

import dj_database_url
DATABASES['default'] = dj_database_url.config(ssl_require=True)
brgchamk

brgchamk4#

编辑settings.py文件,如下所示:

DATABASES = {
    # 'default': {
    #     'ENGINE': 'django.db.backends.sqlite3',
    #     'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    # },
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'HOST': 'server-ip',
        'PORT': '5432',
        'NAME': 'database-name',
        'USER': 'username',
        'PASSWORD': 'password',
        'OPTIONS': {
            'sslmode': 'require',
            'sslcert': '/path/to/file',
            'sslkey': '/path/to/file',
            'sslrootcert': '/path/to/file',
        },
    },
}

参考visit here

相关问题