En règle générale, vous devez spécifier explicitement ledbo
schéma si vous souhaitez créer l'objet dans ce schéma.
Comme vous êtes db_owner
, votre schéma par défaut est dbo
, donc il n'y a aucun problème lorsque vous ne spécifiez pas le schéma dbo lors de la création d'objets. Mais pour les autres utilisateurs (Windows), ce n'est pas pareil.
Vos utilisateurs en sont membres Windows group
et n'ont pas de schéma par défaut. Dans ce cas, l'utilisateur correspondant et le schéma sont créés lorsque l'utilisateur crée un objet, c'est documenté ici: CREATE SCHEMA (Transact-SQL)
Schéma implicite et création d'utilisateurs
Dans certains cas, un utilisateur peut utiliser une base de données sans avoir de compte d'utilisateur de base de données (un principal de base de données dans la base de données). Cela peut se produire dans les situations suivantes:
Une connexion dispose des privilèges CONTROL SERVER.
Un utilisateur Windows n'a pas de compte d'utilisateur de base de données individuel (un principal de base de données dans la base de données), mais accède à une base de données en tant que membre d'un groupe Windows qui possède un compte d'utilisateur de base de données (un principal de base de données pour le groupe Windows).
Lorsqu'un utilisateur sans compte d'utilisateur de base de données crée un objet sans spécifier de schéma existant, un principal de base de données et un schéma par défaut sont automatiquement créés dans la base de données pour cet utilisateur. Le principal et le schéma de base de données créés auront le même nom que le nom utilisé par l'utilisateur lors de la connexion à SQL Server (le nom de connexion d'authentification SQL Server ou le nom d'utilisateur Windows).
Ce comportement est nécessaire pour permettre aux utilisateurs basés sur des groupes Windows de créer et de posséder des objets. Cependant, cela peut entraîner la création involontaire de schémas et d'utilisateurs. Pour éviter de créer implicitement des utilisateurs et des schémas, dans la mesure du possible, créez explicitement des principaux de base de données et attribuez un schéma par défaut. Ou indiquez explicitement un schéma existant lors de la création d'objets dans une base de données, en utilisant des noms d'objets en deux ou trois parties.
Pour résoudre le problème, attribuez simplement le dbo
schéma default schema
à tous vos groupes utilisateurs-Windows ou écrivez le schéma de manière explicite lors de la création d'objets. Toujours.