在PostgreSQL中使用加密密码创建用户

时间:2013-07-02 15:02:23

标签: postgresql passwords sha plaintext

是否可以在不提供纯文本密码的情况下在PostgreSQL中创建用户(理想情况下,我希望能够创建仅提供使用sha-256加密的密码的用户)?

我想做的是创建一个类似的用户:

CREATE USER "martin" WITH PASSWORD '$6$kH3l2bj8iT$KKrTAKDF4OoE7w.oy(...)BPwcTBN/V42hqE.';

有没有办法做到这一点?

感谢您的帮助。

3 个答案:

答案 0 :(得分:59)

您可以提供已使用md5进行哈希处理的密码,如文档(CREATE ROLE)中所述:

  

加密未加密这些关键词控制密码是否为   加密存储在系统目录中。 (如果两者都没有指定,那么   默认行为由配置参数确定   password_encryption。)如果显示的密码字符串已经存在   MD5加密格式,然后按原样加密存储,无论如何   是否指定了ENCRYPTED或UNENCRYPTED(因为系统不能   解密指定的加密密码字符串)。这允许   在转储/恢复期间重新加载加密密码。

此处缺少的信息是MD5加密的字符串应该是用户名加密的密码,加上开头的md5

例如,使用密码u0创建foobar,知道md5('foobaru0')ac4bbe016b808c3c0b816981f240dcae

CREATE USER u0 PASSWORD 'md5ac4bbe016b808c3c0b816981f240dcae';

然后u0将能够通过键入foobar作为密码登录。

我认为目前没有办法使用SHA-256代替md5用于PostgreSQL密码。

答案 1 :(得分:8)

我不知道如何覆盖密码的默认md5加密,但是如果你有一个已经有md5加密密码的ROLE(又名“USER”),你可以提供它。使用pg_dumpall -g验证这一点(以查看集群中的全局变量) 例如

psql postgres
create role foo with encrypted password foobar;
\q

-- View the role from pg_dumpall -g
pg_dumpall -g | grep foo
CREATE ROLE foo;
ALTER ROLE foo WITH NOSUPERUSER INHERIT NOCREATEROLE NOCREATEDB NOLOGIN NOREPLICATION PASSWORD 'md5c98cbfeb6a347a47eb8e96cfb4c4b890';

Or get it from:
select * from pg_catalog.pg_shadow;

-- create the role again with the already-encrypted password
psql postgres
drop role foo;
CREATE ROLE foo;
ALTER ROLE foo WITH NOSUPERUSER INHERIT NOCREATEROLE NOCREATEDB NOLOGIN NOREPLICATION PASSWORD 'md5c98cbfeb6a347a47eb8e96cfb4c4b890';
\q

-- view the ROLE with the same password
pg_dumpall -g | grep foo
CREATE ROLE foo;
ALTER ROLE foo WITH NOSUPERUSER INHERIT NOCREATEROLE NOCREATEDB NOLOGIN NOREPLICATION PASSWORD 'md5c98cbfeb6a347a47eb8e96cfb4c4b890';

CREATE ROLE的文档

答案 2 :(得分:2)

更简单的方法是:

CREATE USER u0 PASSWORD 'foobar';

select * from pg_catalog.pg_shadow;

给passwd:md5ac4bbe016b808c3c0b816981f240dcae

相关问题