Ở bài trước ta đã biết được các thông tin cần thiết để kết nối đến database PostgreSQL. Với ứng dụng kết nối đến database PostgreSQL, ta có thể dùng password file hay connection service file để lưu trữ thông tin kết nối thay vì hardcode trong ứng dụng.

 

Password file

 

Bình thường 1 ứng dụng cũng hay có mục lưu password lại để kết nối tự động lần sau. Khi tạo connection trong pgAdmin, ta cũng có thấy mục “Store password”. Password này sẽ được lưu trong password file.

 

Password file sẽ được lưu trong thư mục set trong biến môi trường PGPASSFILE.

 

Nếu không, vị trí mặc định sẽ là:

  • ~/.pgpass trên *nix. File này phải được phân quyền: chmod 0600 ~/.pgpass
  • %APPDATA%\postgresql\pgpass.conf trên Windows

Chúng ta đã cài pgAdmin trên Windows, và trong thư mục %APPDATA%\postgresql có tập tin pgpass.conf. Mở tập tin ra bằng notepad, có thể dễ dàng thấy thông tin kết nối theo dạng host:port:db:username:password

 

 

Note
Vấn đề là thường password file sẽ được mã hóa, tuy nhiên password file của PostgreSQL hỗ trợ lại chỉ được bảo mật bằng việc ẩn đi và phân quyền ??? Chỗ này mình thấy hơi lạ, có vẻ không đảm bảo bảo mật cho lắm ???

 

Connection service file

 

Ngoài password file, ta có thể sử dụng connection service file để kết nối tới database PostgreSQL. Về cấu trúc, cơ bản file này cũng có các thông tin kết nối đến database, được gom lại thành tên 1 service.

 

Trên Windows

 

Ta tạo file .pg_service.conf trong thư mục chứa file pgpass.conf (%APPDATA%\postgresql). Lưu ý tên file có dấu chấm phía trước. Với nội dung như sau:

 

 

Trong pgAdmin ta kết nối dùng service abcxyz như sau:

 

pg_3

 

Đáng lẽ chỉ cần đặt name với điền service, nhưng pgAdmin không cho bỏ trống chỗ Host, nên đành phải điền đúng địa chỉ vào (host chỗ này sẽ overwrite host trong service file).

Kết quả

 

pg_4

 

Trên Linux

 

Tạo 1 file pg_service.conf trong 1 thư mục, chẳng hạn /etc với nội dung tương tự. Có thể bỏ password cho an toàn:

 

 

Set biến môi trường

 

 

Sau đó dùng psql kết nối thử:

 

 

Đã kết nối đến đúng db và user.

 

Lưu ý: cách kết nối này sử dụng cho các ứng dụng dùng thư viện libpq, không áp dụng cho ứng dụng kết nối bằng JDBC. Cho nên kết nối bằng đầy đủ thông tin, có lẽ vẫn ổn hơn cả.

 

Maintenance database

 

Khi kết nối bằng pgAdmin, ta thấy có mục Maintenance db, với giá trị mặc định là postgres. Thực ra, nó … không có nhiều ý nghĩa lắm boring Có thể đây là keyword của pgAdmin thôi. Khi kết nối vào thì coi như đó là database mặc định sẽ kết nối đến đầu tiên, đơn giản vậy thôi.

 

Vậy tại sao lại có database postgres này? Khi khởi tạo database cluster bằng lệnh initdb, mặc định PostgreSQL sẽ tạo ra database postgres như là 1 database default ban đầu. Database này  được clone từ database template1 (khi ta tạo database khác cũng là clone từ database mẫu template1 này), cho nên db này cũng không có chứa gì đặc biệt, hoàn toàn có thể xóa đi, không ảnh hưởng gì.

 

Mặc dù vậy, một số ứng dụng hay công cụ hay chọn postgres làm database mặc định, nhiều khi drop đi cũng bị cảnh báo phiền phức, chẳng hạn psql

 

 

Cho nên ta có thể cứ để kệ nó, tạo 1 database khác dùng cho ứng dụng, và thu hồi quyền kết nối đến database đó từ PUBLIC, lúc đó ta sẽ tập trung sử dụng database chính của mình hơn, tránh tạo nhầm đối tượng vào database này.

 

 

pg_5

 

Hết bài laugh