Como regla general, debe especificar explícitamente eldbo
esquema si desea crear el objeto en este esquema.
Tal como está db_owner
, su esquema predeterminado es dbo
, por lo que no hay ningún problema cuando no especifica el esquema dbo al crear objetos. Pero para otros usuarios (Windows) no es lo mismo.
Sus usuarios son miembros Windows group
que no tienen un esquema predeterminado. En este caso, el usuario correspondiente y el esquema se crean cuando el usuario crea cualquier objeto, se documenta aquí: CREATE SCHEMA (Transact-SQL)
Esquema implícito y creación de usuarios
En algunos casos, un usuario puede usar una base de datos sin tener una cuenta de usuario de la base de datos (un principal de la base de datos en la base de datos). Esto puede suceder en las siguientes situaciones:
Un inicio de sesión tiene privilegios de SERVIDOR DE CONTROL.
Un usuario de Windows no tiene una cuenta de usuario de base de datos individual (un principal de base de datos en la base de datos), pero accede a una base de datos como miembro de un grupo de Windows que tiene una cuenta de usuario de base de datos (un principal de base de datos para el grupo de Windows).
Cuando un usuario sin una cuenta de usuario de base de datos crea un objeto sin especificar un esquema existente, se creará automáticamente un esquema principal y predeterminado de la base de datos en la base de datos para ese usuario. El principal y el esquema de la base de datos creada tendrán el mismo nombre que el usuario que usó al conectarse a SQL Server (el nombre de inicio de sesión de autenticación de SQL Server o el nombre de usuario de Windows).
Este comportamiento es necesario para permitir a los usuarios que se basan en grupos de Windows crear y poseer objetos. Sin embargo, puede dar lugar a la creación involuntaria de esquemas y usuarios. Para evitar la creación implícita de usuarios y esquemas, siempre que sea posible, cree explícitamente los principales de la base de datos y asigne un esquema predeterminado. O indique explícitamente un esquema existente al crear objetos en una base de datos, utilizando nombres de objetos de dos o tres partes.
Para resolver el problema, simplemente asigne un dbo
esquema default schema
a todos sus grupos de usuarios-Windows o escriba el esquema explícitamente al crear objetos. Siempre.