У вас є досить цікавий проект. Я ніколи прямо не бачив, щоб хтось намагався реалізувати щось таке велике, принаймні на SQL Server. Чим більше я читаю твій пост, тим більше питань виникає ...
Найгірший інфраструктурний сценарій (що насправді найкращий сценарій для бізнесу), вам потрібно 10К баз даних, що користуються 2 к. Користувачів. Це 20 000 000 користувачів. Ви не будете успішними у спробах керувати 20 M входами на SQL Server. ІМО. Якраз їхня кількість, що стосується переміщення їх з сервера на сервер, спостереження за зіткненнями ID та невідповідними ідентифікаторами, плюс я не впевнений, як би поводився SQL Server із 20-ми рядками в sys.server_principals. Крім того, ваш веб-додаток, ймовірно, захоче підключитися як окрема або дуже мала кількість користувачів. IIS не може з'єднати з'єднання, якщо їхні рядки DSN не однакові. Одним з атрибутів рядка DSN є ім'я користувача. Різні користувачі означають відсутність об'єднання.
Вам знадобиться розгорнути власну схему облікових даних користувачів. Потрібно мати можливість з'ясувати, до якого орендаря належить користувач, і тоді для вашого веб-коду потрібно буде вибрати належну базу даних. Ці метадані користувача є критичними, їх потрібно буде десь зберігати, їх потрібно буде кластеризувати або відобразити в дзеркалі, потрібно буде бути швидкими, і вони повинні бути добре захищені (з точки зору безпеки. IOW, зашифруйте його.). Якщо припустити, що SQL - це навіть гарна ідея, я б утримав цю базу даних від випадків, коли орендарі серверів. Це допомагає з точки зору безпеки та з точки зору навантаження, хоча я б здогадався, що після того, як користувачі перевіряються і веб-додаток керується правильною базою даних в іншому екземплярі, більше не буде запитів щодо цих метаданих користувачів, пов'язаних з цим. користувач.
Швидке запитання: чи слід дозволити двом різним користувачам, які належать до двох орендарів, мати одне ім’я користувача?
Ще одне швидке запитання: якщо я скажу вам, що працюю в FuBar, Inc., то як ви це знаєте? FuBar збирається надати вам список користувачів, а ви повернете їм список імен користувачів або вони збираються самостійно надавати?
Вам потрібно буде перейти в багато примірників. Якщо навіть частина цих користувачів вирішить потрапити на програму відразу, один екземпляр розтане. У ньому не буде достатньо робочих ниток, щоб одразу запустити всі ці запити. Якщо одночасно потрапляє лише 1000 користувачів, то, ймовірно, не вистачить робочих ниток, і запит почне складатись і чекати. Я бачив, як це відбувається; Найближчим симптомом є те, що нові з'єднання не зможуть увійти в екземпляр, оскільки немає доступних робочих потоків для їх обслуговування. Якщо це дуже короткотривала поведінка, ваш додаток може вижити. Якщо ні, або ваш додаток суєтний, користувачі отримають помилки.
Навіть якщо у вас не буде багато орендарів, ви повинні почати думати про майбутнє та автоматизацію, тому що, коли ви побачите, що ваш сервер завалений і з’являється 10 нових орендарів, щоб вивести в Інтернет, це вже дуже пізно і ваша послуга (і ваші клієнти та ваші найближчі колишні клієнти будуть страждати, поки ви не напишете вихід із проблеми.
Вам знадобиться спосіб переміщення баз даних, від перевантажених серверів до слабо завантажених (або нових) серверів. Від того, чи зможете ви отримати вільний час простою, буде залежати від вашої угоди про рівень обслуговування.
Ви надаєте конкретну програму, наприклад SalesForce, або ці бази даних є лише контейнерами для того, що хочуть розмістити ваші орендарі?
Наскільки великі бази даних? Якщо вони не дуже великі, ви можете просто відновити з файлу резервної копії, який надає шаблон. (Це не сильно відрізняється від того, що робить база даних моделей, але я ще не бачив, щоб хтось справді використовував модель по-хорошому з моїх днів з SQL 6.5.) Після відновлення шаблону до нового імені бази даних, ви могли б потім налаштуйте нову базу даних за потребою конкретного орендаря. Ви, очевидно, не можете виконати налаштування перед тим, як придбати орендаря. Якщо база даних велика, ви можете дотримуватися тієї ж основної процедури, за винятком того, як відновлення виконуєте достроково, перш ніж будь-який новий орендар потребує місця. Ви можете тримати кілька таких баз даних, можливо, одну на примірник. Якщо ви будете тримати занадто багато навколо, це змусить вас придбати більше обладнання та / або сховища, ніж вам потрібно,
Якщо це ваш власний додаток, як ви збираєтеся обробляти оновлення схем? Як ви збираєтеся підтримувати версії бази даних прямо з версіями коду, якщо ви використовуєте одну URL-адресу, яка потрапляє у ваш веб-додаток?
Як виявити та знищити бази даних, які вже не використовуються? Ви чекаєте, поки ваша група A / R скаже, що хтось не сплатив їх рахунок протягом трьох місяців?
Якщо орендарі керують дозволами, це означає, що вони мають певне розуміння внутрішнього функціонування програми або що ваша програма має дуже просту структуру ролей. Використовуючи щось на зразок Blogger як приблизний приклад, користувачі можуть (читати публікації), (читати публікації та робити коментарі), (... і створювати публікації), (... та редагувати публікації інших), (... та можуть скинути паролі інших користувачів) або (... і що завгодно). Визначення ролі для кожного з цих різних наборів прав та привласнення користувача до тієї чи іншої ролі не повинно бути надто важким, але ви не хочете, щоб ваш додаток працював із заявами "GRANT". Слідкуйте за ролями, які мають ієрархію і залежать від спадщини, це може стати заплутаним. Якщо ви рекламуєте або демонструєте користувача, я б сказав, витягніть їх із усіх пов’язаних ролей, а потім додайте їх до тієї ролі, яка їм потрібна. О,
Я думаю, що тут я лише подряпав поверхню, і ця посада вже занадто довга. Те, що вам справді потрібно, - це книга або хоча б довідка від того, хто це зробив. Більшість із цих хлопців не будуть розмовляти, якщо вони вважають це конкурентною перевагою.