Sabtu, 17 Oktober 2009

Security PostgreSQL

Sekuriti dari basis data dibagi menjadi beberapa level:

  • Proteksi berkas basis data, yaitu semua berkas yang tersimpan di basis data terlindungi dari account manapun kecuali superuser account dari postgres

  • Komunikasi antara user dengan server basis data by default, dilakukan melalui local UNIX socket, bukan TCP/IP.

  • Koneksi user dapat diatur sehingga koneksi hanya bisa dari IP yang ditentukan saja

  • Setiap user di postgre mempunyai user name dan password. By default, user hanya dapat melihat tabel basis data yang dibuat oleh user tsb.

  • User dapat dimasukkan ke sebuah group sehingga akses tabel bisa dibatasi oleh anggota group tersebut.


Authentikasi

Adalah proses pengecekan oleh server apakah user yang mengakses suatu berkas basis data itu adalah user yang berhak atau tidak. User yang mengakses akan di cek ke kelas pg_user untuk memastikan bahwa yang mengakses itu adalah orang yang benar-benar yang punya basis data tersebut.


Postgre mengecek autentikasi dengan cara Host-based Access Control, yaitu user mana yang boleh mengakses sebuah basis data dan user tersebut harus mengautentikasi dirinya sendiri.


Postgre juga menyediakan keluasaan bagi user untuk menentukan siapa saja yang boleh mengakses basis data mereka melalui Access Control. Access Control ini membatasi siapa saja yang bisa mengakses dengan cara seperti memberikan superuser atau membatasi privileged yang didapat oleh seorang user (misalnya membatasi hanya boleh membaca, tidak boleh mengubah).


PostgreSQL mengauthentikasikan user dalam beberapa metode:

  • Trust, koneksi user diizinkan tanpa syarat/pertimbangan

  • Reject, koneksi user ditolak tanpa syarat/pertimbangan

  • Crypt, client akan meminta password untuk mengauthentikasi user. Password dikirim dari client ke server dengan cara dienkripsi terlebih dahulu dengan crypt(3), lalu membandingkannya dengan password yang disimpan di dalam table pg_shadow, yaitu table yang memuat password para user. Jika cocok, maka koneksi diizinkan

  • Password, client akan meminta password kepada user, lalu password ini akan dikirim langsung ke server dan dicocokkan dengan table pg_shadow. Jika passwordnya cocok, maka mungkin akan diminta mengirimkan berkas password untuk dicocokkan kemudian.

Semua metode di atas mensupport UNIX dan TCP/IP domain sockets.


Metode di bawah ini hanya untuk TCP/IP domain sockets:

  • Krb4, kerberos v4

  • Krb5, kerberos v5

  • Ident, ‘ident server’ pada client akan mengauthentikasi user (RFC 1413). Kemudian, user dapat memberikan ‘map name’ untuk dicocokkan kemudian ke user name yang tersimpan pada postgre server.


Selain itu, terdapat cara juga untuk melakukan ‘secure TCP/IP connection’, yaitu dengan cara menggunakan metode ssh untuk mengenkripsi koneksi jaringan antara client dengan postgre server. Caranya adalah:

  • Buatlah sebuah koneksi ke server dengan cara ‘tunnel’ seperti

    • ssh –L 3333:server.domain.org:5432 postgres@server.org

  • angka pertama (3333) adalah port number dari tunnel yang berada di client. Angka kedua (5432) adalah remote end dari tunnel atau port postgre yang berada di server. Alamat server berada di antara kedua angka tersebut. Argumen terakhir adalah optional user name. User name ini bisa aja tidak berkaitan dengan postgre, asalkan diterima oleh server.

  • Setelah mempunyai sesi ssh, koneksikan postgre client dengan port yang merupakan tunnel daripada koneksi ssh sebelumnya.

    • Psql –h localhost –p 3333 –d mpw

  • -h disini adalah untuk memberitahu bahwa socket yang digunakan adalah TCP/IP, bukan UNIX socket. Kita dapat juga menghilangkan –p jika port tunnel yang digunakan adalah 5432

Tidak ada komentar:

Posting Komentar