Як мій колега отримав власну схему?


14

У мене зберігається процедура, яка:

  • перевіряє, чи існує таблиця, і якщо так, випадає.
  • створює цю таблицю знову
  • потім заповнює цю таблицю приблизно 30 запитами.

Коли я (власник БД) запускаю цю програму, все працює за призначенням. Коли це робить мій колега, який має права DROP / CREATE на цій базі даних через роль в Active Directory, деякі речі йдуть не так. Що морочить мою думку, це:

Створення таблиці не мала dboсхеми, прямо вказаної перед назвою. Це призвело до створення таблиці під назвою domain\cowork_id.table_name_hereтаблиця. Крім того, що таблиця створюється в його особистої схемі, тепер у нього також є така схема в базі даних (вона не існувала до запуску proc).

Що трапилось? Чому SQL Server створює таблиці в схемі користувача замість в, dboколи це не вказано?


Відповіді:


26

Як правило, вам слід чітко вказати dboсхему, якщо ви хочете створити об'єкт у цій схемі.

Як ви є db_owner, ваша схема за замовчуванням є dbo, тому немає проблеми, коли ви не вказуєте dbo-схему під час створення об’єктів. Але для інших користувачів Windows це не те саме.

Ваші користувачі є членами програми, Windows groupяка не має схеми за замовчуванням. У цьому випадку відповідний користувач та схема створюються, коли користувач створює будь-який об’єкт, це документується тут: CREATE SCHEMA (Transact-SQL)

Неявна схема та створення користувачів

У деяких випадках користувач може використовувати базу даних, не маючи облікового запису користувача (основна база даних в базі даних). Це може статися в таких ситуаціях:

Логін має привілеї CONTROL SERVER.

Користувач Windows не має індивідуального облікового запису користувача (основна база даних у базі даних), але він отримує доступ до бази даних як член групи Windows, яка має обліковий запис користувача бази даних (головна база даних для групи Windows).

Коли користувач без облікового запису бази даних створює об'єкт, не вказуючи існуючу схему, головна база даних і схема за замовчуванням автоматично буде створена в базі даних для цього користувача. Основа та схема створених баз даних матимуть те саме ім’я, що і ім’я, яке користувач використовував під час підключення до SQL Server (ім'я для входу в систему автентифікації SQL Server або ім’я користувача Windows).

Така поведінка необхідна для того, щоб дозволити користувачам, які базуються на групах Windows, створювати та володіти об’єктами. Однак це може призвести до ненавмисного створення схем і користувачів. Щоб уникнути неявного створення користувачів та схем, коли це можливо, явно створюйте принципи бази даних та призначайте схему за замовчуванням. Або явно вказати існуючу схему під час створення об'єктів у базі даних, використовуючи імена двох або трьох частин.

Щоб вирішити проблему, просто призначте dboсхему default schemaдля всіх ваших користувачів-груп Windows або напишіть схему чітко під час створення об’єктів. Завжди.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.