ALTER AUTHORIZATION (Transact-SQL)

Gilt für:SQL ServerAzure SQL-DatenbankVerwaltete Azure SQL-InstanzAzure Synapse AnalyticsAnalytics Platform System (PDW)SQL-Analyseendpunkt in Microsoft FabricLagerhaus in Microsoft FabricSQL-Datenbank in Microsoft Fabric

Ändert den Besitz eines sicherungsfähigen Elements.

Transact-SQL-Syntaxkonventionen

Note

Microsoft Entra ID war zuvor als Azure Active Directory (Azure AD) bekannt.

Syntax

-- Syntax for SQL Server
ALTER AUTHORIZATION
    ON [ <class_type>:: ] entity_name
    TO { principal_name | SCHEMA OWNER }
    [;]

<class_type> ::=
     {
      OBJECT | ASSEMBLY | ASYMMETRIC KEY | AVAILABILITY GROUP | CERTIFICATE
    | CONTRACT | TYPE | DATABASE | ENDPOINT | FULLTEXT CATALOG
    | FULLTEXT STOPLIST | MESSAGE TYPE | REMOTE SERVICE BINDING
    | ROLE | ROUTE | SCHEMA | SEARCH PROPERTY LIST | SERVER ROLE
    | SERVICE | SYMMETRIC KEY | XML SCHEMA COLLECTION
     }
-- Syntax for SQL Database

ALTER AUTHORIZATION
    ON [ <class_type>:: ] entity_name
    TO { principal_name | SCHEMA OWNER }
    [;]

<class_type> ::=
     {
    OBJECT | ASSEMBLY | ASYMMETRIC KEY | CERTIFICATE
     | TYPE | DATABASE | FULLTEXT CATALOG
     | FULLTEXT STOPLIST
     | ROLE | SCHEMA | SEARCH PROPERTY LIST
     | SYMMETRIC KEY | XML SCHEMA COLLECTION
     }
-- Syntax for Azure Synapse Analytics and Microsoft Fabric

ALTER AUTHORIZATION ON
     [ <class_type> :: ] <entity_name>
     TO { principal_name | SCHEMA OWNER }
    [;]

    <class_type> ::= {
    SCHEMA
     | OBJECT
    }

    <entity_name> ::=
    {
    schema_name
     | [ schema_name. ] object_name
    }
-- Syntax for Parallel Data Warehouse

ALTER AUTHORIZATION ON
     [ <class_type> :: ] <entity_name>
     TO { principal_name | SCHEMA OWNER }
    [;]

<class_type> ::= {
    DATABASE
     | SCHEMA
     | OBJECT
    }

<entity_name> ::=
    {
    database_name
     | schema_name
     | [ schema_name. ] object_name
    }

Note

Diese Syntax wird vom serverlosen SQL-Pool in Azure Synapse Analytics nicht unterstützt.

Arguments

<class_type> ist die sicherungsfähige Klasse der Entität, für die der Besitzer geändert wird. OBJECT ist der Standardwert.

Class Product
OBJECT Gilt für: SQL Server 2008 (10.0.x) und höher, Azure SQL-Datenbank, Azure Synapse Analytics, Analytics Platform System (PDW)
ASSEMBLY Gilt für: SQL Server 2008 (10.0.x) und höher, Azure SQL-Datenbank
ASYMMETRIC KEY Gilt für: SQL Server 2008 (10.0.x) und höher, Azure SQL-Datenbank
AVAILABILITY GROUP Gilt für: SQL Server 2012 und höher
CERTIFICATE Gilt für: SQL Server 2008 (10.0.x) und höher, Azure SQL-Datenbank
CONTRACT Gilt für: SQL Server 2008 (10.0.x) und höher
DATABASE Gilt für: SQL Server 2008 (10.0.x) und höher, Azure SQL-Datenbank Für weitere Informationen siehe ALTER AUTHORIZATION Datenbanken.
ENDPOINT Gilt für: SQL Server 2008 (10.0.x) und höher
FULLTEXT CATALOG Gilt für: SQL Server 2008 (10.0.x) und höher, Azure SQL-Datenbank
FULLTEXT STOPLIST Gilt für: SQL Server 2008 (10.0.x) und höher, Azure SQL-Datenbank
MESSAGE TYPE Gilt für: SQL Server 2008 (10.0.x) und höher
REMOTE SERVICE BINDING Gilt für: SQL Server 2008 (10.0.x) und höher
ROLE Gilt für: SQL Server 2008 (10.0.x) und höher, Azure SQL-Datenbank
ROUTE Gilt für: SQL Server 2008 (10.0.x) und höher
SCHEMA Gilt für: SQL Server 2008 (10.0.x) und höher, Azure SQL-Datenbank, Azure Synapse Analytics, Analytics Platform System (PDW)
SEARCH PROPERTY LIST Gilt für: SQL Server 2012 (11.x) und höher, Azure SQL-Datenbank
SERVER ROLE Gilt für: SQL Server 2008 (10.0.x) und höher
SERVICE Gilt für: SQL Server 2008 (10.0.x) und höher
SYMMETRIC KEY Gilt für: SQL Server 2008 (10.0.x) und höher, Azure SQL-Datenbank
TYPE Gilt für: SQL Server 2008 (10.0.x) und höher, Azure SQL-Datenbank
XML SCHEMA COLLECTION Gilt für: SQL Server 2008 (10.0.x) und höher, Azure SQL-Datenbank

entity_name ist der Name der Entität.

principal_name | SCHEMA EIGENTÜMER Name des Sicherheitsprinzipals, dem die Gesellschaft gehören wird. Datenbankobjekte müssen im Besitz eines Datenbankprinzipals sein, also ein Datenbankbenutzer oder eine Datenbankrolle. Serverobjekte (beispielsweise Datenbanken) müssen im Besitz eines Serverprinzipals (eines Anmeldenamens) sein. Geben Sie OWNER als *principal_name- anSCHEMA, um anzuzeigen, dass das Objekt dem Hauptverantwortlichen gehört, der das Schema des Objekts besitzt.

Remarks

ALTER AUTHORIZATION kann verwendet werden, um das Eigentum an jeder Einheit zu ändern, die einen Eigentümer hat. Der Besitz von in der Datenbank enthaltenen Entitäten kann an jeden Prinzipal auf Datenbankebene übertragen werden. Der Besitz von Entitäten auf Serverebene kann nur an Prinzipale auf Serverebene übertragen werden.

Important

Ab SQL Server 2005 (9.x) kann ein Benutzer ein OBJEKT besitzen oder TYPE das von einem Schema eines anderen Datenbankbenutzers enthalten ist. Dieses Verhalten unterscheidet sich von früheren Versionen von SQL Server. Weitere Informationen finden Sie unter OBJECTPROPERTY (Transact-SQL) und TYPEPROPERTY (Transact-SQL).

Der Besitz der folgenden in einem Schema enthaltenen Entitäten vom Typ "object" kann übertragen werden: Tabellen, Sichten, Funktionen, Prozeduren, Warteschlangen und Synonyme.

Der Besitz der folgenden Entitäten kann nicht übertragen werden: Verbindungsserver, Statistiken, Einschränkungen, Regeln, Standardwerte, Trigger, Service Broker-Warteschlangen, Anmeldeinformationen, Partitionsfunktionen, Partitionsschemas, Datenbank-Hauptschlüssel, Diensthauptschlüssel und Ereignisbenachrichtigungen.

Der Besitz von Mitgliedern der folgenden sicherungsfähigen Klassen kann nicht übertragen werden: Server, Anmeldename, Benutzer, Anwendungsrolle und Spalte.

Die SCHEMA Option EIGENTÜMER gilt nur, wenn Sie das Eigentum an einer schema-enthaltenen Entität übertragen. SCHEMA DER EIGENTÜMER überträgt das Eigentum an der Einheit an den Eigentümer des Schemas, in dem sie sich befindet. Nur Entitäten der Klasse OBJECT, TYPE, oder XML SCHEMA COLLECTION sind schema-enthalten.

Falls es sich bei der Zielentität nicht um eine Datenbank handelt und die Entität an einen neuen Besitzer übertragen wird, werden alle Berechtigungen für das Ziel gelöscht.

Note

Schemas entsprechen nicht datenbankbenutzern. Verwenden Sie Systemkatalogansichten , um unterschiede zwischen Datenbankbenutzern und Schemas zu identifizieren.

Beachten Sie dabei außerdem Folgendes:

Important

Die einzig zuverlässige Möglichkeit, den Besitzer eines Objekts zu finden, besteht darin, die sys.objects-Katalogsicht abzufragen. Die einzige zuverlässige Möglichkeit, den Besitzer eines Typs zu finden, besteht in der Verwendung der TYPEPROPERTY-Funktion.

Spezialfälle und Bedingungen

In der folgenden Tabelle sind Spezialfälle, Ausnahmen und Bedingungen aufgeführt, die beim Ändern der Autorisierung gelten.

Class Condition
OBJECT Der Besitz von Triggern, Einschränkungen, Regeln, Standardwerten, Statistiken, Systemobjekten, Warteschlangen, indizierten Sichten oder Tabellen mit indizierten Sichten kann nicht geändert werden.
SCHEMA Wenn der Besitz übertragen wird, werden Berechtigungen für in einem Schema enthaltene Objekte, die keine expliziten Besitzer aufweisen, gelöscht. Der Besitzer von sys, dbo oder information_schema kann nicht geändert werden.
TYPE Man kann den Besitz eines TYPE Systems, das zu Sys oder information_schema gehört, nicht ändern.
CONTRACT, MESSAGE TYPE oder SERVICE Der Besitz von Systementitäten kann nicht geändert werden.
SYMMETRIC KEY Der Besitz von globalen temporären Schlüsseln kann nicht geändert werden.
CERTIFICATE oder ASYMMETRIC KEY Der Besitz dieser Entitäten kann nicht an eine Rolle oder Gruppe übertragen werden.
ENDPOINT Der Prinzipal muss ein Anmeldename sein.

ALTER AUTHORIZATION für Datenbanken

Für SQL Server

Anforderungen für den neuen Besitzer: Der neue Besitzerprinzipal muss einer der folgenden sein:

  • Ein Anmeldename für die SQL Server-Authentifizierung
  • Ein Anmeldename für die Windows-Authentifizierung, der einen Windows-Benutzer (keine Gruppe) darstellt
  • Ein Windows-Benutzer, der sich über einen Anmeldenamen für die Windows-Authentifizierung authentifiziert, der eine Windows-Gruppe darstellt

Anforderungen an die Person, die die Anweisung ALTER AUTHORIZATION ausführt: Wenn Sie kein Mitglied der Sysadmin-Fixed-Server-Rolle sind, müssen Sie mindestens die Berechtigung ÜBERNEHMEN der Eigentumsrechte für die Datenbank haben und die IMPERSONAGE-Berechtigung beim neuen Owner-Login haben.

Für Azure SQL-Datenbank

Anforderungen für den neuen Besitzer: Der neue Besitzerprinzipal muss einer der folgenden sein:

  • Ein Anmeldename für die SQL Server-Authentifizierung
  • Ein Verbundbenutzer (keine Gruppe), der in der Microsoft Entra-ID vorhanden ist.
  • Ein verwalteter Benutzer (keine Gruppe) oder eine Anwendung, die in der Microsoft Entra-ID vorhanden ist.

Wenn der neue Besitzer ein Microsoft Entra-Benutzer ist, kann er nicht als Benutzer in der Datenbank vorhanden sein, in der der neue Besitzer zum neuen Datenbankbesitzer (dbo) wird. Der Microsoft Entra-Benutzer muss zunächst aus der Datenbank entfernt werden, bevor die ALTER AUTHORIZATION Anweisung ausgeführt wird, um den Datenbankbesitz auf den neuen Benutzer zu ändern. Weitere Informationen zum Konfigurieren von Microsoft Entra-Benutzern mit SQL-Datenbank finden Sie unter Konfigurieren der Microsoft Entra-Authentifizierung.

Anforderungen an die Person, die die ALTER AUTHORIZATION Anweisung ausführt: Sie müssen sich mit der Zieldatenbank verbinden, um den Besitzer dieser Datenbank zu ändern.

Die folgenden Kontotypen können den Besitzer einer Datenbank ändern.

  • Die Prinzipalanmeldung auf Dienstebene, bei der es sich um den SQL-Administrator handelt, der beim Erstellen des logischen Servers in Azure bereitgestellt wurde.
  • Der Microsoft Entra-Administrator für den logischen Server..
  • Der aktuelle Besitzer der Datenbank

In der folgenden Tabelle werden die Anforderungen zusammengefasst:

Executor Target Result
Ein Anmeldename für die SQL Server-Authentifizierung Ein Anmeldename für die SQL Server-Authentifizierung Success
Ein Anmeldename für die SQL Server-Authentifizierung Microsoft Entra-Benutzer*in Fail
Microsoft Entra-Benutzer*in Ein Anmeldename für die SQL Server-Authentifizierung Success
Microsoft Entra-Benutzer*in Microsoft Entra-Benutzer*in Success

Führen Sie zum Überprüfen eines Microsoft Entra-Besitzers der Datenbank den folgenden Transact-SQL-Befehl in einer Benutzerdatenbank aus (in diesem Beispiel testdb).

SELECT CAST(owner_sid as uniqueidentifier) AS Owner_SID
FROM sys.databases
WHERE name = 'testdb';

Die Ausgabe ist eine GUID (z. B. XXXXXX-XXXX-XXXX-XXXX-XXXXXXXX), die der Objekt-ID des Microsoft Entra-Benutzers oder Dienstprinzipals entspricht, der als Datenbankbesitzer zugewiesen ist. Sie können dies überprüfen, indem Sie die Objekt-ID des Benutzers in der Microsoft Entra-ID überprüfen. Wenn ein Benutzeranmeldename für die SQL Server-Authentifizierung der Datenbankbesitzer ist, führen Sie die folgende Anweisung in der Masterdatenbank aus, um den Datenbankbesitzer zu bestätigen:

SELECT d.name, d.owner_sid, sl.name
FROM sys.databases AS d
JOIN sys.sql_logins AS sl
ON d.owner_sid = sl.sid;

Beste Praxis

Anstatt Microsoft Entra-Benutzer als einzelne Besitzer der Datenbank zu verwenden, verwenden Sie eine Microsoft Entra-Gruppe als Mitglied der db_owner festen Datenbankrolle. Die folgenden Schritte zeigen, wie Sie eine deaktivierte Anmeldung als Datenbankbesitzer konfigurieren und eine Microsoft Entra-Gruppe (mydbogroup) zu einem Mitglied der rolle db_owner machen.

  1. Melden Sie sich bei SQL Server als Microsoft Entra-Administrator an, und ändern Sie den Besitzer der Datenbank in eine deaktivierte SQL Server-Authentifizierungsanmeldung. Führen Sie über die Benutzerdatenbank z.B. Folgendes aus:

    ALTER AUTHORIZATION ON database::testdb TO DisabledLogin;
    
  2. Erstellen Sie eine Microsoft Entra-Gruppe, die die Datenbank besitzen soll, und fügen Sie sie der Benutzerdatenbank als Benutzer hinzu. Beispiel:

    CREATE USER [mydbogroup] FROM EXTERNAL PROVIDER;
    
  3. Fügen Sie in der Benutzerdatenbank den Benutzer, der die Microsoft Entra-Gruppe darstellt, zur db_owner festen Datenbankrolle hinzu. Beispiel:

    ALTER ROLE db_owner ADD MEMBER mydbogroup;
    

Nun können die mydbogroup-Mitglieder die Datenbank als Mitglieder der db_owner-Rolle zentral verwalten.

  • Wenn Mitglieder dieser Gruppe aus der Microsoft Entra-Gruppe entfernt werden, verlieren sie automatisch die dbo-Berechtigungen für diese Datenbank.
  • Wenn neue Mitglieder der mydbogroup Microsoft Entra-Gruppe hinzugefügt werden, erhalten sie automatisch den Dbo-Zugriff für diese Datenbank.

Um festzustellen, ob ein bestimmter Benutzer über die effektive DBO-Berechtigung verfügt, muss der Benutzer folgende Anweisung ausführen:

SELECT IS_MEMBER ('db_owner');

Lautet der Rückgabewert 1, bedeutet dies, dass der Benutzer ein Mitglied der Rolle ist.

Permissions

Erfordert die TAKE OWNERSHIP-Berechtigung für die Entität. Falls der neue Besitzer nicht der Benutzer ist, der diese Anweisung ausführt, ist zudem eine der folgenden Berechtigungen erforderlich: 1) IMPERSONATE-Berechtigung für den neuen Besitzer, falls es sich um einen Benutzer oder einen Anmeldenamen handelt. Oder: 2) Falls der neue Besitzer eine Rolle ist, Mitgliedschaft in der Rolle oder ALTER-Berechtigung in der Rolle. Oder: 3) Falls der neue Besitzer eine Anwendungsrolle ist, ALTER-Berechtigung in der Anwendungsrolle.

Examples

A. Übertragen des Besitzes einer Tabelle

Im folgenden Beispiel wird der Besitz der Sprockets-Tabelle an den Benutzer MichikoOsada übertragen. Die Tabelle befindet sich im Parts-Schema.

ALTER AUTHORIZATION ON OBJECT::Parts.Sprockets TO MichikoOsada;
GO

Die Abfrage kann auch folgendermaßen aussehen:

ALTER AUTHORIZATION ON Parts.Sprockets TO MichikoOsada;
GO

Wenn das Objektschema kein Bestandteil der Anweisung ist, sucht die Datenbank-Engine das Objekt im Standardschema des Benutzers. Beispiel:

ALTER AUTHORIZATION ON Sprockets TO MichikoOsada;
ALTER AUTHORIZATION ON OBJECT::Sprockets TO MichikoOsada;

B. Übertragen des Besitzes einer Sicht an den Schemabesitzer

Im folgenden Beispiel wird der Besitz der ProductionView06-Sicht an den Besitzer des Schemas übertragen, das sie enthält. Die Sicht befindet sich im Production-Schema.

ALTER AUTHORIZATION ON OBJECT::Production.ProductionView06 TO SCHEMA OWNER;
GO

C. Übertragen des Besitzes eines Schemas an einen Benutzer

Im folgenden Beispiel wird der Besitz des SeattleProduction11-Schemas an den Benutzer SandraAlayo übertragen.

ALTER AUTHORIZATION ON SCHEMA::SeattleProduction11 TO SandraAlayo;
GO

D. Übertragen des Besitzes für einen Endpunkt an einen SQL Server-Anmeldenamen

Im folgenden Beispiel wird der Besitz des CantabSalesServer1-Endpunkts auf JaePak übertragen. Da es sich bei dem Endpunkt um ein sicherungsfähiges Element auf Serverebene handelt, kann der Endpunkt nur an einen Prinzipal auf Serverebene übertragen werden.

Gilt für: SQL Server 2008 (10.0.x) und höher.

ALTER AUTHORIZATION ON ENDPOINT::CantabSalesServer1 TO JaePak;
GO

E. Ändern eines Tabellenbesitzers

In jedem der folgenden Beispiele wird der Besitzer der Sprockets-Tabelle in der Parts-Datenbank in den Datenbankbenutzer MichikoOsada geändert.

ALTER AUTHORIZATION ON Sprockets TO MichikoOsada;
ALTER AUTHORIZATION ON dbo.Sprockets TO MichikoOsada;
ALTER AUTHORIZATION ON OBJECT::Sprockets TO MichikoOsada;
ALTER AUTHORIZATION ON OBJECT::dbo.Sprockets TO MichikoOsada;

F. Ändern eines Datenbankbesitzers

Gilt für: SQL Server 2008 (10.0.x) und höher, Analytics Platform System (PDW), SQL-Datenbank

Im folgenden Beispiel wird der Besitzer der Parts-Datenbank in den Anmeldenamen MichikoOsada geändert.

ALTER AUTHORIZATION ON DATABASE::Parts TO MichikoOsada;

G. Ändern des Besitzers einer Datenbank in einen Microsoft Entra-Benutzer

Im folgenden Beispiel kann ein Microsoft Entra-Administrator für SQL Server in einer Organisation mit einer benutzerdefinierten Microsoft Entra-Domäne namens cqclinic.onmicrosoft.comden aktuellen Besitz einer Datenbank targetDB ändern und einen vorhandenen Microsoft Entra-Benutzer richel@cqclinic.onmicorsoft.com mithilfe des folgenden Befehls zum neuen Datenbankbesitzer machen:

ALTER AUTHORIZATION ON database::targetDB TO [rachel@cqclinic.onmicrosoft.com];

Siehe auch

OBJECTPROPERTY (Transact-SQL)TYPEPROPERTY (Transact-SQL)EVENTDATA (Transact-SQL)