Estamos limpando/padronizando contas de usuário/aplicativo de banco de dados no sistema que tem uma mistura de contas que foram criadas usando comandos diferentes em momentos diferentes por indivíduos diferentes.
Temos uma situação em que, para algumas contas, o atributo de data de expiração da senha foi definido explicitamente como infinito e, para algumas, não conforme:
postgres=# \du+ List of roles
Role name | Attributes | Member of | Description
------------------+------------------------------------------------------------+-----------+-----------------------------------------------------------------------------------------
user_1 | | {} |
user_2 | | {} |
user_3 | Password valid until infinity | {} |
user_4 | Password valid until infinity | {} |
de modo a:
postgres=# SELECT * FROM pg_shadow;
usename | usesysid | usecreatedb | usesuper | userepl | usebypassrls | passwd | valuntil | useconfig
---------------+----------+-------------+----------+---------+--------------+-------------------------------------+----------+-----------
user_1 | 12345 | f | f | f | f | md5_foo | |
user_2 | 12346 | f | f | f | f | md5_foo | |
user_3 | 12347 | f | f | f | f | md5_bar | infinity |
user_4 | 12348 | f | f | f | f | md5_bar | infinity |
(4 rows)
e:
postgres=# SELECT * FROM pg_roles;
rolname | rolsuper | rolinherit | rolcreaterole | rolcreatedb | rolcanlogin | rolreplication | rolconnlimit | rolpassword | rolvaliduntil | rolbypassrls | rolconfig | oid
---------------+----------+------------+---------------+-------------+-------------+----------------+--------------+-------------+---------------+--------------+-----------+-------
user_1 | f | f | f | f | t | f | -1 | ******** | | f | | 12345
user_1 | f | f | f | f | t | f | -1 | ******** | | f | | 12346
user_1 | f | f | f | f | t | f | -1 | ******** | infinity | f | | 12347
user_1 | f | f | f | f | t | f | -1 | ******** | infinity | f | | 12348
(4 rows)
Ex: user_1
e user_2
foram criados com:
CREATE USER user_1/2 WITH ENCRYPTED PASSWORD 'foo';
considerando que user_3
e user_4
foram criados com:
CREATE USER user_3/4 WITH ENCRYPTED PASSWORD 'bar' VALID UNTIL 'infinity';
Queremos redefinir o VALID UNTIL
atributo para que:
postgres=# \du+ List of roles
Role name | Attributes | Member of | Description
------------------+------------------------------------------------------------+-----------+-----------------------------------------------------------------------------------------
user_1 | | {} |
user_2 | | {} |
user_3 | | {} |
user_4 | | {} |
Tentamos, sem sucesso:
ALTER ROLE user_1/2 WITH VALID UNTIL NULL;
ALTER ROLE user_1/2 WITH VALID UNTIL '';
ALTER ROLE user_1/2 WITH VALID UNTIL DEFAULT;
Portanto, a pergunta é: é possível redefinir o atributo de função de data de expiração de senha para NULL
/ DEFAULT
, de preferência sem precisar recriar a função?
Conseguimos redefinir a data de expiração da senha para
NULL
:Isso limpou a
Attributes
coluna parauser_1/2
.