Agregamos un inicio de sesión en el servidor y un usuario de la base de datos que asigna un grupo de Windows a una instancia de SQL 2008 R2 utilizando el siguiente script, con los nombres cambiados por 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
Cuando la cuenta DOMINIO \ Usuario1 inicia sesión en la aplicación, Usuario1 consulta las tablas en el esquema dbo bien porque Usuario1 es miembro de DOMAIN \ AppUsers, pero esta aplicación también permite al usuario crear tablas. Al crear estas tablas sin especificar un esquema , SQL Server hace lo siguiente:
- Crea un usuario 'DOMINIO \ Usuario1' en AppDb que utiliza un inicio de sesión 'DOMINIO \ Usuario1' que no figura en SSMS \ Seguridad \ Inicios de sesión para la instancia.
- Crea un esquema 'DOMINIO \ Usuario1' en AppDb.
- Crea esas tablas usando el nuevo esquema 'DOMINIO \ Usuario1'.
Estoy completamente desconcertado por estos resultados. Aquí están mis preguntas:
- Esperaría que la creación de la tabla fallara en lugar de crear objetos adicionales. ¿Alguien puede señalarme la parte de Books Online que explica esto?
- ¿Por qué el servidor no crea un esquema 'DOMINIO \ Usuarios de aplicaciones' y agrega las nuevas tablas a ese esquema si va a agregar esquemas?
- Además, ¿cómo utiliza la base de datos un inicio de sesión que no se muestra en SSMS \ Security \ Logins?
- Al mirar al usuario 'DOMINIO \ Usuario1' en SSMS \ Bases de datos \ AppDb \ Seguridad \ Usuarios, el icono del usuario tiene una pequeña flecha roja que apunta hacia abajo. Qué significa eso?
Recién estamos comenzando a usar la autenticación de Windows dentro de una organización que prefiere la autenticación de SQL por simplicidad, por lo que estoy seguro de que mi pregunta proviene de ignorar las diferencias. Este código se escribió mucho antes de considerar el uso de la autenticación de Windows, por lo que estoy seguro de que necesitamos mejorar nuestra comprensión de la creación de nuevos esquemas cuando inicie sesión con la autenticación de Windows como cualquier otra persona que no sea el propietario de la base de datos.
En caso de que no pueda saberlo, soy yo quien impulsa el uso de la Autenticación de Windows sobre la Autenticación de SQL. Si no llegamos a una comprensión sólida de esto, volveremos a la Autenticación SQL.