我刚接触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用户的默认密码是很好的。
感谢。
答案 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
需要输入连接的特定数据库/用户/来源的密码,则拒绝连接。空白密码和缺少密码之间没有区别。