Adicionamos um usuário de logon e banco de dados do servidor que mapeia um Grupo do Windows para uma instância do SQL 2008 R2 usando o seguinte script, com os nomes alterados para anonimato:
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
Quando a conta DOMAIN \ User1 faz login no aplicativo, o Usuário1 consulta as tabelas no esquema dbo muito bem porque o Usuário1 é membro de DOMAIN \ AppUsers, mas esse aplicativo permite que o usuário crie tabelas também. Ao criar essas tabelas sem especificar um esquema , o SQL Server faz o seguinte:
- Cria um usuário 'DOMAIN \ User1' no AppDb que usa um logon 'DOMAIN \ User1' não listado em SSMS \ Security \ Logins da instância.
- Cria um esquema 'DOMAIN \ User1' no AppDb.
- Cria essas tabelas usando o novo esquema 'DOMAIN \ User1'.
Estou completamente perplexo com esses resultados. Aqui estão as minhas perguntas:
- Eu esperaria que a criação da tabela falhasse ao invés de criar objetos adicionais. Alguém pode me indicar a parte do Books Online que explica isso?
- Por que o servidor não cria um esquema 'DOMAIN \ AppUsers' e adiciona as novas tabelas a esse esquema se ele deseja adicionar esquemas?
- Além disso, como o banco de dados usa um logon não mostrado em SSMS \ Security \ Logins?
- Observando o usuário 'DOMAIN \ User1' em SSMS \ Databases \ AppDb \ Security \ Users, o ícone do usuário tem uma pequena seta vermelha apontando para baixo. O que isso significa?
Estamos apenas começando a usar a Autenticação do Windows em uma organização que prefere a Autenticação SQL por simplicidade, por isso estou certo de que minha pergunta vem do fato de ignorarmos as diferenças. Esse código foi escrito muito antes de considerarmos o uso da autenticação do Windows; portanto, precisamos melhorar nosso entendimento sobre a criação de novos esquemas ao fazer logon usando a autenticação do Windows como qualquer outra pessoa que não seja o proprietário do banco de dados.
Caso você não saiba, sou eu que pressiono pelo uso da autenticação do Windows pela autenticação do SQL. Se não chegarmos a um entendimento sólido disso, voltaremos à Autenticação SQL.