PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Ограничени разрешения на PostgreSQL за уеб приложение

Първо ще отговоря на въпроса ви за „странична мисия“:

вие сте напълно прав с вашите притеснения и опасения и всеки, който проектира приложение, трябва да мисли за едни и същи неща. Всичко останало е немарливо и небрежно.

За да смекчите щетите, които могат да бъдат причинени от успешна атака чрез SQL инжектиране, определено трябва да използвате принципа на най-малко привилегии.

Трябва да е доста лесно да настроите система, която отговаря на вашите изисквания.

Ще използвам имената на обектите от вашия пример, с изключение на това, че ще използвам долни черти вместо минуси. Добре е да използвате само малки букви, долни черти и цифри в имената на обектите, тъй като това ще улесни живота ви.

/* 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;

Но ако приемете принципа на най-малкото сериозно, трябва да предоставите разрешения за таблица индивидуално и напр. не позволява app_user за DELETE и UPDATE данни в таблици, където не е необходимо потребителят да го прави.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да попречите на PDO да тълкува въпросителния знак като заместител?

  2. Множество бази данни в docker и docker-compose

  3. Извършване на голяма актуализация с помощта на множество таблици в PostgreSQL

  4. как да използвате jsonb в rails

  5. Преместването на база данни с pg_dump и psql -U postgres db_name <... води до ГРЕШКА:релацията table_name не съществува