Commit b4675a8a authored by Peter Eisentraut's avatar Peter Eisentraut

Fix use of term "verifier"

Within the context of SCRAM, "verifier" has a specific meaning in the
protocol, per RFCs.  The existing code used "verifier" differently, to
mean whatever is or would be stored in pg_auth.rolpassword.

Fix this by using the term "secret" for this, following RFC 5803.
Reviewed-by: default avatarMichael Paquier <michael@paquier.xyz>
Discussion: https://www.postgresql.org/message-id/flat/be397b06-6e4b-ba71-c7fb-54cae84a7e18%402ndquadrant.com
parent 5f3d271d
This diff is collapsed.
...@@ -818,7 +818,7 @@ CheckPWChallengeAuth(Port *port, char **logdetail) ...@@ -818,7 +818,7 @@ CheckPWChallengeAuth(Port *port, char **logdetail)
* If 'md5' authentication is allowed, decide whether to perform 'md5' or * If 'md5' authentication is allowed, decide whether to perform 'md5' or
* 'scram-sha-256' authentication based on the type of password the user * 'scram-sha-256' authentication based on the type of password the user
* has. If it's an MD5 hash, we must do MD5 authentication, and if it's a * has. If it's an MD5 hash, we must do MD5 authentication, and if it's a
* SCRAM verifier, we must do SCRAM authentication. * SCRAM secret, we must do SCRAM authentication.
* *
* If MD5 authentication is not allowed, always use SCRAM. If the user * If MD5 authentication is not allowed, always use SCRAM. If the user
* had an MD5 password, CheckSCRAMAuth() will fail. * had an MD5 password, CheckSCRAMAuth() will fail.
......
...@@ -83,7 +83,7 @@ get_role_password(const char *role, char **logdetail) ...@@ -83,7 +83,7 @@ get_role_password(const char *role, char **logdetail)
} }
/* /*
* What kind of a password verifier is 'shadow_pass'? * What kind of a password type is 'shadow_pass'?
*/ */
PasswordType PasswordType
get_password_type(const char *shadow_pass) get_password_type(const char *shadow_pass)
...@@ -97,14 +97,14 @@ get_password_type(const char *shadow_pass) ...@@ -97,14 +97,14 @@ get_password_type(const char *shadow_pass)
strlen(shadow_pass) == MD5_PASSWD_LEN && strlen(shadow_pass) == MD5_PASSWD_LEN &&
strspn(shadow_pass + 3, MD5_PASSWD_CHARSET) == MD5_PASSWD_LEN - 3) strspn(shadow_pass + 3, MD5_PASSWD_CHARSET) == MD5_PASSWD_LEN - 3)
return PASSWORD_TYPE_MD5; return PASSWORD_TYPE_MD5;
if (parse_scram_verifier(shadow_pass, &iterations, &encoded_salt, if (parse_scram_secret(shadow_pass, &iterations, &encoded_salt,
stored_key, server_key)) stored_key, server_key))
return PASSWORD_TYPE_SCRAM_SHA_256; return PASSWORD_TYPE_SCRAM_SHA_256;
return PASSWORD_TYPE_PLAINTEXT; return PASSWORD_TYPE_PLAINTEXT;
} }
/* /*
* Given a user-supplied password, convert it into a verifier of * Given a user-supplied password, convert it into a secret of
* 'target_type' kind. * 'target_type' kind.
* *
* If the password is already in encrypted form, we cannot reverse the * If the password is already in encrypted form, we cannot reverse the
...@@ -137,7 +137,7 @@ encrypt_password(PasswordType target_type, const char *role, ...@@ -137,7 +137,7 @@ encrypt_password(PasswordType target_type, const char *role,
return encrypted_password; return encrypted_password;
case PASSWORD_TYPE_SCRAM_SHA_256: case PASSWORD_TYPE_SCRAM_SHA_256:
return pg_be_scram_build_verifier(password); return pg_be_scram_build_secret(password);
case PASSWORD_TYPE_PLAINTEXT: case PASSWORD_TYPE_PLAINTEXT:
elog(ERROR, "cannot encrypt password with 'plaintext'"); elog(ERROR, "cannot encrypt password with 'plaintext'");
......
...@@ -181,7 +181,7 @@ scram_ServerKey(const uint8 *salted_password, uint8 *result) ...@@ -181,7 +181,7 @@ scram_ServerKey(const uint8 *salted_password, uint8 *result)
/* /*
* Construct a verifier string for SCRAM, stored in pg_authid.rolpassword. * Construct a SCRAM secret, for storing in pg_authid.rolpassword.
* *
* The password should already have been processed with SASLprep, if necessary! * The password should already have been processed with SASLprep, if necessary!
* *
...@@ -189,7 +189,7 @@ scram_ServerKey(const uint8 *salted_password, uint8 *result) ...@@ -189,7 +189,7 @@ scram_ServerKey(const uint8 *salted_password, uint8 *result)
* palloc'd or malloc'd, so caller is responsible for freeing it. * palloc'd or malloc'd, so caller is responsible for freeing it.
*/ */
char * char *
scram_build_verifier(const char *salt, int saltlen, int iterations, scram_build_secret(const char *salt, int saltlen, int iterations,
const char *password) const char *password)
{ {
uint8 salted_password[SCRAM_KEY_LEN]; uint8 salted_password[SCRAM_KEY_LEN];
......
...@@ -33,14 +33,14 @@ ...@@ -33,14 +33,14 @@
#define SCRAM_RAW_NONCE_LEN 18 #define SCRAM_RAW_NONCE_LEN 18
/* /*
* Length of salt when generating new verifiers, in bytes. (It will be stored * Length of salt when generating new secrets, in bytes. (It will be stored
* and sent over the wire encoded in Base64.) 16 bytes is what the example in * and sent over the wire encoded in Base64.) 16 bytes is what the example in
* RFC 7677 uses. * RFC 7677 uses.
*/ */
#define SCRAM_DEFAULT_SALT_LEN 16 #define SCRAM_DEFAULT_SALT_LEN 16
/* /*
* Default number of iterations when generating verifier. Should be at least * Default number of iterations when generating secret. Should be at least
* 4096 per RFC 7677. * 4096 per RFC 7677.
*/ */
#define SCRAM_DEFAULT_ITERATIONS 4096 #define SCRAM_DEFAULT_ITERATIONS 4096
...@@ -64,7 +64,7 @@ extern void scram_H(const uint8 *str, int len, uint8 *result); ...@@ -64,7 +64,7 @@ extern void scram_H(const uint8 *str, int len, uint8 *result);
extern void scram_ClientKey(const uint8 *salted_password, uint8 *result); extern void scram_ClientKey(const uint8 *salted_password, uint8 *result);
extern void scram_ServerKey(const uint8 *salted_password, uint8 *result); extern void scram_ServerKey(const uint8 *salted_password, uint8 *result);
extern char *scram_build_verifier(const char *salt, int saltlen, int iterations, extern char *scram_build_secret(const char *salt, int saltlen, int iterations,
const char *password); const char *password);
#endif /* SCRAM_COMMON_H */ #endif /* SCRAM_COMMON_H */
...@@ -16,7 +16,7 @@ ...@@ -16,7 +16,7 @@
#include "datatype/timestamp.h" #include "datatype/timestamp.h"
/* /*
* Types of password hashes or verifiers. * Types of password hashes or secrets.
* *
* Plaintext passwords can be passed in by the user, in a CREATE/ALTER USER * Plaintext passwords can be passed in by the user, in a CREATE/ALTER USER
* command. They will be encrypted to MD5 or SCRAM-SHA-256 format, before * command. They will be encrypted to MD5 or SCRAM-SHA-256 format, before
......
...@@ -27,11 +27,11 @@ extern void *pg_be_scram_init(Port *port, const char *selected_mech, const char ...@@ -27,11 +27,11 @@ extern void *pg_be_scram_init(Port *port, const char *selected_mech, const char
extern int pg_be_scram_exchange(void *opaq, const char *input, int inputlen, extern int pg_be_scram_exchange(void *opaq, const char *input, int inputlen,
char **output, int *outputlen, char **logdetail); char **output, int *outputlen, char **logdetail);
/* Routines to handle and check SCRAM-SHA-256 verifier */ /* Routines to handle and check SCRAM-SHA-256 secret */
extern char *pg_be_scram_build_verifier(const char *password); extern char *pg_be_scram_build_secret(const char *password);
extern bool parse_scram_verifier(const char *verifier, int *iterations, char **salt, extern bool parse_scram_secret(const char *secret, int *iterations, char **salt,
uint8 *stored_key, uint8 *server_key); uint8 *stored_key, uint8 *server_key);
extern bool scram_verify_plain_password(const char *username, extern bool scram_verify_plain_password(const char *username,
const char *password, const char *verifier); const char *password, const char *secret);
#endif /* PG_SCRAM_H */ #endif /* PG_SCRAM_H */
...@@ -822,10 +822,10 @@ verify_server_signature(fe_scram_state *state) ...@@ -822,10 +822,10 @@ verify_server_signature(fe_scram_state *state)
} }
/* /*
* Build a new SCRAM verifier. * Build a new SCRAM secret.
*/ */
char * char *
pg_fe_scram_build_verifier(const char *password) pg_fe_scram_build_secret(const char *password)
{ {
char *prep_password; char *prep_password;
pg_saslprep_rc rc; pg_saslprep_rc rc;
...@@ -851,7 +851,7 @@ pg_fe_scram_build_verifier(const char *password) ...@@ -851,7 +851,7 @@ pg_fe_scram_build_verifier(const char *password)
return NULL; return NULL;
} }
result = scram_build_verifier(saltbuf, SCRAM_DEFAULT_SALT_LEN, result = scram_build_secret(saltbuf, SCRAM_DEFAULT_SALT_LEN,
SCRAM_DEFAULT_ITERATIONS, password); SCRAM_DEFAULT_ITERATIONS, password);
if (prep_password) if (prep_password)
......
...@@ -1251,7 +1251,7 @@ PQencryptPasswordConn(PGconn *conn, const char *passwd, const char *user, ...@@ -1251,7 +1251,7 @@ PQencryptPasswordConn(PGconn *conn, const char *passwd, const char *user,
*/ */
if (strcmp(algorithm, "scram-sha-256") == 0) if (strcmp(algorithm, "scram-sha-256") == 0)
{ {
crypt_pwd = pg_fe_scram_build_verifier(passwd); crypt_pwd = pg_fe_scram_build_secret(passwd);
} }
else if (strcmp(algorithm, "md5") == 0) else if (strcmp(algorithm, "md5") == 0)
{ {
......
...@@ -31,6 +31,6 @@ extern void pg_fe_scram_free(void *opaq); ...@@ -31,6 +31,6 @@ extern void pg_fe_scram_free(void *opaq);
extern void pg_fe_scram_exchange(void *opaq, char *input, int inputlen, extern void pg_fe_scram_exchange(void *opaq, char *input, int inputlen,
char **output, int *outputlen, char **output, int *outputlen,
bool *done, bool *success); bool *done, bool *success);
extern char *pg_fe_scram_build_verifier(const char *password); extern char *pg_fe_scram_build_secret(const char *password);
#endif /* FE_AUTH_H */ #endif /* FE_AUTH_H */
...@@ -82,7 +82,7 @@ test_role($node, 'scram_role', 'scram-sha-256', 0); ...@@ -82,7 +82,7 @@ test_role($node, 'scram_role', 'scram-sha-256', 0);
test_role($node, 'md5_role', 'scram-sha-256', 2); test_role($node, 'md5_role', 'scram-sha-256', 2);
# For "md5" method, all users should be able to connect (SCRAM # For "md5" method, all users should be able to connect (SCRAM
# authentication will be performed for the user with a scram verifier.) # authentication will be performed for the user with a SCRAM secret.)
reset_pg_hba($node, 'md5'); reset_pg_hba($node, 'md5');
test_role($node, 'scram_role', 'md5', 0); test_role($node, 'scram_role', 'md5', 0);
test_role($node, 'md5_role', 'md5', 0); test_role($node, 'md5_role', 'md5', 0);
......
-- --
-- Tests for password verifiers -- Tests for password types
-- --
-- Tests for GUC password_encryption -- Tests for GUC password_encryption
SET password_encryption = 'novalue'; -- error SET password_encryption = 'novalue'; -- error
...@@ -18,7 +18,7 @@ CREATE ROLE regress_passwd3 PASSWORD 'role_pwd3'; ...@@ -18,7 +18,7 @@ CREATE ROLE regress_passwd3 PASSWORD 'role_pwd3';
CREATE ROLE regress_passwd4 PASSWORD NULL; CREATE ROLE regress_passwd4 PASSWORD NULL;
-- check list of created entries -- check list of created entries
-- --
-- The scram verifier will look something like: -- The scram secret will look something like:
-- SCRAM-SHA-256$4096:E4HxLGtnRzsYwg==$6YtlR4t69SguDiwFvbVgVZtuz6gpJQQqUMZ7IQJK5yI=:ps75jrHeYU4lXCcXI4O8oIdJ3eO8o2jirjruw9phBTo= -- SCRAM-SHA-256$4096:E4HxLGtnRzsYwg==$6YtlR4t69SguDiwFvbVgVZtuz6gpJQQqUMZ7IQJK5yI=:ps75jrHeYU4lXCcXI4O8oIdJ3eO8o2jirjruw9phBTo=
-- --
-- Since the salt is random, the exact value stored will be different on every test -- Since the salt is random, the exact value stored will be different on every test
...@@ -58,14 +58,14 @@ ALTER ROLE regress_passwd2 PASSWORD 'foo'; ...@@ -58,14 +58,14 @@ ALTER ROLE regress_passwd2 PASSWORD 'foo';
ALTER ROLE regress_passwd1 PASSWORD 'md5cd3578025fe2c3d7ed1b9a9b26238b70'; ALTER ROLE regress_passwd1 PASSWORD 'md5cd3578025fe2c3d7ed1b9a9b26238b70';
ALTER ROLE regress_passwd3 PASSWORD 'SCRAM-SHA-256$4096:VLK4RMaQLCvNtQ==$6YtlR4t69SguDiwFvbVgVZtuz6gpJQQqUMZ7IQJK5yI=:ps75jrHeYU4lXCcXI4O8oIdJ3eO8o2jirjruw9phBTo='; ALTER ROLE regress_passwd3 PASSWORD 'SCRAM-SHA-256$4096:VLK4RMaQLCvNtQ==$6YtlR4t69SguDiwFvbVgVZtuz6gpJQQqUMZ7IQJK5yI=:ps75jrHeYU4lXCcXI4O8oIdJ3eO8o2jirjruw9phBTo=';
SET password_encryption = 'scram-sha-256'; SET password_encryption = 'scram-sha-256';
-- create SCRAM verifier -- create SCRAM secret
ALTER ROLE regress_passwd4 PASSWORD 'foo'; ALTER ROLE regress_passwd4 PASSWORD 'foo';
-- already encrypted with MD5, use as it is -- already encrypted with MD5, use as it is
CREATE ROLE regress_passwd5 PASSWORD 'md5e73a4b11df52a6068f8b39f90be36023'; CREATE ROLE regress_passwd5 PASSWORD 'md5e73a4b11df52a6068f8b39f90be36023';
-- This looks like a valid SCRAM-SHA-256 verifier, but it is not -- This looks like a valid SCRAM-SHA-256 secret, but it is not
-- so it should be hashed with SCRAM-SHA-256. -- so it should be hashed with SCRAM-SHA-256.
CREATE ROLE regress_passwd6 PASSWORD 'SCRAM-SHA-256$1234'; CREATE ROLE regress_passwd6 PASSWORD 'SCRAM-SHA-256$1234';
-- These may look like valid MD5 verifiers, but they are not, so they -- These may look like valid MD5 secrets, but they are not, so they
-- should be hashed with SCRAM-SHA-256. -- should be hashed with SCRAM-SHA-256.
-- trailing garbage at the end -- trailing garbage at the end
CREATE ROLE regress_passwd7 PASSWORD 'md5012345678901234567890123456789zz'; CREATE ROLE regress_passwd7 PASSWORD 'md5012345678901234567890123456789zz';
...@@ -107,7 +107,7 @@ SELECT rolpassword FROM pg_authid WHERE rolname='regress_passwd_empty'; ...@@ -107,7 +107,7 @@ SELECT rolpassword FROM pg_authid WHERE rolname='regress_passwd_empty';
CREATE ROLE regress_passwd_sha_len0 PASSWORD 'SCRAM-SHA-256$4096:A6xHKoH/494E941doaPOYg==$Ky+A30sewHIH3VHQLRN9vYsuzlgNyGNKCh37dy96Rqw=:COPdlNiIkrsacU5QoxydEuOH6e/KfiipeETb/bPw8ZI='; CREATE ROLE regress_passwd_sha_len0 PASSWORD 'SCRAM-SHA-256$4096:A6xHKoH/494E941doaPOYg==$Ky+A30sewHIH3VHQLRN9vYsuzlgNyGNKCh37dy96Rqw=:COPdlNiIkrsacU5QoxydEuOH6e/KfiipeETb/bPw8ZI=';
CREATE ROLE regress_passwd_sha_len1 PASSWORD 'SCRAM-SHA-256$4096:A6xHKoH/494E941doaPOYg==$Ky+A30sewHIH3VHQLRN9vYsuzlgNyGNKCh37dy96RqwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=:COPdlNiIkrsacU5QoxydEuOH6e/KfiipeETb/bPw8ZI='; CREATE ROLE regress_passwd_sha_len1 PASSWORD 'SCRAM-SHA-256$4096:A6xHKoH/494E941doaPOYg==$Ky+A30sewHIH3VHQLRN9vYsuzlgNyGNKCh37dy96RqwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=:COPdlNiIkrsacU5QoxydEuOH6e/KfiipeETb/bPw8ZI=';
CREATE ROLE regress_passwd_sha_len2 PASSWORD 'SCRAM-SHA-256$4096:A6xHKoH/494E941doaPOYg==$Ky+A30sewHIH3VHQLRN9vYsuzlgNyGNKCh37dy96Rqw=:COPdlNiIkrsacU5QoxydEuOH6e/KfiipeETb/bPw8ZIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA='; CREATE ROLE regress_passwd_sha_len2 PASSWORD 'SCRAM-SHA-256$4096:A6xHKoH/494E941doaPOYg==$Ky+A30sewHIH3VHQLRN9vYsuzlgNyGNKCh37dy96Rqw=:COPdlNiIkrsacU5QoxydEuOH6e/KfiipeETb/bPw8ZIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=';
-- Check that the invalid verifiers were re-hashed. A re-hashed verifier -- Check that the invalid secrets were re-hashed. A re-hashed secret
-- should not contain the original salt. -- should not contain the original salt.
SELECT rolname, rolpassword not like '%A6xHKoH/494E941doaPOYg==%' as is_rolpassword_rehashed SELECT rolname, rolpassword not like '%A6xHKoH/494E941doaPOYg==%' as is_rolpassword_rehashed
FROM pg_authid FROM pg_authid
......
-- --
-- Tests for password verifiers -- Tests for password types
-- --
-- Tests for GUC password_encryption -- Tests for GUC password_encryption
...@@ -19,7 +19,7 @@ CREATE ROLE regress_passwd4 PASSWORD NULL; ...@@ -19,7 +19,7 @@ CREATE ROLE regress_passwd4 PASSWORD NULL;
-- check list of created entries -- check list of created entries
-- --
-- The scram verifier will look something like: -- The scram secret will look something like:
-- SCRAM-SHA-256$4096:E4HxLGtnRzsYwg==$6YtlR4t69SguDiwFvbVgVZtuz6gpJQQqUMZ7IQJK5yI=:ps75jrHeYU4lXCcXI4O8oIdJ3eO8o2jirjruw9phBTo= -- SCRAM-SHA-256$4096:E4HxLGtnRzsYwg==$6YtlR4t69SguDiwFvbVgVZtuz6gpJQQqUMZ7IQJK5yI=:ps75jrHeYU4lXCcXI4O8oIdJ3eO8o2jirjruw9phBTo=
-- --
-- Since the salt is random, the exact value stored will be different on every test -- Since the salt is random, the exact value stored will be different on every test
...@@ -49,15 +49,15 @@ ALTER ROLE regress_passwd1 PASSWORD 'md5cd3578025fe2c3d7ed1b9a9b26238b70'; ...@@ -49,15 +49,15 @@ ALTER ROLE regress_passwd1 PASSWORD 'md5cd3578025fe2c3d7ed1b9a9b26238b70';
ALTER ROLE regress_passwd3 PASSWORD 'SCRAM-SHA-256$4096:VLK4RMaQLCvNtQ==$6YtlR4t69SguDiwFvbVgVZtuz6gpJQQqUMZ7IQJK5yI=:ps75jrHeYU4lXCcXI4O8oIdJ3eO8o2jirjruw9phBTo='; ALTER ROLE regress_passwd3 PASSWORD 'SCRAM-SHA-256$4096:VLK4RMaQLCvNtQ==$6YtlR4t69SguDiwFvbVgVZtuz6gpJQQqUMZ7IQJK5yI=:ps75jrHeYU4lXCcXI4O8oIdJ3eO8o2jirjruw9phBTo=';
SET password_encryption = 'scram-sha-256'; SET password_encryption = 'scram-sha-256';
-- create SCRAM verifier -- create SCRAM secret
ALTER ROLE regress_passwd4 PASSWORD 'foo'; ALTER ROLE regress_passwd4 PASSWORD 'foo';
-- already encrypted with MD5, use as it is -- already encrypted with MD5, use as it is
CREATE ROLE regress_passwd5 PASSWORD 'md5e73a4b11df52a6068f8b39f90be36023'; CREATE ROLE regress_passwd5 PASSWORD 'md5e73a4b11df52a6068f8b39f90be36023';
-- This looks like a valid SCRAM-SHA-256 verifier, but it is not -- This looks like a valid SCRAM-SHA-256 secret, but it is not
-- so it should be hashed with SCRAM-SHA-256. -- so it should be hashed with SCRAM-SHA-256.
CREATE ROLE regress_passwd6 PASSWORD 'SCRAM-SHA-256$1234'; CREATE ROLE regress_passwd6 PASSWORD 'SCRAM-SHA-256$1234';
-- These may look like valid MD5 verifiers, but they are not, so they -- These may look like valid MD5 secrets, but they are not, so they
-- should be hashed with SCRAM-SHA-256. -- should be hashed with SCRAM-SHA-256.
-- trailing garbage at the end -- trailing garbage at the end
CREATE ROLE regress_passwd7 PASSWORD 'md5012345678901234567890123456789zz'; CREATE ROLE regress_passwd7 PASSWORD 'md5012345678901234567890123456789zz';
...@@ -83,7 +83,7 @@ CREATE ROLE regress_passwd_sha_len0 PASSWORD 'SCRAM-SHA-256$4096:A6xHKoH/494E941 ...@@ -83,7 +83,7 @@ CREATE ROLE regress_passwd_sha_len0 PASSWORD 'SCRAM-SHA-256$4096:A6xHKoH/494E941
CREATE ROLE regress_passwd_sha_len1 PASSWORD 'SCRAM-SHA-256$4096:A6xHKoH/494E941doaPOYg==$Ky+A30sewHIH3VHQLRN9vYsuzlgNyGNKCh37dy96RqwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=:COPdlNiIkrsacU5QoxydEuOH6e/KfiipeETb/bPw8ZI='; CREATE ROLE regress_passwd_sha_len1 PASSWORD 'SCRAM-SHA-256$4096:A6xHKoH/494E941doaPOYg==$Ky+A30sewHIH3VHQLRN9vYsuzlgNyGNKCh37dy96RqwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=:COPdlNiIkrsacU5QoxydEuOH6e/KfiipeETb/bPw8ZI=';
CREATE ROLE regress_passwd_sha_len2 PASSWORD 'SCRAM-SHA-256$4096:A6xHKoH/494E941doaPOYg==$Ky+A30sewHIH3VHQLRN9vYsuzlgNyGNKCh37dy96Rqw=:COPdlNiIkrsacU5QoxydEuOH6e/KfiipeETb/bPw8ZIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA='; CREATE ROLE regress_passwd_sha_len2 PASSWORD 'SCRAM-SHA-256$4096:A6xHKoH/494E941doaPOYg==$Ky+A30sewHIH3VHQLRN9vYsuzlgNyGNKCh37dy96Rqw=:COPdlNiIkrsacU5QoxydEuOH6e/KfiipeETb/bPw8ZIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=';
-- Check that the invalid verifiers were re-hashed. A re-hashed verifier -- Check that the invalid secrets were re-hashed. A re-hashed secret
-- should not contain the original salt. -- should not contain the original salt.
SELECT rolname, rolpassword not like '%A6xHKoH/494E941doaPOYg==%' as is_rolpassword_rehashed SELECT rolname, rolpassword not like '%A6xHKoH/494E941doaPOYg==%' as is_rolpassword_rehashed
FROM pg_authid FROM pg_authid
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment