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

postgresql 9.1 - mengakses tabel melalui fungsi

Ya, ini bisa dilakukan.

"superuser" bisa menjadi superuser yang sebenarnya , postgres secara default. Saya mengganti nama peran untuk pengguna biasa menjadi usr , karena user adalah kata yang dicadangkan - jangan gunakan itu sebagai pengenal.

CREATE ROLE usr;
CREATE ROLE poweruser;
GRANT usr TO poweruser;  -- poweruser can do everything usr can.

CREATE ROLE bob PASSWORD <password>;
GRANT poweruser TO bob;

CREATE ROLE alice PASSWORD <password>;
GRANT usr TO alice;

REVOKE ALL ON SCHEMA x FROM public;
GRANT USAGE ON SCHEMA x TO usr;

REVOKE ALL ON TABLE x FROM public;
REVOKE ALL ON TABLE y FROM public;

CREATE FUNCTION
  ...
SECURITY DEFINER;

REVOKE ALL ON FUNCTION ... FROM public;
GRANT EXECUTE ON FUNCTION a TO usr;
GRANT EXECUTE ON FUNCTION b TO poweruser;

Atau Anda bisa membuat peran daemon tanpa login untuk memiliki fungsi dan memegang hak masing-masing di atas meja. Itu akan lebih aman.

Jika Anda mengikuti rute ini, Anda akan cinta ALTER DEFAULT PRIVILEGES (diperkenalkan dengan PostgreSQL 9.0). Detail lebih lanjut dalam jawaban terkait ini .

Baca bab Menulis SECURITY DEFINER Berfungsi dengan Aman dalam manual.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Simpan perubahan ke database vaadin

  2. Kunci dan transaksi di postgres yang seharusnya memblokir kueri

  3. Menghilangkan tanda kutip ganda untuk melakukan kueri di PostgreSQL

  4. PostgreSQL:Cara mendapatkan semua poin dalam radius tertentu

  5. Spring boot data.sql tidak menginisialisasi data di Postgresql