默认postgres用户和密码

dot*_*dot 2 postgresql

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

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

psql -U postgres 
Run Code Online (Sandbox Code Playgroud)

我做了一个

`select * from pg_roles`
Run Code Online (Sandbox Code Playgroud)

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

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

谢谢.

Dan*_*ité 6

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

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

select definition from pg_views  where viewname='pg_roles';
Run Code Online (Sandbox Code Playgroud)

结果:

  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');
Run Code Online (Sandbox Code Playgroud)

安装Debilla的结果安装:

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

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

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