+SET md5_password_warnings = off;
LOAD 'passwordcheck';
CREATE USER regress_passwordcheck_user1;
-- ok
+SET md5_password_warnings = off;
LOAD 'passwordcheck';
CREATE USER regress_passwordcheck_user1;
-- ok
+SET md5_password_warnings = off;
LOAD 'passwordcheck';
CREATE USER regress_passwordcheck_user1;
will store the md5 hash of <literal>xyzzyjoe</literal>.
</para>
+ <warning>
+ <para>
+ Support for MD5-encrypted passwords is deprecated and will be removed in a
+ future release of <productname>PostgreSQL</productname>. Refer to
+ <xref linkend="auth-password"/> for details about migrating to another
+ password type.
+ </para>
+ </warning>
+
<para>
If the password is encrypted with SCRAM-SHA-256, it has the format:
<synopsis>
user's password. See <xref linkend="auth-password"/>
for details.
</para>
+ <warning>
+ <para>
+ Support for MD5-encrypted passwords is deprecated and will be
+ removed in a future release of
+ <productname>PostgreSQL</productname>. Refer to
+ <xref linkend="auth-password"/> for details about migrating to
+ another password type.
+ </para>
+ </warning>
</listitem>
</varlistentry>
server is encrypted for SCRAM (see below), then SCRAM-based
authentication will automatically be chosen instead.
</para>
+
+ <warning>
+ <para>
+ Support for MD5-encrypted passwords is deprecated and will be removed
+ in a future release of <productname>PostgreSQL</productname>. Refer to
+ the text below for details about migrating to another password type.
+ </para>
+ </warning>
</listitem>
</varlistentry>
mechanism, and hence not work with passwords encrypted with
SCRAM-SHA-256. See <xref linkend="auth-password"/> for more details.
</para>
+ <warning>
+ <para>
+ Support for MD5-encrypted passwords is deprecated and will be removed
+ in a future release of <productname>PostgreSQL</productname>. Refer
+ to <xref linkend="auth-password"/> for details about migrating to
+ another password type.
+ </para>
+ </warning>
</listitem>
</varlistentry>
</listitem>
</varlistentry>
+ <varlistentry id="guc-md5-password-warnings" xreflabel="md5_password_warnings">
+ <term><varname>md5_password_warnings</varname> (<type>boolean</type>)
+ <indexterm>
+ <primary><varname>md5_password_warnings</varname> configuration parameter</primary>
+ </indexterm>
+ </term>
+ <listitem>
+ <para>
+ Controls whether a <literal>WARNING</literal> about MD5 password
+ deprecation is produced when a <command>CREATE ROLE</command> or
+ <command>ALTER ROLE</command> statement sets an MD5-encrypted password.
+ The default value is <literal>on</literal>.
+ </para>
+ </listitem>
+ </varlistentry>
+
</variablelist>
</sect2>
<sect2 id="runtime-config-logging-csvlog">
<para>
The server must request MD5 hashed password authentication.
</para>
+ <warning>
+ <para>
+ Support for MD5-encrypted passwords is deprecated and will be
+ removed in a future release of
+ <productname>PostgreSQL</productname>. Refer to
+ <xref linkend="auth-password"/> for details about migrating to
+ another password type.
+ </para>
+ </warning>
</listitem>
</varlistentry>
(Keep in mind the <function>md5()</function> function returns its
result as a hex string.)
</para>
+ <warning>
+ <para>
+ Support for MD5-encrypted passwords is deprecated and will be removed
+ in a future release of <productname>PostgreSQL</productname>. Refer
+ to <xref linkend="auth-password"/> for details about migrating to
+ another password type.
+ </para>
+ </warning>
</listitem>
</varlistentry>
different format). This allows reloading of encrypted passwords
during dump/restore.
</para>
+ <warning>
+ <para>
+ Support for MD5-encrypted passwords is deprecated and will be removed
+ in a future release of <productname>PostgreSQL</productname>. Refer
+ to <xref linkend="auth-password"/> for details about migrating to
+ another password type.
+ </para>
+ </warning>
</listitem>
</varlistentry>
is an Internet standard and is more secure than the PostgreSQL-specific
MD5 authentication protocol.
</para>
+
+ <warning>
+ <para>
+ Support for MD5-encrypted passwords is deprecated and will be removed in
+ a future release of <productname>PostgreSQL</productname>. Refer to
+ <xref linkend="auth-password"/> for details about migrating to another
+ password type.
+ </para>
+ </warning>
+
</listitem>
</varlistentry>
#include "utils/syscache.h"
#include "utils/timestamp.h"
+/* Enables deprecation warnings for MD5 passwords. */
+bool md5_password_warnings = true;
/*
* Fetch stored password for a user, for authentication.
MAX_ENCRYPTED_PASSWORD_LEN)));
}
+ if (md5_password_warnings &&
+ get_password_type(encrypted_password) == PASSWORD_TYPE_MD5)
+ ereport(WARNING,
+ (errcode(ERRCODE_WARNING_DEPRECATED_FEATURE),
+ errmsg("setting an MD5-encrypted password"),
+ errdetail("MD5 password support is deprecated and will be removed in a future release of PostgreSQL."),
+ errhint("Refer to the PostgreSQL documentation for details about migrating to another password type.")));
+
return encrypted_password;
}
NULL, NULL, NULL
},
+ {
+ {"md5_password_warnings", PGC_USERSET, CONN_AUTH_AUTH,
+ gettext_noop("Enables deprecation warnings for MD5 passwords."),
+ },
+ &md5_password_warnings,
+ true,
+ NULL, NULL, NULL
+ },
+
/* End-of-list marker */
{
{NULL, 0, 0, NULL, NULL}, NULL, false, NULL, NULL, NULL
#authentication_timeout = 1min # 1s-600s
#password_encryption = scram-sha-256 # scram-sha-256 or md5
#scram_iterations = 4096
+#md5_password_warnings = on
# GSSAPI using Kerberos
#krb_server_keyfile = 'FILE:${sysconfdir}/krb5.keytab'
*/
#define MAX_ENCRYPTED_PASSWORD_LEN (512)
+/* Enables deprecation warnings for MD5 passwords. */
+extern PGDLLIMPORT bool md5_password_warnings;
+
/*
* Types of password hashes or secrets.
*
SET password_encryption = 'md5';
CREATE ROLE regress_passwd1;
ALTER ROLE regress_passwd1 PASSWORD 'role_pwd1';
+WARNING: setting an MD5-encrypted password
+DETAIL: MD5 password support is deprecated and will be removed in a future release of PostgreSQL.
+HINT: Refer to the PostgreSQL documentation for details about migrating to another password type.
CREATE ROLE regress_passwd2;
ALTER ROLE regress_passwd2 PASSWORD 'role_pwd2';
+WARNING: setting an MD5-encrypted password
+DETAIL: MD5 password support is deprecated and will be removed in a future release of PostgreSQL.
+HINT: Refer to the PostgreSQL documentation for details about migrating to another password type.
SET password_encryption = 'scram-sha-256';
CREATE ROLE regress_passwd3 PASSWORD 'role_pwd3';
CREATE ROLE regress_passwd4 PASSWORD NULL;
SET password_encryption = 'md5';
-- encrypt with MD5
ALTER ROLE regress_passwd2 PASSWORD 'foo';
+WARNING: setting an MD5-encrypted password
+DETAIL: MD5 password support is deprecated and will be removed in a future release of PostgreSQL.
+HINT: Refer to the PostgreSQL documentation for details about migrating to another password type.
-- already encrypted, use as they are
ALTER ROLE regress_passwd1 PASSWORD 'md5cd3578025fe2c3d7ed1b9a9b26238b70';
+WARNING: setting an MD5-encrypted password
+DETAIL: MD5 password support is deprecated and will be removed in a future release of PostgreSQL.
+HINT: Refer to the PostgreSQL documentation for details about migrating to another password type.
ALTER ROLE regress_passwd3 PASSWORD 'SCRAM-SHA-256$4096:VLK4RMaQLCvNtQ==$6YtlR4t69SguDiwFvbVgVZtuz6gpJQQqUMZ7IQJK5yI=:ps75jrHeYU4lXCcXI4O8oIdJ3eO8o2jirjruw9phBTo=';
SET password_encryption = 'scram-sha-256';
-- create SCRAM secret
ALTER ROLE regress_passwd4 PASSWORD 'foo';
-- already encrypted with MD5, use as it is
CREATE ROLE regress_passwd5 PASSWORD 'md5e73a4b11df52a6068f8b39f90be36023';
+WARNING: setting an MD5-encrypted password
+DETAIL: MD5 password support is deprecated and will be removed in a future release of PostgreSQL.
+HINT: Refer to the PostgreSQL documentation for details about migrating to another password type.
-- This looks like a valid SCRAM-SHA-256 secret, but it is not
-- so it should be hashed with SCRAM-SHA-256.
CREATE ROLE regress_passwd6 PASSWORD 'SCRAM-SHA-256$1234';
ERROR: password encryption failed: unsupported
-- already encrypted, use as they are
ALTER ROLE regress_passwd1 PASSWORD 'md5cd3578025fe2c3d7ed1b9a9b26238b70';
+WARNING: setting an MD5-encrypted password
+DETAIL: MD5 password support is deprecated and will be removed in a future release of PostgreSQL.
+HINT: Refer to the PostgreSQL documentation for details about migrating to another password type.
ALTER ROLE regress_passwd3 PASSWORD 'SCRAM-SHA-256$4096:VLK4RMaQLCvNtQ==$6YtlR4t69SguDiwFvbVgVZtuz6gpJQQqUMZ7IQJK5yI=:ps75jrHeYU4lXCcXI4O8oIdJ3eO8o2jirjruw9phBTo=';
SET password_encryption = 'scram-sha-256';
-- create SCRAM secret
ALTER ROLE regress_passwd4 PASSWORD 'foo';
-- already encrypted with MD5, use as it is
CREATE ROLE regress_passwd5 PASSWORD 'md5e73a4b11df52a6068f8b39f90be36023';
+WARNING: setting an MD5-encrypted password
+DETAIL: MD5 password support is deprecated and will be removed in a future release of PostgreSQL.
+HINT: Refer to the PostgreSQL documentation for details about migrating to another password type.
-- This looks like a valid SCRAM-SHA-256 secret, but it is not
-- so it should be hashed with SCRAM-SHA-256.
CREATE ROLE regress_passwd6 PASSWORD 'SCRAM-SHA-256$1234';
CREATE ROLE regress_passwd_empty PASSWORD '';
NOTICE: empty string is not a valid password, clearing password
ALTER ROLE regress_passwd_empty PASSWORD 'md585939a5ce845f1a1b620742e3c659e0a';
+WARNING: setting an MD5-encrypted password
+DETAIL: MD5 password support is deprecated and will be removed in a future release of PostgreSQL.
+HINT: Refer to the PostgreSQL documentation for details about migrating to another password type.
ALTER ROLE regress_passwd_empty PASSWORD 'SCRAM-SHA-256$4096:hpFyHTUsSWcR7O9P$LgZFIt6Oqdo27ZFKbZ2nV+vtnYM995pDh9ca6WSi120=:qVV5NeluNfUPkwm7Vqat25RjSPLkGeoZBQs6wVv+um4=';
NOTICE: empty string is not a valid password, clearing password
SELECT rolpassword FROM pg_authid WHERE rolname='regress_passwd_empty';