2015-09-24 45 views
1

有沒有辦法從PostgreSQL服務器獲取登錄名單的加密密碼?獲取PostgreSQL登錄角色的加密密碼

爲了深入瞭解我的問題,我試圖通過Ansible管理postgres用戶的密碼。爲此,我想檢查加密密碼的當前值(例如'md5...')以查看它是否是最新的。如果不是,我會執行相應的ALTER ROLL命令來更新它。

我知道我可以使用pg_dumpall看到密碼,e.g:

$ pg_dumpall --roles-only 
<snip> 
CREATE ROLE postgres; 
ALTER ROLE postgres WITH ... PASSWORD 'md5...'; 

但這似乎並不喜歡這樣做的一個非常可靠的方法。

回答

1

嘗試讀取rolpassword字段。

SELECT rolpassword FROM pg_authid 

pg_authid

目錄pg_authid包含有關數據庫 授權標識符(角色)的信息。角色包含 「用戶」和「組」的概念。用戶基本上只是與設置的rolcanlogin標誌 發生作用。任何角色(帶或不帶rolcanlogin)都可以有其他角色作爲成員;請參閱pg_auth_members。

由於本目錄書包含密碼,因此不得公開 可讀。 pg_roles是pg_authid上一個公開可讀的視圖, 可以清除密碼字段。

第19章包含有關用戶和權限管理的詳細信息。

因爲用戶標識是集羣範圍的,pg_authid在整個集羣的所有數據庫中共享:pg_authid每 集羣只有一個pg_authid副本,而不是每個數據庫一個副本。

+0

將md5中的'pg_authid'中的密碼與encrypthion之前的用戶名連接在一起,因此將它與裸密碼的md5進行比較將不會有用。 (https://www.postgresql.org/docs/current/static/catalog-pg-authid.html) –