pgAdmin的Desktop Mode設定允許遠端訪問
有時候因為一些安全設定或許可權問題,不允許使用者直接訪問PostgreSQL資料庫,但是Support系統的使用者必須要訪問資料庫. 那怎麼辦呢? 在一臺可以訪問PostgreSQL的伺服器上安裝pgAdmin,然後讓使用者使用瀏覽器遠端訪問pgAdmin,訪問PostgreSQL資料庫, 那麼pgAdmin如何設定允許遠端訪問呢?其實pgAdmin有Desktop Mode和Server Mode兩種模式,對於Server Mode的話,這個根本不是問題。
下面介紹Desktop Mode的pgAdmin如何允許遠端訪問,這個是在對pgAdmin這個工具不熟悉的情況下的一個嘗試。很多時候,我們都像一個蹣跚學步的小孩一樣,需要時間和嘗試才會熟練的掌握一款工具!過程中總有磕磕碰碰。
下面測試環境為Windows Server 2019 Datacenter版本,在pgAdmin的安裝目錄,例如,C:\Program Files\pgAdmin 4\v4\web目錄下(這裡是預設安裝,根據實際情況找到安裝目錄)config.py檔案, 找到DEFAULT_SERVER引數,將其值修改為'0.0.0.0'後
# This option allows the user to host the application on a LAN
# Default hosting is on localhost (DEFAULT_SERVER='localhost').
# To host pgAdmin4 over LAN set DEFAULT_SERVER='0.0.0.0' (or a specific
# adaptor address.
#
# NOTE: This is NOT recommended for production use, only for debugging
# or testing. Production installations should be run as a WSGI application
# behind Apache HTTPD.
DEFAULT_SERVER = '0.0.0.0'
# The default port on which the app server will listen if not set in the
# environment by the runtime
DEFAULT_SERVER_PORT = 5050
退出並重新啟動pgAdmin後,找到右下角pgAdmin的圖示,選擇”Copy server URL“,就可以在遠端伺服器使用類似下面的URL連結訪問pgAdmin了。
http://192.168.103.63:52846/?key=33962ea5-6319-4659-bdfa-6b9b233e6eb9
測試過程中發現,啟用遠端訪問pgAdmin後,不需要輸入master密碼了。後面檢視官方文件才知道,一般而言只有destop mode才有master password,但是修改引數DEFAULT_SERVER = '0.0.0.0'後,只有本機第一次登入paAdmin才會需要master密碼,而其他使用者通過瀏覽器遠端訪問paAdmin的話,不需要輸入master密碼了。取而代之的是一長串key:33962ea5-6319-4659-bdfa-6b9b233e6eb9 當然這個key是變化的。每次重啟pgAdmin後就會重新生成一長串Key。
##########################################################################
# Master password is used to encrypt/decrypt saved server passwords
# Applicable for desktop mode only
##########################################################################
MASTER_PASSWORD_REQUIRED = True
雖然通過key這種方式也能達到一定的安全性,例如,如果你不知道key,使用下面連結是訪問不了系統的。
http://192.168.103.63:52846//browser/
它會提示下面錯誤資訊,使用上面帶key的URL連結訪問過後,上面這種連結才能正常訪問。總之安全總是相對的。對於Desktop Mode的pgAdmin還是不建議開啟遠端訪問。
Unauthorized
The server could not verify that you are authorized to access the URL requested. You either supplied the wrong credentials (e.g. a bad password), or your browser doesn't understand how to supply the credentials required.
參考資料:
https://www.pgadmin.org/faq/#2
https://www.pgadmin.org/docs/pgadmin4/development/server_deployment.html