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)
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