PostgreSQL 預設是只供本機使用的, 若要開放讓其他電腦連線進來, 或架構主從式系統, 則要修改 2 個檔案 -- postgresql.conf 及 pg_hba.conf. RedHat 血統的 Linux 如 Fedora, 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