In der Regel sollten Sie explizit angebendbo
Schema wenn Sie das Objekt in diesem Schema erstellen möchten.
Wie Sie sind db_owner
, ist Ihr Standardschemadbo
, so ist es kein Problem , wenn Sie Objekte nicht dbo - Schema geben Sie bei der Erstellung. Für andere (Windows-) Benutzer ist dies jedoch nicht dasselbe.
Ihre Benutzer sind Mitglieder, für Windows group
die es kein Standardschema gibt. In diesem Fall werden der entsprechende Benutzer und das Schema erstellt, wenn der Benutzer ein Objekt erstellt. Die Dokumentation finden Sie hier: CREATE SCHEMA (Transact-SQL)
Implizites Schema und Benutzererstellung
In einigen Fällen kann ein Benutzer eine Datenbank verwenden, ohne über ein Datenbankbenutzerkonto zu verfügen (ein Datenbankprinzipal in der Datenbank). Dies kann in folgenden Situationen passieren:
Ein Login hat CONTROL SERVER-Berechtigungen.
Ein Windows-Benutzer verfügt nicht über ein einzelnes Datenbankbenutzerkonto (ein Datenbankprinzipal in der Datenbank), sondern greift auf eine Datenbank als Mitglied einer Windows-Gruppe zu, die über ein Datenbankbenutzerkonto (ein Datenbankprinzipal für die Windows-Gruppe) verfügt.
Wenn ein Benutzer ohne Datenbankbenutzerkonto ein Objekt erstellt, ohne ein vorhandenes Schema anzugeben, werden automatisch ein Datenbankprinzipal und ein Standardschema für diesen Benutzer in der Datenbank erstellt. Der erstellte Datenbankprinzipal und das erstellte Schema haben denselben Namen wie der Name, den der Benutzer beim Herstellen einer Verbindung mit SQL Server verwendet hat (der Anmeldename für die SQL Server-Authentifizierung oder der Windows-Benutzername).
Dieses Verhalten ist erforderlich, damit Benutzer, die auf Windows-Gruppen basieren, Objekte erstellen und besitzen können. Dies kann jedoch zur unbeabsichtigten Erstellung von Schemas und Benutzern führen. Um das implizite Erstellen von Benutzern und Schemas zu vermeiden, erstellen Sie nach Möglichkeit explizit Datenbank-Principals und weisen Sie ein Standardschema zu. Oder geben Sie explizit ein vorhandenes Schema an, wenn Sie Objekte in einer Datenbank mit zwei- oder dreiteiligen Objektnamen erstellen.
Um das Problem zu beheben, weisen Sie das dbo
Schema einfach default schema
allen Ihren Benutzer-Windows-Gruppen zu, oder schreiben Sie das Schema explizit, wenn Sie Objekte erstellen. Immer.