sql >> Database >  >> RDS >> PostgreSQL

Beperkte PostgreSQL-machtigingen voor webapp

Ik zal eerst je "side-quest" vraag beantwoorden:

je hebt helemaal gelijk met je zorgen en zorgen, en iedereen die een applicatie ontwerpt, zou aan dezelfde dingen moeten denken. Al het andere is slordig en onzorgvuldig.

Om de schade te beperken die kan worden veroorzaakt door een succesvolle SQL-injectie-aanval, moet u zeker het principe van de minste bevoegdheden toepassen.

Het zou vrij eenvoudig moeten zijn om een ​​systeem op te zetten dat aan uw eisen voldoet.

Ik gebruik de objectnamen uit je voorbeeld, behalve dat ik underscores zal gebruiken in plaats van minnen. Het is een goede gewoonte om alleen kleine letters, onderstrepingstekens en cijfers in objectnamen te gebruiken, omdat dit uw leven gemakkelijker zal maken.

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

Maar als u het principe van het minst serieus neemt, moet u tafelmachtigingen individueel en b.v. niet toestaan ​​app_user om DELETE en UPDATE gegevens in tabellen waar de gebruiker dit niet hoeft te doen.



  1. Psycopg2 houdt niet van tabelnamen die beginnen met een kleine letter

  2. Een eenvoudige lijst invoegen in MySQL-tabel (php)

  3. Maximaal aantal werkbare tabellen in SQL Server en MySQL

  4. Bestand invoegen in mysql Blob