一、正確的方式串連到了正確的資料庫
如果想知道是否以正確的方式串連到了正確的資料庫,我們可以執行下面給出的命令加以驗證:
SELECT inet_server_port(); 該命令顯示伺服器所偵聽的連接埠號碼。
SELECT current_database(); 顯示當前的資料庫。
SELECT current_user; 該命令顯示當前的userid。
SELECT inet_server_addr(); 顯示接受已連線的服務器的IP地址。
很明顯,使用者的口令是無法以普通SQL進行訪問的。
二、遠端存取資料庫
為安全起見,PostgreSQL的許多版本 預設時禁用了其遠端存取功能。那麼,如何啟用該功能呢?
為了啟用網路或者遠端存取功能,我們需要在postgresql.conf檔案中添加或者編輯下列內容:
listen_addresses = '*'
在pg_hba.conf的第一行添加如下內容,以便允許所有使用者通過加密口令來訪問所有資料庫:
# TYPE DATABASE USER CIDR-ADDRESS METHOD
host all all 0.0.0.0/0 md5
下面我們對上面的內容做簡單說明。參數listen_addresses指定了要偵聽的IP地址。這樣的話,即使每個系統上有多個網卡也沒關係了。在大多數情況下,我們會接受所有網卡上的串連,所以可以使用“*”,它表示所有IP地址。
pg_hba.conf中存放有一組基於主機的認證規則。每條規則會被逐條應用,直到找到一條符合的,就能通過認證;或者訪問被reject方法顯式拒絕。上面的樣本中給出的規則表示,所有遠端連線,無論使用者為誰,無論訪問那個資料庫,也無論來自哪個IP地址,都要求通過md5加密的口令進行認證。
Type = host表示遠端連線。Database = all 表示所有資料庫。其他名字要求嚴格匹配,除非帶有首碼+,這個首碼表示組角色,而非某個使用者。我們還可以規定一個由逗號分隔的使用者表,或者使用@ symbol 來包含一個存放使用者表的檔案。我們還可以使用sameuser,這樣的話只有當使用者名稱和資料庫名稱一致時才匹配。
User = all 表示所有使用者。其他名字要求嚴格匹配,除非帶有首碼+,這個首碼表示組角色,而非某個使用者。我們還可以規定一個由逗號分隔的使用者表,或者使用@ symbol來包含一個存放使用者表的檔案。
CIDR-ADDRESS 由兩部分組成,即IP地址/子網路遮罩。子網路遮罩規定了IP地址中前面哪些位表示網路編號。這裡/0表示IP地址中沒有表示網路編號的位,這樣的話全部的IP地址都匹配,例如192.168.0.0/24表示匹配前24位,所以它匹配任何192.168.0.x形式的IP地址。我們還可以使用samenet或者samehost。
這裡一定要注意,千萬不要使用password設定,這樣會允許明文形式的口令。
Method = trust 實際上表示無需認證。其他的認證方法包括GSSAPI、SSPI、LDAP、RADIUS和PAM。此外,我們還可以使用SSL串連PostgreSQL,這時用用戶端的SSL認證進行認證
錯誤2:
psql: could not connect to server: Connection refused (0x0000274D/10061)
Is the server running on host "???" and accepting
TCP/IP connections on port 5432?
這個問題一般是以下原因造成的: www.111cn.net
1.伺服器沒起來,ps -ef|grep postgres查看是否存在PG進程
2.監聽問題,cat postgresql.conf|grep listen 查看監聽地址是否正確
3.以上都沒問題,伺服器端能連進去,但用戶端不行,這時需要查看pg_hba.conf檔案
4.以上都沒問題,檢查伺服器端的iptables,開啟防火牆的訪問連接埠
錯誤3:
是在群裡一個使用者貼的:
Fatal:connection limit exceeded for non-supersers
其實該問題和錯誤1是類似的,串連數接近資料庫設定的串連數.需要增大串連數 說明:
max_connections是資料庫允許的最大串連數,預設值100,
superuser_reserved_connections是預留給超級使用者的串連數,預設值3
修改這兩個參數都需要重啟DB;
與之相關聯的參數還有work_mem,串連數*work_mem可以得到DB的記憶體大小,這個調整視伺服器的記憶體大小
遠端連線PostgreSQL
A: 192.168.1.1 Windows Server 2003
B: 192.168.1.2 Windows XP pro
A機器安裝PostgreSQL,預設連接埠5432
想實現B機器通過遠端連線A機器的PostgreSQL服務。
如果A機器啟動Windows防火牆,則在“例外”中“添加連接埠”加上5432連接埠。
在postgresql.conf中的修改
listen_addresses = '*'
port = 5432
在pg_hba.conf中添加
host all all 192.168.1.2/32 trust
在B機器上用pgAdminIII試試串連A機器192.168.1.1