İçeriğe geç

Çok Kiracılı (Multi-Tenant) CRM Mimarisi: "Verileriniz Ayrı Tutulur" Cümlesi Nerede Biter?

Kategori
Teknoloji
Yayın tarihi
24 Ağustos 2026

Bir CRM sağlayıcısıyla yapılan görüşmede duyulan bir cümle var: verileriniz ayrı tutulur. Bu cümle yanlış değil. Eksik olan, nerede bittiği.

Çok kiracılı (multi-tenant) bir yazılımda tek bir uygulama, tek bir sunucu ve tek bir işletim ekibi çok sayıda müşteriye aynı anda hizmet eder. Ayrım bu yüzden bir yerde kurulur ve bir yerde biter. Hangi katmanda kurulduğu yazılmadıkça alıcı en geniş anlamı varsayar, sağlayıcı da gerektiğinde en dar anlamı savunur; ikisinin arasındaki fark alıcının riskidir.

Bu yazı kendi kurulumumuzu ölçerek yazıldı. Aşağıdaki sayıların tamamı Rapitek CRM'in üretim ortamından alındı ve aleyhimize olanlar da olduğu gibi duruyor. Amaç bir güvenlik broşürü yazmak değil; bir alıcının sağlayıcısına soracağı soruları, cevabın nerede biteceğini bilerek sormasını sağlamak.

Kapsam
"Verileriniz ayrı tutulur" bir mimari tarifi değil, bir kapsam cümlesidir. Kapsamı yazılmadığında üç ayrı mimarinin üçüne birden uyar — ve bir yıl sonra kimin ne kastettiği tartışılamaz hale gelir.

Çok kiracılı (multi-tenant) mimari nedir?

Çok kiracılı mimari, tek bir yazılım kurulumunun birden fazla müşteriye — kiracıya — aynı anda hizmet vermesidir. Alternatifi tek kiracılıdır: her müşteri için ayrı bir kurulum, ayrı bir sürüm, ayrı bir bakım hattı. Çok kiracılı olmak bir kusur değil, bulut yazılımının maliyet ve güncelleme modelidir; yeni bir sürüm tek seferde bütün kiracılara ulaşır.

Ayrımın nasıl kurulduğu ise sabit değil. Üç yaklaşım tarif edilir ve üçü de "verileriniz ayrı tutulur" cümlesiyle anlatılabilir.

1. Paylaşılan tablo, kiracı sütunu

Bütün müşterilerin kayıtları aynı tablolarda durur; her satırda bir kiracı kimliği sütunu vardır ve ayrım tamamen uygulama kodunun o sütunu doğru filtrelemesine bağlıdır. En ucuz ve en esnek olan budur. Ayrımı koruyan tek şey koddur: filtreyi unutan tek bir sorgu sınırın karşı tarafını görür ve bunu veritabanı tarafında durduran bir kural yoktur.

2. Ortak veritabanı sunucusu, kiracı başına ayrı veritabanı

Her müşterinin kendi veritabanı ve kendi tablo dosyaları vardır; hepsi aynı veritabanı sunucusu üzerinde çalışır. Ayrım artık uygulama filtresine değil, bağlantının hangi veritabanına açıldığına bağlıdır. Uygulamada unutulan bir kiracı filtresi bu kurguda karşı tarafın kayıtlarını getirmez, çünkü o kayıtlar bağlantının veritabanında bulunmaz. Sınır burada da mutlak değildir: sunucu, işletim sistemi ve veritabanı kullanıcısı ortaktır.

3. Kiracı başına ayrı kurulum

Ayrı sunucu, ayrı veritabanı sunucusu, ayrı ağ. Ayrımın en katı hâli budur ve maliyeti de en yüksek olan budur; her müşteri ayrı bir işletim yükü demektir. Bir sağlayıcı bunu yapıyorsa o maliyet bir yerde fiyata yansır.

Bir sağlayıcı hangisini kastettiğini söylemiyorsa, cümle üçüne de uyar.

Bu fark alıcı için nerede ortaya çıkar?

Günlük kullanımda üç model de aynı görünür: aynı ekranlar, aynı hız, aynı adres. Fark üç anda görünür.

Birincisi olay anında. Bir arıza, bir kaynak tükenmesi ya da bir bakım penceresi kaç müşteriyi aynı anda etkiler? Ayrım ne kadar aşağı katmanda kurulmuşsa etki alanı o kadar dar olur.

İkincisi ayrılırken. Sözleşme bittiğinde verinizin çıkarılması ve silinmesi, ayrı bir veritabanında tek bir işlem; paylaşılan bir tabloda ise satır satır bir ayıklama işi. Sağlayıcının size ne kadar hızlı ve ne kadar eksiksiz cevap verebileceğini büyük ölçüde bu belirler.

Üçüncüsü denetim sırasında. Bir müşteriniz ya da denetçiniz "verimiz kimin verisiyle aynı yerde duruyor" diye sorduğunda vereceğiniz cevap, sağlayıcınızın mimarisinden daha ileri gidemez. Bu yüzden cevabın kapsamını sözleşme aşamasında öğrenmek, olaydan sonra öğrenmekten ucuzdur.

Rapitek CRM'de ayrım hangi katmanda kuruluyor?

Kendi mimarimiz yukarıdaki ikinci gruba giriyor. Siteye yazdığımız cümle bunu kapsamıyla birlikte söylüyor:

CRM verileriniz size ait ayrı bir veritabanında tutulur: ayrı tablo dosyaları, ayrı yedek ve ayrı dosya alanı. Bu ayırım veritabanı düzeyindedir; bir isteğin hangi müşterinin veritabanına gideceğini ise uygulama, isteğin geldiği web adresine göre seçer.

Ölçülen hâli şu: 24 kiracı, 24 ayrı veritabanı şeması, ayrı tablo dosyaları. Kayıt sayıları bunu doğruluyor — aynı tablo bir kiracıda 5.865 aday kaydı taşırken diğerinde sıfır satır. Yüklenen dosyalar için de aynı ayrım kurulu: dosya deposunda kiracı başına ayrı bir alan açılıyor. Buraya bir not düşmek gerekiyor: ölçüm günü dosya deposunda 69 alan sayıldı, yani bugünkü kiracı sayısından fazla. Bu farkın nereden geldiğini ölçmedik; sayıyı olduğu gibi yazıyor, açıklamasını uydurmuyoruz.

Cümlenin dikkatle seçilmiş iki parçası var. Birincisi CRM verileriniz: kapsam sizin CRM kayıtlarınızdır — firma, kişi, fırsat, teklif, yüklediğiniz dosyalar. Bütün veri değil. İkincisi veritabanı düzeyindedir: veri, bağlantının açıldığı ayrı bir veritabanında duruyor; bağlantının hangi veritabanına açılacağını ise uygulama seçiyor. Yazının geri kalanı, bu iki parçanın dışarıda bıraktığı yeri anlatıyor.

Bu ayrımın nereye kadar gittiğini de yazalım. Veritabanı düzeyinde kurulmuş olması, sınırın koddan bağımsız olduğu anlamına gelmez: kiracıyı doğru veritabanına yönlendiren şeyin kendisi de koddur. İddiamız, ayrımın bir uygulama ayarından daha aşağıda kurulmuş olması; sıfır riskli bir mimari olduğu değil. Ortak kalan katmanları "Ayrımın bittiği üç yer" bölümünde tek tek yazıyoruz.

Bileşenlerin hangi ülkede durduğu ayrı bir sorudur; kırılımı aşağıda.

Ölçüm: 20 Ağustos 2026

Hangi bileşen nerede duruyor

Aynı konumlar bütün kiracılar için geçerlidir. Ölçtüğümüz bileşenlerin hiçbiri Türkiye'de değil. Hata izleme satırında şehir kırılımını ölçmedik; ölçmediğimiz yeri boş bırakmak yerine yazdık.
BileşenKonumBarındıran
Uygulama ve CRM veritabanıHelsinki, FinlandiyaHetzner
Yüklenen dosyalar (ek, görsel, toplantı ses kaydı)Frankfurt, AlmanyaDigitalOcean Spaces
Veritabanı yedekleriFalkenstein, AlmanyaHetzner Storage Box
Hata izleme (kişisel veri gönderimi kapalı)Almanya; şehir kırılımı ölçülmediSentry
Platformun gönderdiği e-postaFrankfurt, Almanya (AB)AWS SES

Ayrımın bittiği üç yer

1. Ayrı veritabanı, ayrı sunucu demek değil

Kiracı veritabanlarının hepsi (23 Eylül 2026'da 25) aynı MySQL örneği üzerinde çalışıyor ve uygulama hepsine tek bir veritabanı hesabıyla bağlanıyor. Kiracıya özel bir sunucu, kiracıya özel bir donanım ya da kiracıya özel bir veritabanı parolası yok. Pratik anlamı şu: ayrım veritabanı düzeyinde gerçek, ama veritabanı sunucusunun kendisi ortak bir kaynak. Sunucuyu etkileyen bir olay — yük, kaynak tükenmesi, bakım penceresi — bütün kiracıları aynı anda etkiler. Bunu "ayrı sunucu" diye yazamayız, yazmıyoruz da.

2. İşletim günlükleri paylaşılan bir tabloda duruyor

CRM kayıtlarınız ayrı bir veritabanında. Uygulamanın kendi hata kayıtları öyle değil. Ana veritabanındaki tek bir hata günlüğü tablosunda ölçtüğümüz değerler: 39.842 satır, 26 farklı kiracı, 26.357 kullanıcı e-posta adresi, 26.908 IP adresi ve 13.597 istek gövdesi — hepsi aynı paylaşılan tabloda.

Buradaki 26 sayısı, bugün sistemde bulunan 24 kiracıdan fazla. Sebebi rahatsız edici ölçüde basit: ayrılmış müşterilerin satırları hâlâ orada. Ayrılan kiracının CRM veritabanına ne olduğunu ölçmedik ve silindiğini yazmıyoruz; ölçtüğümüz tek şey, günlük satırlarının silinmemiş olduğu.

Bu neden önemli: bir hata günlüğü satırı yalnızca bir hata mesajı değildir. İçinde kimin, hangi adresten, hangi isteği yaptığı durur; bu kişisel veridir. "Verileriniz ayrı tutulur" cümlesi o satırları kapsamaz. Bizim cümlemiz de kapsamadığını söylüyor — CRM verileriniz derken kastedilen dar kapsam tam olarak budur. Bu yazıdaki hukuki nitelendirmeler ve sözleşmeye ilişkin öneriler bilgilendirmedir, hukuki görüş değildir; kendi yükümlülüğünüzü kendi hukuk danışmanınızla değerlendirin.

3. Diskte şifreleme yok

Veritabanının tamamı üzerinde ölçtük: 23 Eylül 2026'da Rapitek CRM'in 6.412 veritabanı tablosunun hiçbiri veritabanı düzeyinde şifreli değildi ve diskte bir disk şifreleme katmanı yok. Yani veriniz ayrı bir veritabanında duruyor, ama düz metin olarak duruyor. Uygulama düzeyinde şifrelenen dar bir grup var; başlıcaları: e-posta hesabı OAuth jetonları; WhatsApp Business, Instagram ve Meta erişim jetonları ile webhook sırları; ödeme ve İYS sağlayıcı kimlik bilgileri; iki adımlı doğrulama sırları ve yedek kodları; ses izleri — bunlar veritabanına yazılmadan önce Fernet ile şifreleniyor. Parolalar ise geri çözülemeyen özet olarak saklanır. Bunun dışında "verileriniz şifreli saklanır" cümlesini yazamayız ve yazmıyoruz.

Bu sayıları neden yazıyoruz?

Üçü de aleyhimize. Yine de yazıyoruz, çünkü bu üç sınırı yazmayan bir sağlayıcının "verileriniz ayrı tutulur" cümlesi ile bizimki okur açısından ayırt edilemez hale gelir. Ayırt edilebilir olmasının tek yolu, cümlenin nerede bittiğini de söylemek.

Bunların bir kısmı kapatılabilir sınırlar: işletim günlüklerinin kiracı başına ayrılması ya da eski kayıtların silinmesi bir mühendislik işidir ve yapılabilir. Bir kısmı ise mimari tercihtir — kiracı başına ayrı sunucu, bugünkü fiyat ve işletim modelimizle uyuşmuyor. Hangisinin hangisi olduğunu şimdiden söylemek, sonradan "zaten öyleydi" demekten daha dürüst.

Alıcının yordamı

Sağlayıcınıza sorulacak beş soru

  1. 1

    Ayrım hangi katmanda kuruluyor?

    Üç cevaptan birini isteyin: paylaşılan tabloda kiracı sütunu, kiracı başına ayrı veritabanı, ya da kiracı başına ayrı kurulum. "Verileriniz ayrı tutulur" cevabı bu soruyu kapatmaz — üç mimariye de uyar.

  2. 2

    Ayrı veritabanı deniyorsa, sunucu da ayrı mı?

    Ayrı veritabanı ile ayrı sunucu aynı şey değildir. Aynı veritabanı sunucusunda duran ayrı veritabanları kaynak ve bakım penceresi bakımından ortak davranır. Cevap "aynı sunucu" ise bu bir kusur değil; yazılı olması yeter.

  3. 3

    İşletim günlükleri ve hata kayıtları hangi tarafta?

    Uygulama günlükleri, hata izleme kayıtları ve arka plan iş kayıtları CRM verisiyle aynı katmanda da durabilir, ayrı bir katmanda da; kategorik bir cevabı yok. Hangisi olduğunu yazılı isteyin. İçlerinde kullanıcı adresi, IP ve istek gövdesi bulunabilir; bu katman kiracı başına ayrılıyor mu, sorun.

  4. 4

    Sözleşme bittiğinde silme işlemi hangi katmanları kapsıyor?

    CRM veritabanının silinmesi, ortak katmandaki kayıtların da silindiği anlamına gelmez. Silmenin kapsamını katman katman yazılı isteyin: CRM kayıtları, yüklenen dosyalar, işletim günlükleri.

  5. 5

    Durağan şifreleme açık mı, neyi kapsıyor?

    "Verileriniz şifrelenir" cümlesi aktarımdaki şifrelemeyi de anlatabilir, diskteki şifrelemeyi de. İkisini ayrı ayrı sorun ve diskteki şifrelemenin hangi alanları kapsadığını isteyin.

Bizim sınırlarımız

Yukarıdaki soruları kendi kurulumumuza da sorduk. Bu yazının konusunda söyleyemediklerimiz şunlar.

  • Kiracıya bölge ya da ülke seçimi sunmuyoruz: kiracı kaydının 30 alanının hiçbirinde bölge ya da ülke alanı yok.
  • Platformun gönderdiği e-postalar ayrı bir gönderim servisinden (AWS SES) çıkıyor; 23 Eylül 2026 ölçümüne göre bu servis Frankfurt bölgesinde (AB) çalışıyor. Yine de bileşenlerin tamamı için tek bir konum cümlesi kurmuyoruz: trafik Cloudflare'in küresel ağından geçer, yapay zekâ özelliği açılırsa istek ABD'ye gider.
  • Ayrılan bir kiracının CRM veritabanına ne olduğunu ölçmedik. Silindiğini de, durduğunu da yazmıyoruz.
  • Denetim kaydımız "değiştirilemez" değil. Kayıt tablosu sıradan bir veritabanı tablosu: veritabanında doğrudan yapılan yazımlar denetim kaydına girmez ve ekibimiz, destek talebi üzerine bir CRM kaydına ait satırları bu tablodan silebilir; ürün içinde bunu yapan bir kullanıcı yolu yok.
  • Paylaşılan işletim günlüğü için yazılı bir saklama süresi politikamız yok; bu kararı henüz almadık.
  • ISO 27001 ya da SOC 2 sertifikamız yok ve alana kadar da iddia etmeyeceğiz.
  • Yazılı bir çalışma süresi (SLA) taahhüdü vermiyoruz; kiracı adreslerini dışarıdan izleyen bağımsız bir servis kurulu değil.

Sık sorulan sorular

Çok kiracılı (multi-tenant) mimari nedir?
Tek bir yazılım kurulumunun birden fazla müşteriye aynı anda hizmet vermesidir. Ayrım üç ayrı katmanda kurulabilir: paylaşılan tabloda bir kiracı sütunuyla, kiracı başına ayrı veritabanıyla ya da kiracı başına ayrı kurulumla. Üçü de "verileriniz ayrı tutulur" cümlesiyle anlatılabildiği için cümlenin kendisi hangi mimarinin kullanıldığını söylemez.
Rapitek CRM'de verilerim başka müşterilerin verisiyle aynı tabloda mı duruyor?
CRM kayıtlarınız için hayır: firma, kişi, fırsat, teklif ve yüklediğiniz dosyalar size ait ayrı bir veritabanında ve ayrı bir dosya alanında duruyor. Ölçtük: 24 kiracı, 24 ayrı veritabanı şeması. Uygulamanın kendi hata kayıtları için evet: paylaşılan tek bir tabloda 39.842 satır, 26 farklı kiracı, 26.357 kullanıcı e-posta adresi, 26.908 IP adresi ve 13.597 istek gövdesi ölçtük. 26 sayısı bugünkü 24 kiracıdan fazla, çünkü ayrılmış müşterilerin satırları da orada duruyor — ve o satırlar kişisel veri taşıyor: kullanıcı e-posta adresi, IP adresi ve istek gövdesi.
"Ayrı veritabanı" ile "ayrı sunucu" aynı şey mi?
Değil. Bizim kurulumumuzda kiracı veritabanlarının hepsi (23 Eylül 2026'da 25) aynı MySQL örneği üzerinde çalışıyor ve uygulama hepsine tek bir veritabanı hesabıyla bağlanıyor. Kiracıya özel sunucu, kiracıya özel donanım ya da kiracıya özel veritabanı parolası yok. Ayrım veritabanı düzeyinde gerçek; sunucu katmanı ortak ve orada olan bir olay bütün kiracıları aynı anda etkiler.
Verilerim sunucuda şifreli olarak mı saklanıyor?
Hayır. Ölçtük: 23 Eylül 2026'da Rapitek CRM'in 6.412 veritabanı tablosunun hiçbiri veritabanı düzeyinde şifreli değildi ve diskte bir disk şifreleme katmanı yok. Uygulama düzeyinde şifrelenen dar bir grup var; başlıcaları e-posta hesabı OAuth jetonları, WhatsApp Business/Instagram/Meta erişim jetonları ve webhook sırları, ödeme ve İYS sağlayıcı kimlik bilgileri, iki adımlı doğrulama sırları ve yedek kodları ile ses izleri — bunlar Fernet ile şifreleniyor. Parolalar ve API istemci sırları geri çözülemeyen özet olarak saklanır; kişi, e-posta ve mesaj içeriği gibi genel CRM verisi ise veritabanında düz metin olarak durur. Aktarımdaki şifreleme ayrı bir konudur ve onu diskteki şifrelemenin yerine saymıyoruz.
Verilerim hangi ülkede tutuluyor, bölge seçebilir miyim?
Ölçtüğümüz bileşenlerin konumu şöyle: uygulama ve CRM veritabanı Helsinki'de, yüklenen dosyalar Frankfurt'ta, veritabanı yedekleri Falkenstein'da, hata izleme ise Almanya'da — Sentry'nin şehir kırılımını ölçmedik. Ölçtüğümüz bileşenlerin hiçbiri Türkiye'de değil. Bir kalemi de eksiksiz yazalım: platformun gönderdiği e-postalar ayrı bir gönderim servisinden (AWS SES) çıkıyor ve 23 Eylül 2026 ölçümüne göre Frankfurt bölgesinde çalışıyor. Yine de "bütün bileşenler Avrupa Birliği içinde" diye tek bir cümle kurmuyoruz: trafik Cloudflare'in küresel ağından geçer, yapay zekâ özelliği açılırsa istek ABD'ye gider. Bölge seçimi de sunmuyoruz: kiracı kaydının 30 alanının hiçbirinde bölge ya da ülke alanı yok.
Bir müşterinin kullanıcısı başka bir müşterinin kayıtlarını görebilir mi?
CRM kayıtları tarafında bağlantı başka bir veritabanına açılır ve karşı tarafın tabloları o bağlantının veritabanında bulunmaz; uygulamada unutulan bir kiracı filtresi bu kurguda karşı tarafın kayıtlarını getirmez. Bu, sıfır riskli demek değildir: veritabanı sunucusu ve uygulama hesabı ortak olduğu için sınır kodun kendisinden tamamen bağımsız değildir. Sıfır riskli bir mimari olduğunu iddia etmiyoruz; iddia ettiğimiz şey verinin ayrı veritabanlarında durması. Hangi veritabanına bağlanılacağını uygulama kodu seçer; MySQL bu ayrımı kendi başına zorlamaz.
Bir sağlayıcının bu konuda söylediğini nasıl doğrularım?
Cevabı üç katmana bölerek isteyin: CRM kayıtları, yüklenen dosyalar ve işletim günlükleri. Her katman için tek soru yeter — bu katman kiracı başına ayrı mı, yoksa ortak mı? Cevaplar sözleşmeye ya da en azından bir e-postaya yazılsın. Tek başına "ayrı tutulur" üç mimarinin üçüne birden uyar ve sonradan kimin ne kastettiği tartışılamaz.
Bu ayrım kurulumda ne zaman netleşiyor?
Keşif görüşmesiyle başlıyoruz: hangi verinin ayrı veritabanında, hangisinin ortak katmanda duracağını ve kimlerin hangi kayıtları göreceğini birlikte çıkarıyoruz. Çıkan kapsam yazılı olur. Görüşmeden sonra size aralık değil tarih veririz.

İlgili içerikler

  • Güvenlik — barındırma, yedekleme ve erişim denetimi ölçümlerinin tamamı.
  • SaaS nedir — bir yazılımı kiralamanın veri tarafındaki karşılığı.
  • PaaS nedir — platform katmanının bir CRM alıcısını nerede ilgilendirdiği.
  • Rapitek CRM ürün sayfası — nesneler, yetkilendirme ve denetim kaydı.

Kendi kurulumunuzun katmanlarını ekranda birlikte geçelim

Rapitek CRM'i kuran ekip, Salesforce döneminde 200'den fazla kurumsal CRM projesi tamamladı. Ürün yeni, ekip değil: alanları, aşamaları ve raporları biz yapılandırıyoruz, verinizi biz aktarıyoruz, ekibinize Türkçe eğitimi biz veriyoruz.

Keşifte hangi verinin hangi katmanda duracağını katman katman çıkarırız.

Yazan

Kerim Yıldırım

Kurucu, Rapitek CRM · Salesforce döneminde 200'den fazla kurumsal CRM projesi

RapitekGO ile yapıldı

Ziyaretinizi ölçmek için isteğe bağlı çerez kullanmak istiyoruz. Reddederseniz site aynen çalışır. Çerez politikası