PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Các quyền PostgreSQL bị hạn chế cho ứng dụng web

Tôi sẽ trả lời câu hỏi “nhiệm vụ phụ” của bạn trước:

bạn hoàn toàn đúng với những lo lắng và băn khoăn của mình và mọi người thiết kế một ứng dụng nên nghĩ về những điều tương tự. Mọi thứ khác đều cẩu thả và bất cẩn.

Để giảm thiểu thiệt hại có thể gây ra bởi một cuộc tấn công SQL injection thành công, bạn chắc chắn nên sử dụng nguyên tắc ít đặc quyền nhất.

Sẽ khá đơn giản để thiết lập một hệ thống phù hợp với yêu cầu của bạn.

Tôi sẽ sử dụng tên đối tượng từ exaple của bạn, ngoại trừ việc tôi sẽ sử dụng dấu gạch dưới thay vì dấu gạch ngang. Sẽ rất hữu ích nếu chỉ sử dụng các chữ cái viết thường, dấu gạch dưới và số trong tên đối tượng, vì nó sẽ giúp cuộc sống của bạn dễ dàng hơn.

/* create the database */
\c postgres postgres
CREATE DATABASE test_database WITH OWNER app_admin;
\c test_database postgres

/* drop public schema; other, less invasive option is to
   REVOKE ALL ON SCHEMA public FROM PUBLIC */
DROP SCHEMA public;
/* create an application schema */
CREATE SCHEMA app AUTHORIZATION app_admin;
/* further operations won't need superuser access */
\c test_database app_admin
/* allow app_user to access, but not create objects in the schema */
GRANT USAGE ON SCHEMA app TO app_user;

/* PUBLIC should not be allowed to execute functions created by app_admin */
ALTER DEFAULT PRIVILEGES FOR ROLE app_admin
   REVOKE EXECUTE ON FUNCTIONS FROM PUBLIC;

/* assuming that app_user should be allowed to do anything
   with data in all tables in that schema, allow access for all
   objects that app_admin will create there */
ALTER DEFAULT PRIVILEGES FOR ROLE app_admin IN SCHEMA app
   GRANT SELECT, INSERT, UPDATE, DELETE ON TABLES TO app_user;
ALTER DEFAULT PRIVILEGES FOR ROLE app_admin IN SCHEMA app
   GRANT SELECT, USAGE ON SEQUENCES TO app_user;
ALTER DEFAULT PRIVILEGES FOR ROLE app_admin IN SCHEMA app
   GRANT EXECUTE ON FUNCTIONS TO app_user;

Nhưng nếu bạn thực hiện nguyên tắc ít nghiêm túc nhất, bạn nên cấp quyền cho bảng riêng lẻ và ví dụ:không cho phép app_user thành DELETEUPDATE dữ liệu trong các bảng mà người dùng không cần làm như vậy.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm thế nào để đưa vào một biến giá trị của lựa chọn của Menu Chọn / Thả xuống PHP hoặc HTML

  2. Postgres SQL SELECT và UPDATE hoạt động khác nhau

  3. postgresql - truy vấn để xây dựng json

  4. Các tính năng của phương pháp sao lưu PostgreSQL trong AWS S3

  5. jooq - vấn đề khi nhận dạng ràng buộc DUY NHẤT của postgres