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