Çok kiracılı DB'lerin birden fazla veritabanı veya paylaşılan tabloları var mı?


24

Çok kiracılı bir veritabanıdır:

  • Her müşteri / kiracı için farklı (özdeş) veritabanı / şemaya sahip bir DB sunucusu ?; veya
  • Müşterilerin / kiracıların aynı tablodaki kayıtları paylaştığı bir veritabanı / şemaya sahip bir DB sunucusu mu?

Örneğin, yukarıda Seçenek # 1 altında, mesela bir MySQL sunucum mydb01.example.comolabilir ve bunun customer1içinde bir veritabanı olabilir . Bu customer1veritabanı, söz konusu müşteri için başvurumu güçlendiren 10 tabloya sahip olabilir (Müşteri 1). Ayrıca customer2içinde aynı 10 tablo bulunan bir veritabanına sahip olabilir , ancak yalnızca Müşteri # 2 için veri içeriyor. Bir customer3veritabanına, bir customer4veritabanına ve benzerlerine sahip olabilir.

Yukarıdaki Seçenek # 2'de myapp_db, yine içinde sadece 10 tablo bulunan tek bir veri tabanı / şeması olacaktır (yukarıdakiyle aynı olanlar). Ancak burada, tüm müşterilerin verileri bu 10 tablonun içinde var ve bu nedenle tabloları "paylaşıyor". Ve uygulama katmanında, müşterilerin bu 10 tabloda hangi kayıtlara erişebildiklerini ve Müşteri # 1'in hiçbir zaman uygulamaya girmemesini ve Müşteri # 3'ün verilerini görmesini vb.

Bu paradigmalardan hangisi geleneksel "çok kiracılı" bir DB oluşturur? Ve eğer ikisi de değilse, birisi bana çok kiracılı bir DB'nin ne olduğuna dair bir örnek verebilir (yukarıda açıklanan senaryoları kullanarak)?


"çok kiracı" güçlü bir güvenlik anlamına gelir - bir yere uygulanır - böylece bir kiracı diğerinin verilerini göremez, değiştiremez, erişime izin veremez. vb. Güvenlik bir şekilde uygulanmalıdır. OP'nin # 1 ve 2 numaralı seçenekleri hem çalışır, ancak güvenlik analizi ve güvenliği uygulamak için gereken çalışma farklıdır. Buna değer olarak, # 2 seçeneği ile çoklu kiracılık uygulayan bir başlangıçta çalıştım; burada birden fazla kiracıya ait sıralar içeren tablolar tüm izinlerden gizlenmiş (izinler yoluyla) ve güvenlik tamamen saklı prosedürlerde uygulandı.
davidbak


1
Bunun bir kopya olarak kapanmasıyla sona ererse, her ikisinin de gerçekten iyi cevapları olduğu için onu dupe hedefiyle birleştirmek için bayrak koymamız gerektiğini düşünüyorum.

Yanıtlar:


29

Bu paradigmalardan hangisi geleneksel "çok kiracılı" bir DB oluşturur

Her iki kavram da çoklu kiracılık olarak adlandırılır, çünkü sadece "tek bir yazılım örneğinin sunucuda çalıştığı ve birden fazla kiracıya hizmet verdiği" ( Wikipedia'dan ) mantıklı bir kavramdır . Fakat bu kavramı “fiziksel olarak” nasıl uyguladığınız size kalmış.

Elbette, uygulamanın farklı kiracıların verilerini ayırmaya izin veren bir veritabanı konseptine ihtiyacı vardır ve çoklu kiracılık fikri, kaynakların daha iyi kullanılması ve daha kolay yönetim için bazı sunucu kaynaklarının paylaşılmasını (en azından donanım) sağlamaktır. Dolayısıyla, "çoklu kiracı DB", db modelinin veya tablolarının parçalarının paylaşıldığı, bunu doğrudan destekleyen kişidir .

Kesin olmak gerekirse, müşteri başına bireysel bir DB örneği sağlayan çok kiracılı olmayan bir DB içeren çok kiracılı bir uygulama oluşturmak mümkündür. Ancak, bu herhangi bir DB kaynağını doğrudan kiracılar arasında paylaşmayı engeller ve uygulama katmanı doğru kiracı doğru veritabanına bağladığından emin olmak zorundadır.


Thanks @Doc Brown (+1) ama o zaman, nasıl çok kiracı olmayan herhangi bir veritabanına sahip olabilirsiniz ?!?
smeeb

4
@smeeb: Çok kiracılık, uygulamanın "arkasındaki" veritabanından değil, farklı kiracılar tarafından kullanılan uygulamanın bir özelliğidir. Tabii ki, db konseptinin bunu mümkün kılmak için çoklu kiracılıkları desteklemesi gerekiyor.
Doktor Brown

4
@smeeb: Kullanıcı adının benzersiz olduğu konusunda kısıtlı bir Kullanıcı tablonuz olduğunu varsayalım. Artık bir kiracının bir çalışanı, başka bir kiracıda çalışan başka biri zaten kullandığı için artık bir kullanıcı adı kullanamaz.
RemcoGerlich

5
@smeeb: İki kiracıya hizmet etmenin tek yolu bir uygulamayı iki kez, iki ayrı sunucuya, iki ayrı veritabanına sahip bir uygulamayı yüklemek ve çalıştırmaksa, birinin bu çoklu kiracılık olarak adlandırılmayacağını düşünüyorum.
Doktor Brown

1
Bir süre önce Azure'daki bir sunuma gittim, bu da MYOB'un bulut çözümünü Azure'da çalıştırdığını söylüyordu ve her kiracı kendi DB'sini (ve muhtemelen web sunucularını da) alıyor; Sadece gereken yüzlerce DB örneğini yönetmek için harika otomasyon araçlarına sahipler. Öte yandan, şu anda çalıştığım organizasyon yüzlerce müşteriyi tek bir veri tabanından kullanıyor, yazılımda müşteri verilerinin izole edilmesini sağlamak için oldukça fazla çalışma var. Ayrıca, en büyük müşterilerimizin kendi veritabanlarını alabilecekleri bir melez olarak kabul ettik, diğerleri de orijinalini paylaştı.
David Keaveny

36

Microsoft’a göre, terimin 3 potansiyel anlamı vardır (tüm kiracılar için bir veritabanı veya kiracı başına bir veritabanı).

Örneğinizi kullanmak için, her müşteri kendi kiracısı olacaktır.

  1. Kiracı başına bir veritabanı (müşteri)

    • Her bir kiracı diğerlerinden izole edilmiştir (diğer kiracıların verilerine yanlışlıkla erişim yoktur)
    • Bu yalıtım aynı zamanda verilerin geri yüklenmesini yönetmeyi ve kiracıların ihtiyaçları için depolama gereksinimlerini uyarlamayı kolaylaştırır.
  2. Paylaşılan bir veritabanı, ayrı bir şema.

    • Her kiracı kendi şemasına sahiptir ve verileri kendi tablolarındadır.
    • Geri yükleme daha fazla zaman alabilir, çünkü herkes aynı veritabanında olduğundan, veritabanını daha önceki bir yedeklemeye geri yükleyemezsiniz (her kiracının verilerini geri alır). Bir seçenek, yeni bir veritabanına geri yüklemek ve ardından yalnızca 1 kiracının verilerini birleştirmek / kopyalamaktır.
  3. Paylaşılan bir veritabanı, paylaşılan şema.

    • Her kiracının verileri aynı tablolardadır. Örneğin, siparişleri izlerseniz, her kiracının siparişleri "dbo.Orders" da bulunur.
    • Kiracıların verileri, her bir tabloda (Kiracıd olabilir) satırın sahibini gösteren bir sütunla ayrılır.

Bu makalede iyi açıklanan her biri için artıları ve eksileri var: https://msdn.microsoft.com/en-us/library/aa479086.aspx

Bonus: Bunu yaşam mahalleri olarak düşünebilirsiniz (fena halde sadeleştirilmiş).

  1. Her kiracının kendi evi vardır. Ne isterlerse yapabilirler ve eğer yanarsa başkasını etkilemez.

  2. Her kiracı aynı binadadır, ancak kendi dairesi vardır.

  3. Herkes aynı dairede yaşıyor ve ona ait olanı göstermek için her şey yapışkan bir notla işaretlenmiş.


2
Cevabınız için teşekkür ederim. Lütfen cevabınızı biraz detaylandırabilir misiniz? Bu daha iyi bir cevap oluşturur.
Thomas Junk

1
Bonus örneği müthiş @ imms90 olduğunu
Aravin

3
Microsoft, MSDN’den bağladığınız sayfayı bıraktı. Wayback makinesi hala bir kopyası var.
Mike Sherrill 'Kedi Hatırlama'

1
MS'ten benzer bir makale (belki de aynı şey taşınmış): docs.microsoft.com/en-us/azure/sql-database/…
Pierre Henry
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.