Dodaliśmy login serwera i użytkownika bazy danych, który mapuje grupę Windows na instancję SQL 2008 R2 przy użyciu następującego skryptu, ze zmienionymi nazwami dla anonimowości:
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
Gdy konto DOMAIN \ Użytkownik1 loguje się do aplikacji, Użytkownik1 dobrze sprawdza zapytania w tabelach w schemacie dbo, ponieważ Użytkownik1 jest członkiem DOMAIN \ AppUsers, ale ta aplikacja umożliwia również tworzenie tabel. Podczas tworzenia tych tabel bez określania schematu SQL Server wykonuje następujące czynności:
- Tworzy użytkownika „DOMAIN \ Użytkownik1” w AppDb, który korzysta z loginu „DOMAIN \ Użytkownik1” niewymienionego w SSMS \ Security \ Logins dla instancji.
- Tworzy schemat „DOMAIN \ Użytkownik1” w AppDb.
- Tworzy te tabele, używając nowego schematu „DOMAIN \ Użytkownik1”.
Jestem całkowicie zaskoczony tymi wynikami. Oto moje pytania:
- Spodziewałbym się, że tworzenie tabeli zakończy się niepowodzeniem, niż tworzenie dodatkowych obiektów. Czy ktoś może wskazać mi część Books Online, która to wyjaśnia?
- Dlaczego serwer nie tworzy schematu „DOMAIN \ AppUsers” i nie dodaje nowych tabel do tego schematu, jeśli zamierza dodać schematy?
- Ponadto, w jaki sposób baza danych używa danych logowania niewidocznych w SSMS \ Security \ Logins?
- Patrząc na użytkownika „DOMAIN \ Użytkownik1” w SSMS \ Databases \ AppDb \ Security \ Users, ikona użytkownika ma małą czerwoną strzałkę skierowaną w dół. Co to znaczy?
Właśnie zaczynamy używać Uwierzytelniania Windows w organizacji, która preferowała Uwierzytelnianie SQL dla uproszczenia, więc jestem pewien, że moje pytanie wynika z niewiedzy o różnicach. Ten kod został napisany na długo przed rozważeniem użycia uwierzytelniania systemu Windows, więc jestem pewien, że musimy lepiej zrozumieć tworzenie nowych schematów po zalogowaniu się przy użyciu uwierzytelniania systemu Windows, jak każdy inny niż właściciel bazy danych.
W przypadku, gdy nie możesz powiedzieć, to ja nalegam na użycie uwierzytelnienia systemu Windows zamiast uwierzytelnienia SQL. Jeśli nie zrozumiemy tego dobrze, wrócimy do uwierzytelniania SQL.