Ich habe eine gespeicherte Prozedur, die:
- prüft, ob eine Tabelle existiert und löscht sie, falls ja.
- erstellt diese Tabelle erneut
- dann füllt diese Tabelle mit etwa 30 Abfragen.
Wenn ich (DB-Besitzer) diesen Prozess ausführe, funktioniert alles wie beabsichtigt. Wenn mein Kollege dies tut, der über eine Rolle im Active Directory DROP / CREATE-Rechte für diese Datenbank hat, gehen verschiedene Dinge schief. Was mich verwirrt, ist Folgendes:
Bei der Erstellung der Tabelle wurde das dbo
Schema nicht explizit vor dem Namen angegeben. Dies führte dazu, dass eine Tabelle namens domain\cowork_id.table_name_here
table erstellt wurde. Abgesehen davon, dass diese Tabelle in seinem persönlichen Schema erstellt wurde, verfügt er jetzt auch über dieses Schema in der Datenbank (es existierte nicht vor dem Ausführen des Prozesses).
Was ist passiert? Warum erstellt SQL Server Tabellen im Benutzerschema anstatt in, dbo
wenn dies nicht angegeben ist?
quelle
Antworten:
In der Regel sollten Sie explizit angeben
dbo
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)Um das Problem zu beheben, weisen Sie das
dbo
Schema einfachdefault schema
allen Ihren Benutzer-Windows-Gruppen zu, oder schreiben Sie das Schema explizit, wenn Sie Objekte erstellen. Immer.quelle