back to top
-2.3 C
New York

Isolasi Data Multi-Penyewa dan Keamanan Tingkat Baris

Published:

Selama satu setengah tahun terakhir, saya terlibat dalam merancang dan mengembangkan sistem manajemen perbendaharaan multi-penyewa. Dalam artikel ini, saya akan membagikan pendekatan kami terhadap aspek isolasi data dari solusi multi-penyewa kami dan pembelajaran darinya.

Latar Belakang dan Masalah Mengenai Isolasi Data

Sebelum membahas masalah yang akan saya fokuskan hari ini, pertama-tama saya harus memberikan beberapa latar belakang arsitektur penyimpanan dan data di sistem kami. Dalam hal partisi data untuk sistem SaaS, di ujung paling kanan, kami memiliki pendekatan dengan menggunakan database khusus untuk setiap penyewa (model silo), dan di sisi lain spektrum adalah model database bersama (model kumpulan) .

Model database bersama (model kumpulan)

Model database khusus (model Silo)

Model database khusus (model Silo)

Untuk alasan yang jelas seperti pengurangan overhead manajemen dan biaya yang lebih rendah, diputuskan bahwa solusi kami akan menggunakan model database bersama, dan hal tersebut juga disertai dengan kelemahan dari tingkat isolasi data inheren yang lebih rendah.

Dalam kebanyakan kasus dengan model database bersama, isolasi data bergantung pada pengembang yang mengimplementasikan klausa WHERE yang benar dalam setiap pernyataan SQL, namun hal ini tentu saja rawan kesalahan. Kami menginginkan pendekatan untuk menerapkan isolasi data dari lapisan terpisah dan muncullah konsep Keamanan Tingkat Baris (RLS).

antarmuka TransactionRepository : JpaRepository { // pendekatan sepele fun findAllByTenantId(): List // apa yang ingin kita capai override fun findAll(): List } Solusi: Keamanan Tingkat Baris (RLS)

Secara umum, Keamanan Tingkat Baris (dalam RDBMS) mengacu pada mekanisme yang memungkinkan pengendalian akses ke baris dalam tabel database berdasarkan beberapa konteks (misalnya, tenant_id). Sepengetahuan saya, fitur ini telah ada di DB PostgreSQL sejak tahun 2020, dan tersedia di SQL Server, di Amazon Aurora untuk PostgreSQL, dan RDS untuk PostgreSQL pada saat penulisan.

ALTER TABLE gtms_Payment.TRANSACTION AKTIFKAN KEAMANAN TINGKAT BARIS; BUAT KEBIJAKAN tenant_isolation_policy PADA gtms_Payment.TRANSACTION MENGGUNAKAN (business_group_code = current_setting('app.current_tenant')::VARCHAR); Solusi Lain: Sping Post Filter, Filter Hibernate Dengan Aspek Pegas

Untuk memberikan rincian lebih lanjut dari analisis saya tentang solusi yang mungkin, izinkan saya berbagi beberapa info singkat tentang kemungkinan pendekatan lain. Salah satu opsinya adalah Spring PostFilter, tapi itu berarti semua data (di beberapa penyewa) akan dikembalikan ke backend dari kueri db sebelum difilter dan dikirim, dan ini tidak ideal untuk kasus penggunaan kami.

Opsi lain (yang khusus untuk tumpukan teknologi backend kami — Spring, Hibernate, dan Java/Kotlin) adalah menggunakan Filter Hibernate dengan Aspek Pegas. Opsi ini cukup bagus namun tidak sekuat penegakan yang dilakukan pada lapisan DB. (Kami memang menggunakan pendekatan ini untuk menyelesaikan kasus penggunaan serupa, dan saya berharap dapat membahasnya di blog selanjutnya)

Maju Dengan RLS

Solusi basis data standar kami di seluruh organisasi adalah PostgreSQL (untuk kasus penggunaan seperti kami), dan ini membantu dalam keputusan kami untuk terus menggunakan RLS sebagai solusinya, namun jika Anda mencoba menyelesaikan masalah serupa dengan RLS, perhatikan bahwa jangan semua database relasional mendukung Keamanan Tingkat Baris, jadi Anda mungkin harus berhati-hati karena terkunci dalam subset database yang mendukung RLS. Namun, beralih ke DB relasional lain yang mendukung RLS seharusnya tidak terlalu sulit karena hanya ada sedikit ketergantungan pada tipe DB pada level kode itu sendiri saat menggunakan RLS.

Pelaksanaan

Masuk ke detail implementasi, setelah RLS diaktifkan di DB, kita harus mengatur parameter (dalam kasus kita, app.current_tenant) agar DB dapat menjalankan kebijakan untuk setiap kueri. Dalam kasus kami, kami melakukannya pada implementasi DataSource sebagai berikut. Dalam alur kami, kami mempertahankan informasi Penyewa pada Konteks Keamanan Musim Semi (sekali lagi, yang saya harap akan dibahas dalam blog terpisah), dan getTenantId() yang diabstraksi di sini mengambil Id Penyewa dari Konteks Keamanan Musim Semi.

class TenantAwareHikariDataSource : HikariDataSource() { ganti kesenangan getConnection(): Koneksi? { val connection = super.getConnection() return createConnection(connection) } override fun getConnection(nama pengguna: String, kata sandi: String): Koneksi? { val connection = super.getConnection(nama pengguna, kata sandi) return createConnection(koneksi) } kesenangan pribadi createConnection(koneksi: Koneksi): Koneksi? { connection.createStatement().use { sql -> sql.execute(“SET app.current_tenant=”${getTenantId()}””) } mengembalikan koneksi } }

Perhatikan bahwa jika parameter yang diperlukan untuk kebijakan RLS tidak disetel, kita akan mengalami kesalahan sebagai berikut:

(25-08-2024 22:53:50) (42704) KESALAHAN: parameter konfigurasi “app.current_tenant” yang mendukung Kasus Penggunaan yang Tidak Memerlukan Id Penyewa tidak dikenal

Di semua sistem multi-penyewa, akan selalu ada beberapa kasus penggunaan, seperti orientasi penyewa, yang mengharuskan Anda menjalankan kueri DB tanpa Id Penyewa. Jadi, bisakah kami mendukung kasus penggunaan seperti itu? Jawabannya adalah ya! Dalam fungsionalitas PostgreSQL, pemilik skema melewati kebijakan RLS. Oleh karena itu, dalam solusi yang kami miliki, kami mempertahankan dua set konfigurasi DB (Konfigurasi DB Penyewa dan Konfigurasi DB Non Penyewa) dan dua set repositori Spring yang diikat ke setiap konfigurasi DB dengan konfigurasi penyewa sebagai yang utama.

Jadi, dalam beberapa kasus penggunaan yang perlu menjalankan kueri tanpa Id Penyewa, kami menggunakan konfigurasi Non-Penyewa. Kami juga harus menggunakan pengguna pemilik skema PostgreSQL untuk alat manajemen perubahan basis data (dalam kasus kami, Liquibase).

Kelebihan dan Kekurangan Pendekatan RLS untuk Menyimpulkan Segalanya Kelebihan RLS menyediakan isolasi data pada lapisan DB. Oleh karena itu, ini memberikan isolasi yang lebih kuat dibandingkan dengan pendekatan klausa WHERE yang umum. Sebagian besar logika isolasi data (sumber data yang mengetahui penyewa, konfigurasi DB Penyewa dan Non-Penyewa, dll.) dapat berada di perpustakaan terpisah dan dibagikan ke berbagai layanan mikro. Oleh karena itu, pengembang tidak perlu terlalu khawatir tentang isolasi data penyewa sambil mengembangkan logika bisnis tingkat aplikasi. Kontra Karena belum semua database relasional mendukung RLS, akan ada penguncian DB, seperti yang dijelaskan di bagian sebelumnya. Saya harap Anda semua bersenang-senang dengan RLS! 🙂 Referensi Isolasi data multi-penyewa dengan pendekatan Arsitektur Keamanan Tingkat Baris PostgreSQL untuk penyimpanan dan data dalam solusi multi-penyewa

unity software

unity software information

software information

ADVERTISEMENT:

Informasi mengenai king slot

king selot

king slot

king slot

kingselot

pg king slot

merek 88

merek 88

mantan99

mantan88

maksimal88

maksimal88

liburan88

indodax88

indah99

indah88

ikn88

ibukota88

huawei88

hot888

hot88

dingin88

citra88

binance88

best99

best88

tradisional 88

tradisional 88

tombol88

tombol88

survey88

survey88

start88

start88

obatkuat88

obatkuat88

mcb88

mcb88

master99

master888

master88

live88

live88

libra88

kompresor88

kompresor88

kesimpulan88

kesimpulan88

kapasitor88

kapasitor88

kacamata88

kacamata88

jamu88

jamu88

jam88

jam88

follow88

follow88

dinamo88

dinamo88

baterai88

baterai88

miegacoan

miegacoan

gacoan

gacoan

website88

waweb88

waweb88

translate88

translate88

tempur888

tempur888

tambang99

tambang99

support88

support88

support88

sogoslot88

siap88

siap88

rog88

rog77

pt88

pt88

pln88

pln88

oke99

oke88

mining88

livechat88

livechat88

listrik88

listrik88

listrik88

freeport88

freeport88

free88

free88

domain88

domain88

dokter888

dokter888

bmkg88

bmkg88

asn88

merek 88 permainan paling top dan garansi imbal balik hasil besar bersama https://merek88.net/

merek 88 permainan paling top dan garansi imbal balik hasil besar bersama https://merek88.com/

mantan99 permainan paling top dan garansi imbal balik hasil besar bersama https://mantan99.asia/

mantan88 permainan paling top dan garansi imbal balik hasil besar bersama https://mantan88.asia/

maksimal88 permainan paling top dan garansi imbal balik hasil besar bersama https://maksimal88.biz/

maksimal88 permainan paling top dan garansi imbal balik hasil besar bersama https://maksimal88.asia/

liburan88 permainan paling top dan garansi imbal balik hasil besar bersama https://liburan88.com/

indodax88 permainan paling top dan garansi imbal balik hasil besar bersama https://indodax88.org/

indah99 permainan paling top dan garansi imbal balik hasil besar bersama https://indah99.asia/

indah88 permainan paling top dan garansi imbal balik hasil besar bersama https://indah88.asia/

ikn88 permainan paling top dan garansi imbal balik hasil besar bersama https://ikn88.asia/

ibukota88 permainan paling top dan garansi imbal balik hasil besar bersama https://ibukota88.com/

huawei88 permainan paling top dan garansi imbal balik hasil besar bersama https://huawei88.asia/

hot888 permainan paling top dan garansi imbal balik hasil besar bersama https://hot888.asia/

hot88 permainan paling top dan garansi imbal balik hasil besar bersama https://hot88.sale/

dingin88 permainan paling top dan garansi imbal balik hasil besar bersama https://dingin88.net/

citra88 permainan paling top dan garansi imbal balik hasil besar bersama https://citra88.asia/

binance88 permainan paling top dan garansi imbal balik hasil besar bersama https://binance88.net/

best99 permainan paling top dan garansi imbal balik hasil besar bersama https://best99.info/

best88 permainan paling top dan garansi imbal balik hasil besar bersama https://best88.asia/

tradisional 88 permainan paling top dan garansi imbal balik hasil besar bersama https://tradisional88.net/

tradisional 88 permainan paling top dan garansi imbal balik hasil besar bersama https://tradisional88.com/

tombol88 permainan paling top dan garansi imbal balik hasil besar bersama https://tombol88.org/

tombol88 permainan paling top dan garansi imbal balik hasil besar bersama https://tombol88.net/

survey88 permainan paling top dan garansi imbal balik hasil besar bersama https://survey88.net/

survey88 permainan paling top dan garansi imbal balik hasil besar bersama https://survey88.com/

start88 permainan paling top dan garansi imbal balik hasil besar bersama https://start88.org/

start88 permainan paling top dan garansi imbal balik hasil besar bersama https://start88.asia/

obatkuat88 permainan paling top dan garansi imbal balik hasil besar bersama https://obatkuat88.net/

obatkuat88 permainan paling top dan garansi imbal balik hasil besar bersama https://obatkuat88.com/

mcb88 permainan paling top dan garansi imbal balik hasil besar bersama https://mcb88.info/

mcb88 permainan paling top dan garansi imbal balik hasil besar bersama https://mcb88.asia/

master99 permainan paling top dan garansi imbal balik hasil besar bersama https://master99.biz/

master888 permainan paling top dan garansi imbal balik hasil besar bersama https://master888.asia/

master88 permainan paling top dan garansi imbal balik hasil besar bersama https://master88.asia/

live88 permainan paling top dan garansi imbal balik hasil besar bersama https://live88.bio/

live88 permainan paling top dan garansi imbal balik hasil besar bersama https://live88.asia/

libra88 permainan paling top dan garansi imbal balik hasil besar bersama https://libra88.net/

kompresor88 permainan paling top dan garansi imbal balik hasil besar bersama https://kompresor88.net/

kompresor88 permainan paling top dan garansi imbal balik hasil besar bersama https://kompresor88.com/

kesimpulan88 permainan paling top dan garansi imbal balik hasil besar bersama https://kesimpulan88.net/

kesimpulan88 permainan paling top dan garansi imbal balik hasil besar bersama https://kesimpulan88.com/

kapasitor88 permainan paling top dan garansi imbal balik hasil besar bersama https://kapasitor88.net/

kapasitor88 permainan paling top dan garansi imbal balik hasil besar bersama https://kapasitor88.com/

kacamata88 permainan paling top dan garansi imbal balik hasil besar bersama https://kacamata88.net/

kacamata88 permainan paling top dan garansi imbal balik hasil besar bersama https://kacamata88.com/

jamu88 permainan paling top dan garansi imbal balik hasil besar bersama https://jamu88.info/

jamu88 permainan paling top dan garansi imbal balik hasil besar bersama https://jamu88.asia/

jam88 permainan paling top dan garansi imbal balik hasil besar bersama https://jam88.info/

jam88 permainan paling top dan garansi imbal balik hasil besar bersama https://jam88.asia/

follow88 permainan paling top dan garansi imbal balik hasil besar bersama https://follow88.org/

follow88 permainan paling top dan garansi imbal balik hasil besar bersama https://follow88.net/

dinamo88 permainan paling top dan garansi imbal balik hasil besar bersama https://dinamo88.net/

dinamo88 permainan paling top dan garansi imbal balik hasil besar bersama https://dinamo88.info/

baterai88 permainan paling top dan garansi imbal balik hasil besar bersama https://baterai88.net/

baterai88 permainan paling top dan garansi imbal balik hasil besar bersama https://baterai88.com/

miegacoan permainan paling top dan garansi imbal balik hasil besar bersama https://miegacoan.life/

miegacoan permainan paling top dan garansi imbal balik hasil besar bersama https://miegacoan.asia/

gacoan permainan paling top dan garansi imbal balik hasil besar bersama https://gacoan.org/

gacoan permainan paling top dan garansi imbal balik hasil besar bersama https://gacoan.asia/

website88 permainan paling top dan garansi imbal balik hasil besar bersama https://website88.org/

waweb88 permainan paling top dan garansi imbal balik hasil besar bersama https://waweb88.net/

waweb88 permainan paling top dan garansi imbal balik hasil besar bersama https://waweb88.com/

translate88 permainan paling top dan garansi imbal balik hasil besar bersama https://translate88.net/

translate88 permainan paling top dan garansi imbal balik hasil besar bersama https://translate88.com/

tempur888 permainan paling top dan garansi imbal balik hasil besar bersama https://tempur888.info/

tempur888 permainan paling top dan garansi imbal balik hasil besar bersama https://tempur888.asia/

tambang99 permainan paling top dan garansi imbal balik hasil besar bersama https://tambang99.news/

tambang99 permainan paling top dan garansi imbal balik hasil besar bersama https://tambang99.asia/

support88 permainan paling top dan garansi imbal balik hasil besar bersama https://support88.org/

support88 permainan paling top dan garansi imbal balik hasil besar bersama https://support88.net/

support88 permainan paling top dan garansi imbal balik hasil besar bersama https://support88.asia/

sogoslot88 permainan paling top dan garansi imbal balik hasil besar bersama https://sogoslot88.asia/

siap88 permainan paling top dan garansi imbal balik hasil besar bersama https://siap88.news/

siap88 permainan paling top dan garansi imbal balik hasil besar bersama https://siap88.asia/

rog88 permainan paling top dan garansi imbal balik hasil besar bersama https://rog88.asia/

rog77 permainan paling top dan garansi imbal balik hasil besar bersama https://rog77.info/

pt88 permainan paling top dan garansi imbal balik hasil besar bersama https://pt88.info/

pt88 permainan paling top dan garansi imbal balik hasil besar bersama https://pt88.asia/

pln88 permainan paling top dan garansi imbal balik hasil besar bersama https://pln88.biz/

pln88 permainan paling top dan garansi imbal balik hasil besar bersama https://pln88.asia/

oke99 permainan paling top dan garansi imbal balik hasil besar bersama https://oke99.asia/

oke88 permainan paling top dan garansi imbal balik hasil besar bersama https://oke88.asia/

mining88 permainan paling top dan garansi imbal balik hasil besar bersama https://mining88.org/

livechat88 permainan paling top dan garansi imbal balik hasil besar bersama https://livechat88.info/

livechat88 permainan paling top dan garansi imbal balik hasil besar bersama https://livechat88.asia/

listrik88 permainan paling top dan garansi imbal balik hasil besar bersama https://listrik88.org/

listrik88 permainan paling top dan garansi imbal balik hasil besar bersama https://listrik88.info/

listrik88 permainan paling top dan garansi imbal balik hasil besar bersama https://listrik88.asia/

freeport88 permainan paling top dan garansi imbal balik hasil besar bersama https://freeport88.net/

freeport88 permainan paling top dan garansi imbal balik hasil besar bersama https://freeport88.com/

free88 permainan paling top dan garansi imbal balik hasil besar bersama https://free88.org/

free88 permainan paling top dan garansi imbal balik hasil besar bersama https://free88.asia/

domain88 permainan paling top dan garansi imbal balik hasil besar bersama https://domain88.org/

domain88 permainan paling top dan garansi imbal balik hasil besar bersama https://domain88.asia/

dokter888 permainan paling top dan garansi imbal balik hasil besar bersama https://dokter888.net/

dokter888 permainan paling top dan garansi imbal balik hasil besar bersama https://dokter888.asia/

bmkg88 permainan paling top dan garansi imbal balik hasil besar bersama https://bmkg88.net/

bmkg88 permainan paling top dan garansi imbal balik hasil besar bersama https://bmkg88.com/

asn88 permainan paling top dan garansi imbal balik hasil besar bersama https://asn88.org/

Informasi mengenai KING SLOT, Segera Daftar Bersama king selot terbaik dan terpercaya no satu di Indonesia. Boleh mendaftar melalui sini king slot serta memberikan hasil kembali yang paling tinggi saat sekarang ini hanyalah king slot paling gacor, gilak dan gaco saat sekarang di Indonesia melalui program return tinggi di kingselot serta pg king slot

slot demo gacor permainan paling top dan garansi imbal balik hasil besar bersama https://kdwapp.com/

akun demo slot gacor permainan paling top dan garansi imbal balik hasil besar bersama https://kdwapp.com/

akun slot demo gacor permainan paling top dan garansi imbal balik hasil besar bersama https://kdwapp.com/

akun demo slot pragmatic permainan paling top dan garansi imbal balik hasil besar bersama https://kdwapp.com/

akun slot demo pragmatic permainan paling top dan garansi imbal balik hasil besar bersama https://kdwapp.com/

akun slot demo permainan paling top dan garansi imbal balik hasil besar bersama https://kdwapp.com/

akun demo slot permainan paling top dan garansi imbal balik hasil besar bersama https://kdwapp.com/

slot demo gacor

akun demo slot gacor

akun slot demo gacor

akun demo slot pragmatic

akun slot demo pragmatic

akun slot demo

akun demo slot

slot demo gacor permainan paling top dan garansi imbal balik hasil besar bersama https://jebswagstore.com

akun demo slot gacor permainan paling top dan garansi imbal balik hasil besar bersama https://jebswagstore.com

akun slot demo gacor permainan paling top dan garansi imbal balik hasil besar bersama https://jebswagstore.com

akun demo slot pragmatic permainan paling top dan garansi imbal balik hasil besar bersama https://jebswagstore.com

akun slot demo pragmatic permainan paling top dan garansi imbal balik hasil besar bersama https://jebswagstore.com

akun slot demo permainan paling top dan garansi imbal balik hasil besar bersama https://jebswagstore.com

akun demo slot permainan paling top dan garansi imbal balik hasil besar bersama https://jebswagstore.com

slot demo gacor

akun demo slot gacor

akun slot demo gacor

akun demo slot pragmatic

akun slot demo pragmatic

akun slot demo

akun demo slot

slot demo gacor permainan paling top dan garansi imbal balik hasil besar bersama https://demoslotgacor.pro

akun demo slot gacor permainan paling top dan garansi imbal balik hasil besar bersama https://demoslotgacor.pro

akun slot demo gacor permainan paling top dan garansi imbal balik hasil besar bersama https://demoslotgacor.pro

akun demo slot pragmatic permainan paling top dan garansi imbal balik hasil besar bersama https://demoslotgacor.pro

akun slot demo pragmatic permainan paling top dan garansi imbal balik hasil besar bersama https://demoslotgacor.pro

akun slot demo permainan paling top dan garansi imbal balik hasil besar bersama https://demoslotgacor.pro

akun demo slot permainan paling top dan garansi imbal balik hasil besar bersama https://demoslotgacor.pro

slot demo gacor

akun demo slot gacor

akun slot demo gacor

akun demo slot pragmatic

akun slot demo pragmatic

akun slot demo

akun demo slot

slot demo gacor permainan paling top dan garansi imbal balik hasil besar bersama https://situsslotterbaru.net

akun demo slot gacor permainan paling top dan garansi imbal balik hasil besar bersama https://situsslotterbaru.net

akun slot demo gacor permainan paling top dan garansi imbal balik hasil besar bersama https://situsslotterbaru.net

akun demo slot pragmatic permainan paling top dan garansi imbal balik hasil besar bersama https://situsslotterbaru.net

akun slot demo pragmatic permainan paling top dan garansi imbal balik hasil besar bersama https://situsslotterbaru.net

akun slot demo permainan paling top dan garansi imbal balik hasil besar bersama https://situsslotterbaru.net

akun demo slot permainan paling top dan garansi imbal balik hasil besar bersama https://situsslotterbaru.net

slot demo gacor

akun demo slot gacor

akun slot demo gacor

akun demo slot pragmatic

akun slot demo pragmatic

akun slot demo

akun demo slot

situs slot terbaru

slot terbaru

Artikel terkait

Artikel Terbaru