Blog_

Create read-only access to PostgreSQL database

Đối với mục đích báo cáo hoặc phân tích dữ liệu, thông thường cần phải cho phép một số người dùng nhất định truy cập cơ sở dữ liệu ở chế độ chỉ đọc. Việc cấp quyền truy cập chỉ đọc sẽ ngăn hệ thống phân tích của bạn chạy các truy vấn không mong muốn và không an toàn, chẳng hạn như DROP TABLE, DELETE, INSERT, UPDATE ...

Thao tác này diễn ra khá dễ dàng bằng cách chạy lệnh psql và chỉnh sửa tệp xác thực ứng dụng khách postgresql

Trong ví dụ dưới đây, chúng tôi sẽ cho phép người dùng grafana truy cập cơ sở dữ liệu mydb từ địa chỉ IP 192.168.1.10 .

Cấp quyền truy cập vào PostgreSQL bằng lệnh psql

Bằng cách thực hiện như sau, người dùng grafana sẽ được phép chạy các truy vấn SELECT trên tất cả các bảng thuộc cơ sở dữ liệu mydb .

$ psql

CREATE ROLE grafana with LOGIN PASSWORD 'password';
GRANT CONNECT ON DATABASE mydb to grafana;

\c mydb
GRANT SELECT ON ALL TABLES IN SCHEMA public to grafana;

Chỉnh sửa tệp PostgreSQL pg_hba.conf

PostgreSQL có hệ thống kiểm soát truy cập xác thực máy khách mạnh mẽ. PostgreSQL sẽ cho phép truy cập cơ sở dữ liệu dựa trên người dùng, địa chỉ nguồn máy khách và phương thức xác thực. Khi được cấu hình tốt, nó làm cho PostgreSQL trở nên rất an toàn. Tất cả đều có thể định cấu hình với tệp pg_hba.conf.

# nano /etc/postgresql/13/main/pg_hba.conf

# TYPE  DATABASE   USER       ADDRESS            METHOD
host    mydb       grafana    192.168.1.10/32    md5

Để biết thêm về pg_hba.conf, bạn có thể truy cập vào trang tài liệu chính thức tại đây: https://www.postgresql.org/docs/current/auth-pg-hba-conf.html

Bạn phải khởi động lại dịch vụ postgresql để áp dụng cấu hình mới.

# systemctl restart postgres

Listening Addresses PostgreSQL

Theo mặc định, PostgreSQL sẽ lắng nghe địa chỉ localhost, ngăn chặn việc truy cập từ bên ngoài của máy khách.

listen_addresses, nằm trong tệp postgresql.conf, đặt địa chỉ IP mà máy chủ sẽ lắng nghe các kết nối từ các ứng dụng khách.

Đối với hướng dẫn này, chúng tôi sẽ sử dụng ký tự đại diện '*' để lắng nghe bất kỳ giao diện mạng nào có sẵn trên máy chủ. Bạn nên khởi động lại dịch vụ PostgreSQL để áp dụng các thay đổi.

Kiểm tra kết nối

Giờ đây, bạn có thể kiểm tra kết nối của mình từ máy chủ 192.168.1.10.

psql -h <postgresql_ip_address> -U grafana -W -d mydb

Nó không hoạt động?

  • Bạn đã cấu hình tường lửa chưa?
  • Bạn đã kiểm tra các lỗi trong nhật ký PostgreSQL "/ var / log / postgresql" chưa?