默认postgres用户和密码

时间:2013-11-19 21:41:34

标签: postgresql

我刚接触postgresql数据库管理。 我一直在玩一个我没有创建的数据库。 试图了解已创建的不同角色。

我可以登录进行以下操作是否意味着postgres用户没有设置密码?

psql -U postgres 

我做了

`select * from pg_roles`

我可以看到设置了密码。 我找到了这篇文章:http://www.postgresql.org/message-id/4D958A35.8030501@hogranch.com 看来确认postgres用户默认存在... 你必须明确设置密码。这是关于密码的第二部分,我不确定。默认情况下是空白还是设置为某种东西?

我知道如果将pg_hba.conf设置为信任127.0.0.1中的所有内容,那么您可以从本地服务器登录而无需指定密码。这可能就是我的情况......我将通过更改pg_hba.conf文件进行测试... 但是知道postgres用户的默认密码是很好的。

感谢。

1 个答案:

答案 0 :(得分:5)

pg_roles不是可以判断用户是否有密码的视图,因为无论如何,密码字段始终设置为********

这来自该视图的定义(取自版本9.3):

select definition from pg_views  where viewname='pg_roles';

结果:

  SELECT pg_authid.rolname,
     pg_authid.rolsuper,
     pg_authid.rolinherit,
     pg_authid.rolcreaterole,
     pg_authid.rolcreatedb,
     pg_authid.rolcatupdate,
     pg_authid.rolcanlogin,
     pg_authid.rolreplication,
     pg_authid.rolconnlimit,
     '********'::text AS rolpassword
     pg_authid.rolvaliduntil,
     s.setconfig AS rolconfig,
     pg_authid.oid 
    FROM (pg_authid
    LEFT JOIN pg_db_role_setting s
      ON (((pg_authid.oid = s.setrole) AND (s.setdatabase = (0)::oid))));

请注意rolpassword列是如何硬编码以显示任何内容的(我们可能想知道为什么它会存在。也许是为了向后兼容?)

另一方面,有pg_shadow视图在名为passwd的列中显示存储的密码。此视图只能由超级用户(通常是postgres用户)读取。

示例:

create user foo unencrypted password 'foopassword';
create user bar encrypted password 'foopassword';
select usename,passwd from pg_shadow where usename in ('postgres','foo','bar');

安装Debilla安装的结果:

 usename  |               passwd                
----------+-------------------------------------
 postgres | 
 foo      | foopassword
 bar      | md50390570d30cb9a2f9cb7476f0763cf51

最初,postgres密码通常为空,但安装程序倾向于要求的Windows除外。在Unix上,pg_hba.conf通常设置为只有OS用户postgres可以通过Unix套接字域以数据库用户postgres登录而无需密码。这是合理的默认安全策略。 Windows没有Unix域套接字,并且最新版本的安装程序甚至不使用postgres操作系统用户,因此它实现了不同的默认安全策略。

如果密码为空并且pg_hba.conf需要输入连接的特定数据库/用户/来源的密码,则拒绝连接。空白密码和缺少密码之间没有区别。