PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Izin PostgreSQL terbatas untuk aplikasi web

Saya akan menjawab pertanyaan "pencarian sampingan" Anda terlebih dahulu:

Anda sepenuhnya benar dengan kekhawatiran dan kekhawatiran Anda, dan setiap orang yang mendesain aplikasi harus memikirkan hal yang sama. Yang lainnya ceroboh dan ceroboh.

Untuk mengurangi kerusakan yang dapat disebabkan oleh serangan injeksi SQL yang berhasil, Anda harus menggunakan prinsip hak istimewa paling rendah.

Seharusnya cukup mudah untuk menyiapkan sistem yang sesuai dengan kebutuhan Anda.

Saya akan menggunakan nama objek dari contoh Anda, kecuali bahwa saya akan menggunakan garis bawah alih-alih minus. Sebaiknya gunakan hanya huruf kecil, garis bawah, dan angka dalam nama objek, karena itu akan membuat hidup Anda lebih mudah.

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

Tetapi jika Anda mengambil prinsip yang paling tidak serius, Anda harus memberikan izin tabel secara individual dan mis. tidak mengizinkan app_user untuk DELETE dan UPDATE data dalam tabel di mana pengguna tidak perlu melakukannya.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana cara mensimulasikan kebuntuan di PostgreSQL?

  2. Membandingkan Penyimpanan Data untuk PostgreSQL - MVCC vs InnoDB

  3. Apakah ada perbedaan dalam menyimpan nilai yang sama dalam tipe integer yang berbeda?

  4. Bagaimana cara menginstal hanya alat klien untuk PostgreSQL di Windows?

  5. Cara mendapatkan elemen dari array Json di PostgreSQL