Мы добавили имя пользователя сервера и базы данных, которые сопоставляют группу Windows с экземпляром SQL 2008 R2 с помощью следующего сценария, имена которого изменены для анонимности:
USE master
go
CREATE LOGIN [DOMAIN\AppUsers] FROM WINDOWS
WITH DEFAULT_DATABASE=[master], DEFAULT_LANGUAGE=[us_english]
go
USE AppDb
go
CREATE USER [DOMAIN\AppUsers] FOR LOGIN
[DOMAIN\AppUsers]
go
EXEC sp_addrolemember N'db_owner', N'DOMAIN\AppUsers'
go
Когда учетная запись DOMAIN \ User1 входит в приложение, User1 отлично выполняет запросы к таблицам в схеме dbo, поскольку User1 является членом DOMAIN \ AppUsers, но это приложение также позволяет пользователю создавать таблицы. При создании этих таблиц без указания схемы SQL Server выполняет следующие действия:
- Создает пользователя «DOMAIN \ User1» в AppDb, который использует имя входа «DOMAIN \ User1», не указанное в SSMS \ Security \ Logins для экземпляра.
- Создает схему 'DOMAIN \ User1' в AppDb.
- Создает эти таблицы, используя новую схему DOMAIN \ User1.
Я полностью сбит с толку этими результатами. Вот мои вопросы:
- Я ожидаю, что создание таблицы не удастся, а создаст дополнительные объекты. Может кто-нибудь указать мне на ту часть Books Online, которая объясняет это?
- Почему сервер не создает схему 'DOMAIN \ AppUsers' и не добавляет новые таблицы в эту схему, если собирается добавить схемы?
- Кроме того, как база данных использует имя входа, не показанное в SSMS \ Security \ Logins?
- Если посмотреть на пользователя 'DOMAIN \ User1' в SSMS \ Databases \ AppDb \ Security \ Users, значок пользователя имеет небольшую красную стрелку, указывающую вниз. Что это обозначает?
Мы только начинаем использовать проверку подлинности Windows в организации, которая для простоты предпочла проверку подлинности SQL, поэтому я уверен, что мой вопрос заключается в том, что я не знаю о различиях. Этот код был написан задолго до того, как мы рассмотрели вопрос об использовании проверки подлинности Windows, поэтому я уверен, что нам нужно улучшить понимание создания новых схем при входе в систему с использованием проверки подлинности Windows от имени любого другого лица, кроме владельца базы данных.
В случае, если вы не можете сказать, я настаиваю на использовании проверки подлинности Windows поверх проверки подлинности SQL. Если мы не получим четкого понимания этого, мы вернемся к SQL-аутентификации.