Der Datenbankprinzipal besitzt ein Schema in der Datenbank und kann keine Nachricht löschen

28

Ich versuche, einen Principal aus der Datenbank zu löschen, kann dies jedoch nicht, da er ein Schema besitzt. Wenn ich den Benutzer bearbeite, ist das Kontrollkästchen zum Deaktivieren des Schemas jedoch blau und nicht entfernbar. Wie kann ich den Principal aus diesen Schemata entfernen?

rsteckly
quelle

Antworten:

31

Probieren Sie dazu T-SQL aus:

alter authorization
on schema::YourSchemaName
to dbo
go

drop user TheUserYouWantToDelete
go

Sie können kein Haupt löschen , die ein Schemabesitzer ist, so das ALTER AUTHORZATIONdie im Besitz Schemaänderungen (I verwendet YourSchemaName, aber offensichtlich , dass in Ihrer Datenbank mit dem Besitz Schema ersetzen) zu dbo(ebenfalls, Sie Eigentum, was auch immer Haupt ändern können , müssen Sie Ihre Umgebung). Auf diese Weise können Sie den Benutzer löschen, der zuvor das Schema besaß (zum Beispiel zu den von mir verwendeten Zwecken TheUserYouWantToDelete, aber dies ist der Nicht-Eigentümer, den Sie löschen möchten).

Thomas Stringer
quelle
Okay, das hat funktioniert. Ich bin jedoch ein wenig verwirrt, warum. Warum muss ich das Schema für ein anderes Schema autorisieren? Vielleicht muss ich die Schemata überprüfen ...
rsteckly
1
@rsteckly Vereinfacht, Autorisierung = Eigentum. Wenn Sie den Benutzer löschen könnten, dem das Schema gehört, wäre das Schema nicht gültig, da der Eigentümer nicht mehr vorhanden ist. Stellen Sie sich vor, Sie könnten einen Kunden löschen, der eine Bestellung aufgegeben hat. Was bedeutet die CustomerID in der Orders-Tabelle, wenn es keinen Kunden mehr gibt, auf den sie verweist? Wohin soll ich die Bestellung schicken?
Aaron Bertrand
Entschuldigung, mein Beispiel wurde nicht gut erklärt. Wir ändern nicht die Berechtigung für das dboSchema, sondern die Berechtigung für den dboPrincipal. Das könnte ein beliebiger Datenbankprinzipal sein.
Thomas Stringer
30

Der T-SQL-Weg funktioniert. Dank http://zarez.net/?p=179 habe ich den SSMS-Weg gefunden, um dies zu tun (UI).

So ändern Sie den Schemabesitzer in SQL Server Management Studio:

Expand your database -> Security -> Schemas

In den Details des Objekt-Explorers sehen Sie eine Liste der Schemas und der Eigentümer:

Bildbeschreibung hier eingeben

Wenn Sie nicht wissen, welche Schemas der Benutzer besitzt, überprüfen Sie die Eigenschaften des Benutzers.

Bildbeschreibung hier eingeben

Öffnen Sie die Eigenschaften des Schemas, dessen Eigentümer der Benutzer ist, und klicken Sie auf "Suchen", um einen neuen Eigentümer zu finden. Wenn Sie den neuen Besitzer nicht kennen, können Sie nach einem suchen.

Properites -> Search -> Browse

und Sie können den Schemabesitzer in dbo ändern (oder den am besten geeigneten).

Bildbeschreibung hier eingeben

woodvi
quelle
1
T-SQL ist viel besser und flexibler. Es hat (ist) immer weh, es über die GUI zu tun!
Kin Shah
Ich bin alles für T-SQL, auch weil es in Skripten verwendet werden kann.
Woodvi
2
Hinweis: F7 ist die Abkürzung zum Anzeigen von Details, wenn diese nicht
angezeigt