2012-08-03

【Postgres】Postgres 設定

PostgreSQL 預設是只供本機使用的, 若要開放讓其他電腦連線進來, 或架構主從式系統, 則要修改 2 個檔案 -- postgresql.confpg_hba.conf. RedHat 血統的 LinuxFedora, CentOS 等, 這 2 個檔案是放在 /var/lib/pgsql/data, 不確定檔案放在哪的, 可用 locate 這個指令查詢.

locate postgresql.conf
locate pg_hba.conf

某些分發版本(例如:CentOS7) 內建的 Postgres 安裝後,在 /var/lib/pgsql/data/ 是空的,則您可以複製位於 /usr/share/pgsql/postgresql.conf.sample 並更名為 /usr/share/pgsql/postgresql.conf,另外要注意 postgresql.conf 的所屬擁有者 & 群組 皆為 postgres

每行字首有 # 的, 表示該行為註解.

先看 postgresql.conf, 自 V8.1 後, 改為以 listen_addresses 列出讓哪些 ip 連線, 預設值是 localhost

listen_addresses = 'localhost'
# localhost 要以單引號括起

若要只開放某些 ip 可連線, 則將 ip 列出, ip 間以逗點隔開表示, 如:

listen_addresses = '192.168.0.100, 192.168.0.110'
# 列出的 ip 要以單引號括起
若要開放所有 ip 都可連線, 則以 * 表示, 如:

listen_addresses = '*'
# * 要以單引號括起

記得要以 單引號 括起來唷, 不然會出錯的.
再來指定要開放哪個 port, 預設為 5432, 如果要開放其他的 port, 也記得要小心不要和其他程式使用的 port 衝到, 您可到

http://en.wikipedia.org/wiki/List_of_TCP_and_UDP_port_numbers

看目前已被使用的 port, 為避免上述網址會有變動, 您也可從 google 尋找, 要將搜尋範圍縮到最小, 關鍵字的部份為 port 80 5432 25...(就是將您所知道已使用的 port 打幾個上去) 就會找到了.

再看 pg_hba.conf, 開啟 pg_hba.conf 後, 直接到檔案最後, 這裡是要讓您列出要開放的資料庫, 允許的使用者, 登入的方式等, 其格式為 ----

TYPE DATABASE USER CIDR-ADDRESS HETHOD

TYPE 是連線型態, 有 local, host, hostssl, hostnossl.

DATABASE 是要開放的資料庫.

USER 是允許的使用者,這裡指的是 PostgreSQL 的使用者; 注意 PostgreSQL 的使用者及密碼是和 Linux 無關的(除非另做設定), 且 PostgreSQL 的使用者密碼預設為空值; 舉例來說: 您安裝了 PostgreSQL 後, 在 Linux 會有一個 postgres 的使用者, 而 PostgreSQL 的管理者也是 postgres, 您變更了 Linux 的 postgres 的密碼, PostgreSQL 的 postgres 並不會受影響, 依然是空值.

root 並不是內定的 PostgreSQL 管理者, 所以要變更 PostgreSQL 中的 postgres 的密碼, 必須以 postgres 登入 Linux 或切換身分為 postgres, 再進入 psql 管理程式, 以

ALTER USER postgres password '您要設定的密碼';

記得密碼要以單引號括起來, 且最後要以分號做為指令結束並執行.

CIDR-ADDRESS 是指定允許連線的 ip, 及網路遮罩, 有關網路及 ip 的觀念, 請參考 鳥哥的 Linux 私房菜網路基礎概念

METHOD 是 client 端登入方式, 有 trust, reject, md5, crypt, password, krb5, ident, pam.

trust 是不做檢查,完全信任;
password 是指要與 Postgres 連線時檢查密碼, 這裡指的是 PostgreSQL 的使用者密碼喔; 如果您希望 client 端需以密碼登入, 要注意 password以明碼, 純文字方式傳送密碼的, 所以若有有心人監聽, 密碼是很容易被取得的, PostgreSQL 建議 md5(有經過編碼) 而不用 password.

所以建議您 ---- 一開始先設定 trust, 確定 client 端連線沒問題後, 再改為 password, password 沒問題, 再改為 md5.

例如: 我要開放所有的資料庫給公司內部所有電腦連線, 內部網域為 192.168.0.x, 並以 md5 方式檢查登入, 則為 ----

host all all 192.168.0.0/24 md5