Udostępnij za pomocą


ZMIANA AUTORYZACJI (Transact-SQL)

Dotyczy:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)Punkt końcowy analizy SQL w usłudze Microsoft FabricHurtownia danych w usłudze Microsoft FabricBaza danych SQL w usłudze Microsoft Fabric

Zmienia własność zabezpieczanego obiektu.

Transact-SQL konwencje składni

Note

Microsoft Entra ID był wcześniej znany jako Azure Active Directory (Azure AD).

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

Ta składnia nie jest obsługiwana przez bezserwerową pulę SQL w usłudze Azure Synapse Analytics.

Arguments

< > class_type Czy zabezpieczana klasa jednostki, dla której jest zmieniany właściciel. Obiekt jest wartością domyślną.

Class Product
OBJECT Dotyczy: SQL Server 2008 (10.0.x) i nowsze, Azure SQL Database, Azure Synapse Analytics, Analytics Platform System (PDW).
ASSEMBLY Dotyczy: SQL Server 2008 (10.0.x) i nowsze, Azure SQL Database.
KLUCZ ASYMETRYCZNY Dotyczy: SQL Server 2008 (10.0.x) i nowsze, Azure SQL Database.
GRUPA DOSTĘPNOŚCI Dotyczy: PROGRAM SQL Server 2012 lub nowszy.
CERTIFICATE Dotyczy: SQL Server 2008 (10.0.x) i nowsze, Azure SQL Database.
CONTRACT Dotyczy: SQL Server 2008 (10.0.x) i nowsze.
DATABASE Dotyczy: SQL Server 2008 (10.0.x) i nowsze, Azure SQL Database. Aby uzyskać więcej informacji, zobacz ALTER AUTHORIZATION for databases (ALTER AUTHORIZATION for databases).
ENDPOINT Dotyczy: SQL Server 2008 (10.0.x) i nowsze.
KATALOG PEŁNOTEKSTOWY Dotyczy: SQL Server 2008 (10.0.x) i nowsze, Azure SQL Database.
LISTA ZATRZYMAŃ PEŁNOTEKSTOWYCH Dotyczy: SQL Server 2008 (10.0.x) i nowsze, Azure SQL Database.
TYP KOMUNIKATU Dotyczy: SQL Server 2008 (10.0.x) i nowsze.
POWIĄZANIE USŁUGI ZDALNEJ Dotyczy: SQL Server 2008 (10.0.x) i nowsze.
ROLE Dotyczy: SQL Server 2008 (10.0.x) i nowsze, Azure SQL Database.
ROUTE Dotyczy: SQL Server 2008 (10.0.x) i nowsze.
SCHEMA Dotyczy: SQL Server 2008 (10.0.x) i nowsze, Azure SQL Database, Azure Synapse Analytics, Analytics Platform System (PDW).
LISTA NIERUCHOMOŚCI DO WYSZUKANIA Dotyczy: SQL Server 2012 (11.x) i nowsze wersje usługi Azure SQL Database.
ROLA SERWERA Dotyczy: SQL Server 2008 (10.0.x) i nowsze.
SERVICE Dotyczy: SQL Server 2008 (10.0.x) i nowsze.
KLUCZ SYMETRYCZNY Dotyczy: SQL Server 2008 (10.0.x) i nowsze, Azure SQL Database.
TYPE Dotyczy: SQL Server 2008 (10.0.x) i nowsze, Azure SQL Database.
KOLEKCJA SCHEMATÓW XML Dotyczy: SQL Server 2008 (10.0.x) i nowsze, Azure SQL Database.

entity_name To nazwa jednostki.

principal_name | SCHEMA OWNER Nazwa podmiotu zabezpieczeń, który będzie właścicielem jednostki. Obiekty bazy danych muszą być własnością jednostki bazy danych; użytkownik lub rola bazy danych. Obiekty serwera (takie jak bazy danych) muszą być własnością jednostki serwera (identyfikatora logowania). Określ wartość WŁAŚCICIEL SCHEMATu jako *principal_name- , aby wskazać, że obiekt powinien być własnością podmiotu zabezpieczeń, który jest właścicielem schematu obiektu.

Remarks

Alter AUTHORIZATION może służyć do zmiany własności dowolnej jednostki, która ma właściciela. Własność jednostek zawartych w bazie danych może zostać przeniesiona do dowolnego podmiotu zabezpieczeń na poziomie bazy danych. Własność jednostek na poziomie serwera może być przenoszona tylko do podmiotów zabezpieczeń na poziomie serwera.

Important

Począwszy od programu SQL Server 2005 (9.x), użytkownik może być właścicielem obiektu lub typu, który jest zawarty w schemacie należącym do innego użytkownika bazy danych. Jest to zmiana zachowania z wcześniejszych wersji programu SQL Server. Aby uzyskać więcej informacji, zobacz OBJECTPROPERTY (Transact-SQL) i TYPEPROPERTY (Transact-SQL).

Własność następujących jednostek zawartych w schemacie typu "object" można przenosić: tabele, widoki, funkcje, procedury, kolejki i synonimy.

Nie można przenieść własności następujących jednostek: serwery połączone, statystyki, ograniczenia, reguły, wartości domyślne, wyzwalacze, kolejki usługi Service Broker, poświadczenia, funkcje partycji, schematy partycji, klucze główne bazy danych, klucz główny usługi i powiadomienia o zdarzeniach.

Nie można przenieść własności składowych następujących zabezpieczanych klas: serwer, identyfikator logowania, użytkownik, rola aplikacji i kolumna.

Opcja WŁAŚCICIEL SCHEMATu jest prawidłowa tylko wtedy, gdy przenosisz własność jednostki zawartej w schemacie. WŁAŚCICIEL SCHEMATU przeniesie własność jednostki do właściciela schematu, w którym się znajduje. Tylko jednostki klasy OBJECT, TYPE lub XML SCHEMA COLLECTION są zawarte w schemacie.

Jeśli jednostka docelowa nie jest bazą danych i jednostka jest przenoszona do nowego właściciela, wszystkie uprawnienia w obiekcie docelowym zostaną usunięte.

Note

Schematy nie są równoważne użytkownikom bazy danych. Użyj widoków wykazu systemu , aby zidentyfikować wszelkie różnice między użytkownikami bazy danych i schematami.

Zwróć również uwagę na następujące kwestie:

Important

Jedynym niezawodnym sposobem znalezienia właściciela obiektu jest wykonywanie zapytań względem widoku katalogu sys.objects . Jedynym niezawodnym sposobem znalezienia właściciela typu jest użycie funkcji TYPEPROPERTY.

Przypadki specjalne i warunki

W poniższej tabeli wymieniono specjalne przypadki, wyjątki i warunki, które mają zastosowanie do zmiany autoryzacji.

Class Condition
OBJECT Nie można zmienić własności wyzwalaczy, ograniczeń, reguł, wartości domyślnych, statystyk, obiektów systemowych, kolejek, widoków indeksowanych lub tabel z indeksowanych widoków.
SCHEMA Po przeniesieniu własności uprawnienia do obiektów zawartych w schemacie, które nie mają jawnych właścicieli, zostaną usunięte. Nie można zmienić właściciela systemu, bazy danych lub information_schema.
TYPE Nie można zmienić własności typu należącego do systemu lub information_schema.
KONTRAKT, TYP KOMUNIKATU LUB USŁUGA Nie można zmienić własności jednostek systemowych.
KLUCZ SYMETRYCZNY Nie można zmienić własności globalnych kluczy tymczasowych.
CERTYFIKAT LUB KLUCZ ASYMETRYCZNY Nie można przenieść własności tych jednostek do roli lub grupy.
ENDPOINT Podmiot zabezpieczeń musi być identyfikatorem logowania.

ALTER AUTHORIZATION for databases (ZMIENIANIE AUTORYZACJI dla baz danych)

Dla oprogramowania SQL Server

Wymagania dotyczące nowego właściciela: Nowy podmiot zabezpieczeń właściciela musi być jednym z następujących elementów:

  • Identyfikator logowania uwierzytelniania programu SQL Server.
  • Identyfikator logowania uwierzytelniania systemu Windows reprezentujący użytkownika systemu Windows (a nie grupy).
  • Użytkownik systemu Windows, który uwierzytelnia się za pomocą logowania uwierzytelniania systemu Windows reprezentującego grupę systemu Windows.

Wymagania dotyczące osoby wykonującej instrukcję ALTER AUTHORIZATION: Jeśli nie jesteś członkiem stałej roli serwera sysadmin , musisz mieć co najmniej uprawnienie TAKE OWNERSHIP w bazie danych i musi mieć uprawnienie IMPERSONATE w nowym logowaniu właściciela.

W przypadku usługi Azure SQL Database

Wymagania dotyczące nowego właściciela: Nowy podmiot zabezpieczeń właściciela musi być jednym z następujących elementów:

  • Identyfikator logowania uwierzytelniania programu SQL Server.
  • Użytkownik federacyjny (a nie grupa) znajdujący się w identyfikatorze Entra firmy Microsoft.
  • Użytkownik zarządzany (nie grupa) lub aplikacja obecna w identyfikatorze Entra firmy Microsoft.

Jeśli nowy właściciel jest użytkownikiem firmy Microsoft Entra, nie może istnieć jako użytkownik w bazie danych, w której nowy właściciel zostanie nowym właścicielem bazy danych (dbo). Użytkownik Microsoft Entra musi najpierw zostać usunięty z bazy danych przed wykonaniem instrukcji ALTER AUTHORIZATION, zmieniając własność bazy danych na nowego użytkownika. Aby uzyskać więcej informacji na temat konfigurowania użytkowników usługi Microsoft Entra przy użyciu usługi SQL Database, zobacz Konfigurowanie uwierzytelniania entra firmy Microsoft.

Wymagania dotyczące osoby wykonującej instrukcję ALTER AUTHORIZATION: Aby zmienić właściciela tej bazy danych, musisz nawiązać połączenie z docelową bazą danych.

Następujące typy kont mogą zmieniać właściciela bazy danych.

  • Identyfikator logowania podmiotu zabezpieczeń na poziomie usługi, który jest administratorem SQL zainicjowanym podczas tworzenia serwera logicznego na platformie Azure .
  • Administrator firmy Microsoft Entra dla serwera logicznego.
  • Bieżący właściciel bazy danych.

Poniższa tabela zawiera podsumowanie wymagań:

Executor Target Result
Logowanie do uwierzytelniania programu SQL Server Logowanie do uwierzytelniania programu SQL Server Success
Logowanie do uwierzytelniania programu SQL Server Użytkownik firmy Microsoft Entra Fail
Użytkownik firmy Microsoft Entra Logowanie do uwierzytelniania programu SQL Server Success
Użytkownik firmy Microsoft Entra Użytkownik firmy Microsoft Entra Success

Aby zweryfikować właściciela bazy danych firmy Microsoft Entra, wykonaj następujące polecenie Transact-SQL w bazie danych użytkownika (w tym przykładzie testdb).

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

Dane wyjściowe będą identyfikatorem GUID (takim jak XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX), który odpowiada identyfikatorowi obiektu użytkownika lub jednostki usługi firmy Microsoft przypisanej jako właściciel bazy danych. Możesz to sprawdzić, sprawdzając identyfikator obiektu użytkownika w identyfikatorze Entra firmy Microsoft. Gdy użytkownik logowania uwierzytelniania programu SQL Server jest właścicielem bazy danych, wykonaj następującą instrukcję w bazie danych master, aby zweryfikować właściciela bazy danych:

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;

Najlepsze rozwiązanie

Zamiast używać użytkowników firmy Microsoft Entra jako indywidualnych właścicieli bazy danych, użyj grupy Microsoft Entra jako członka stałej roli bazy danych db_owner. W poniższych krokach pokazano, jak skonfigurować wyłączone logowanie jako właściciel bazy danych i utworzyć grupę Microsoft Entra (mydbogroup) jako członka roli db_owner .

  1. Zaloguj się do programu SQL Server jako administrator firmy Microsoft Entra i zmień właściciela bazy danych na wyłączone logowanie do uwierzytelniania programu SQL Server. Na przykład z bazy danych użytkownika wykonaj następujące polecenie:

    ALTER AUTHORIZATION ON database::testdb TO DisabledLogin;
    
  2. Utwórz grupę Firmy Microsoft Entra, która powinna być właścicielem bazy danych i dodać ją jako użytkownika do bazy danych użytkowników. Przykład:

    CREATE USER [mydbogroup] FROM EXTERNAL PROVIDER;
    
  3. W bazie danych użytkowników dodaj użytkownika reprezentującego grupę Microsoft Entra do db_owner stałej roli bazy danych. Przykład:

    ALTER ROLE db_owner ADD MEMBER mydbogroup;
    

mydbogroup Teraz członkowie mogą centralnie zarządzać bazą danych jako członkami roli db_owner.

  • Gdy członkowie tej grupy zostaną usunięci z grupy Microsoft Entra, automatycznie utracą uprawnienia dbo dla tej bazy danych.
  • Podobnie jeśli nowi członkowie są dodawani do mydbogroup grupy Microsoft Entra, automatycznie uzyskują dostęp do bazy danych dla tej bazy danych.

Aby sprawdzić, czy określony użytkownik ma obowiązujące uprawnienie dbo, użytkownik musi wykonać następującą instrukcję:

SELECT IS_MEMBER ('db_owner');

Wartość zwracana 1 wskazuje, że użytkownik jest członkiem roli.

Permissions

Wymaga uprawnienia TAKE OWNERSHIP w jednostce. Jeśli nowy właściciel nie jest użytkownikiem wykonującym tę instrukcję, wymagane jest również uprawnienie 1) Personifikuj się na nowym właścicielu, jeśli jest to użytkownik lub identyfikator logowania; lub 2) jeśli nowy właściciel jest rolą, członkostwem w roli lub UPRAWNIENIE ALTER dla roli; lub 3) jeśli nowy właściciel jest rolą aplikacji, uprawnienie ALTER do roli aplikacji.

Examples

A. Przenoszenie własności tabeli

Poniższy przykład przenosi własność tabeli Sprockets do użytkownika MichikoOsada. Tabela znajduje się wewnątrz schematu Parts.

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

Zapytanie może również wyglądać następująco:

ALTER AUTHORIZATION ON Parts.Sprockets TO MichikoOsada;
GO

Jeśli schemat obiektów nie jest dołączony jako część instrukcji, aparat bazy danych wyszuka obiekt w domyślnym schemacie użytkowników. Przykład:

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

B. Przenoszenie własności widoku do właściciela schematu

Poniższy przykład przenosi własność widoku ProductionView06 do właściciela schematu, który go zawiera. Widok znajduje się wewnątrz schematu Production.

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

C. Przenoszenie własności schematu do użytkownika

Poniższy przykład przenosi własność schematu SeattleProduction11 do użytkownika SandraAlayo.

ALTER AUTHORIZATION ON SCHEMA::SeattleProduction11 TO SandraAlayo;
GO

D. Przenoszenie własności punktu końcowego do logowania programu SQL Server

Poniższy przykład przenosi własność punktu końcowego CantabSalesServer1 na JaePak. Ponieważ punkt końcowy jest zabezpieczany na poziomie serwera, punkt końcowy można przenieść tylko do podmiotu zabezpieczeń na poziomie serwera.

Dotyczy: SQL Server 2008 (10.0.x) i nowszych.

ALTER AUTHORIZATION ON ENDPOINT::CantabSalesServer1 TO JaePak;
GO

E. Zmienianie właściciela tabeli

Każdy z poniższych przykładów zmienia właściciela Sprockets tabeli w Parts bazie danych na użytkownika MichikoOsadabazy danych .

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. Zmiana właściciela bazy danych

Dotyczy: SQL Server 2008 (10.0.x) i nowsze, Analytics Platform System (PDW), SQL Database.

W poniższym przykładzie zmieniono właściciela Parts bazy danych na identyfikator logowania MichikoOsada.

ALTER AUTHORIZATION ON DATABASE::Parts TO MichikoOsada;

G. Zmiana właściciela bazy danych na użytkownika firmy Microsoft Entra

W poniższym przykładzie administrator firmy Microsoft Entra dla programu SQL Server w organizacji z niestandardową domeną Firmy Microsoft Entra o nazwie cqclinic.onmicrosoft.com, może zmienić bieżącą własność bazy danych targetDB i ustawić istniejącego użytkownika richel@cqclinic.onmicorsoft.com microsoft Entra jako nowego właściciela bazy danych przy użyciu następującego polecenia:

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

Zobacz też

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