ALTER AUTHORIZATION (Transact-SQL)

Şunlar için geçerlidir:SQL ServerAzure SQL VeritabanıAzure SQL Yönetilen ÖrneğiAzure Synapse AnalyticsAnaliz Platformu Sistemi (PDW)Microsoft Fabric'teki SQL analiz uç noktasıMicrosoft Fabric'teki ambarMicrosoft Fabric'teki SQL veritabanı

Güvenlik altına alınabilir bir öğenin sahipliğini değiştirir.

Transact-SQL söz dizimi kuralları

Note

Microsoft Entra Id daha önce Azure Active Directory (Azure AD) olarak biliniyordu.

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

Bu söz dizimi, Azure Synapse Analytics'teki sunucusuz SQL havuzu tarafından desteklenmez.

Arguments

< > class_type Sahibinin değiştirildiği varlığın güvenli hale getirilebilir sınıfıdır. OBJECT varsayılan değerdir.

Class Product
OBJECT Şunlar için geçerlidir: SQL Server 2008 (10.0.x) ve üzeri, Azure SQL Veritabanı, Azure Synapse Analytics, Analytics Platform Sistemi (PDW).
ASSEMBLY Şunlar için geçerlidir: SQL Server 2008 (10.0.x) ve üzeri, Azure SQL Veritabanı.
ASYMMETRIC KEY Şunlar için geçerlidir: SQL Server 2008 (10.0.x) ve üzeri, Azure SQL Veritabanı.
AVAILABILITY GROUP Şunlar için geçerlidir: SQL Server 2012 ve üzeri.
CERTIFICATE Şunlar için geçerlidir: SQL Server 2008 (10.0.x) ve üzeri, Azure SQL Veritabanı.
CONTRACT Şunlar için geçerlidir: SQL Server 2008 (10.0.x) ve üzeri.
DATABASE Şunlar için geçerlidir: SQL Server 2008 (10.0.x) ve üzeri, Azure SQL Veritabanı. Daha fazla bilgi için veritabanlarına bakınızALTER AUTHORIZATION.
ENDPOINT Şunlar için geçerlidir: SQL Server 2008 (10.0.x) ve üzeri.
FULLTEXT CATALOG Şunlar için geçerlidir: SQL Server 2008 (10.0.x) ve üzeri, Azure SQL Veritabanı.
FULLTEXT STOPLIST Şunlar için geçerlidir: SQL Server 2008 (10.0.x) ve üzeri, Azure SQL Veritabanı.
MESSAGE TYPE Şunlar için geçerlidir: SQL Server 2008 (10.0.x) ve üzeri.
REMOTE SERVICE BINDING Şunlar için geçerlidir: SQL Server 2008 (10.0.x) ve üzeri.
ROLE Şunlar için geçerlidir: SQL Server 2008 (10.0.x) ve üzeri, Azure SQL Veritabanı.
ROUTE Şunlar için geçerlidir: SQL Server 2008 (10.0.x) ve üzeri.
SCHEMA Şunlar için geçerlidir: SQL Server 2008 (10.0.x) ve üzeri, Azure SQL Veritabanı, Azure Synapse Analytics, Analytics Platform Sistemi (PDW).
SEARCH PROPERTY LIST Şunlar için geçerlidir: SQL Server 2012 (11.x) ve üzeri, Azure SQL Veritabanı.
SERVER ROLE Şunlar için geçerlidir: SQL Server 2008 (10.0.x) ve üzeri.
SERVICE Şunlar için geçerlidir: SQL Server 2008 (10.0.x) ve üzeri.
SYMMETRIC KEY Şunlar için geçerlidir: SQL Server 2008 (10.0.x) ve üzeri, Azure SQL Veritabanı.
TYPE Şunlar için geçerlidir: SQL Server 2008 (10.0.x) ve üzeri, Azure SQL Veritabanı.
XML SCHEMA COLLECTION Şunlar için geçerlidir: SQL Server 2008 (10.0.x) ve üzeri, Azure SQL Veritabanı.

entity_name Varlığın adıdır.

principal_name | SCHEMA OWNER Varlığa sahip olacak güvenlik yöneticisinin adı. Veritabanı nesneleri bir veritabanı sorumlusuna ait olmalıdır; bir veritabanı kullanıcısı veya rolü. Sunucu nesneleri (veritabanları gibi) bir sunucu sorumlusuna (oturum açma) sahip olmalıdır. OWNER'ıSCHEMA *principal_name- olarak belirtin; böylece nesnenin şemasına sahip olan ana sahip olması gerektiğini belirtir.

Remarks

ALTER AUTHORIZATION Sahibi olan herhangi bir kuruluşun mülkiyetini değiştirmek için kullanılabilir. Veritabanı içeren varlıkların sahipliği herhangi bir veritabanı düzeyi sorumlusuna aktarılabilir. Sunucu düzeyinde varlıkların sahipliği yalnızca sunucu düzeyindeki sorumlulara aktarılabilir.

Important

SQL Server 2005 (9.x) ile itibaren, bir kullanıcı bir NESNEYE sahip olabilir veya TYPE başka bir veritabanı kullanıcısına ait bir şema tarafından içerilmiştir. Bu, SQL Server'ın önceki sürümlerindeki bir davranış değişikliğidir. Daha fazla bilgi için bkz . OBJECTPROPERTY (Transact-SQL) ve TYPEPROPERTY (Transact-SQL).

"object" türünde aşağıdaki şema içeren varlıkların sahipliği aktarılabilir: tablolar, görünümler, işlevler, yordamlar, kuyruklar ve eş anlamlılar.

Aşağıdaki varlıkların sahipliği aktarılamaz: bağlı sunucular, istatistikler, kısıtlamalar, kurallar, varsayılanlar, tetikleyiciler, Hizmet Aracısı kuyrukları, kimlik bilgileri, bölüm işlevleri, bölüm şemaları, veritabanı ana anahtarları, hizmet ana anahtarı ve olay bildirimleri.

Şu güvenli hale getirilebilir sınıfların üyelerinin sahipliği aktarılamaz: sunucu, oturum açma, kullanıcı, uygulama rolü ve sütun.

SCHEMA OWNER seçeneği yalnızca şema içeren bir varlığın sahipliğini devrederken geçerlidir. SCHEMA SAHIP, varlığın mülkiyetini, bulunduğu şemanın sahibine devreder. Yalnızca OBJECT sınıfındaki varlıklar, TYPE, veya XML SCHEMA COLLECTION şema içermelidir.

Hedef varlık bir veritabanı değilse ve varlık yeni bir sahipe aktarılıyorsa, hedefteki tüm izinler bırakılır.

Note

Şemalar veritabanı kullanıcılarına eşdeğer değildir. Veritabanı kullanıcıları ile şemalar arasındaki farkları belirlemek için Sistem kataloğu görünümlerini kullanın.

Ayrıca aşağıdakilere dikkat edin:

Important

Bir nesnenin sahibini bulmanın tek güvenilir yolu sys.objects katalog görünümünü sorgulamaktır. Türün sahibini bulmanın tek güvenilir yolu, TYPEPROPERTY işlevini kullanmaktır.

Özel Durumlar ve Koşullar

Aşağıdaki tabloda, yetkilendirmeyi değiştirmek için geçerli olan özel durumlar, özel durumlar ve koşullar listeleniyor.

Class Condition
OBJECT Tetikleyicilerin, kısıtlamaların, kuralların, varsayılanların, istatistiklerin, sistem nesnelerinin, kuyrukların, dizinli görünümlerin veya dizinli görünümlere sahip tabloların sahipliğini değiştiremezsiniz.
SCHEMA Sahiplik aktarıldığında, açık sahiplere sahip olmayan şema içeren nesneler üzerindeki izinler bırakılır. sys, dbo veya information_schema sahibi değiştirilemez.
TYPE Sys veya information_schema'ye ait olan bir TYPE cihazın sahipliğini değiştiremez.
CONTRACT, MESSAGE TYPE veya SERVICE Sistem varlıklarının sahipliği değiştirilemez.
SYMMETRIC KEY Genel geçici anahtarların sahipliği değiştirilemez.
CERTIFICATE veya ASYMMETRIC KEY Bu varlıkların sahipliğini bir rol veya gruba aktaramazsınız.
ENDPOINT Sorumlu bir oturum açma bilgisi olmalıdır.

ALTER AUTHORIZATION veritabanları için

SQL Server için

Yeni sahip için gereksinimler: Yeni sahip sorumlusu aşağıdakilerden biri olmalıdır:

  • SQL Server kimlik doğrulaması oturum açma bilgileri.
  • Bir Windows kullanıcısını (grup değil) temsil eden bir Windows kimlik doğrulaması oturum açma bilgisi.
  • Bir Windows grubunu temsil eden bir Windows kimlik doğrulaması oturum açma bilgileri aracılığıyla kimlik doğrulamasından geçen bir Windows kullanıcısı.

Ifadeyi yürüten ALTER AUTHORIZATION kişi için gereksinimler:Eğer sistem yöneticisi sabit sunucu rolünün üyesi değilseniz, veritabanında en az TAKE OWNERSHIP iznine sahip olmanız ve yeni sahip girişinde IMPERSONATE iznine sahip olmalısınız.

Azure SQL Veritabanı için

Yeni sahip için gereksinimler: Yeni sahip sorumlusu aşağıdakilerden biri olmalıdır:

  • SQL Server kimlik doğrulaması oturum açma bilgileri.
  • Microsoft Entra Kimliği'nde bir federasyon kullanıcısı (grup değil) var.
  • Yönetilen kullanıcı (grup değil) veya Microsoft Entra Id'de bulunan bir uygulama.

Yeni sahip bir Microsoft Entra kullanıcısıysa, yeni sahibin yeni veritabanı sahibi (dbo) olacağı veritabanında kullanıcı olarak bulunamaz. Microsoft Entra kullanıcısı, veritabanı sahipliğini yeni kullanıcıya değiştirme bildirimi yürütmeden ALTER AUTHORIZATION önce veritabanından çıkarılmalıdır. MICROSOFT Entra kullanıcılarını SQL Veritabanı ile yapılandırma hakkında daha fazla bilgi için bkz. Microsoft Entra kimlik doğrulamasını yapılandırma.

Açıklamayı yürüten ALTER AUTHORIZATION kişi için gereksinimler: Veritabanının sahibini değiştirmek için hedef veritabanına bağlanmalısınız.

Aşağıdaki hesap türleri bir veritabanının sahibini değiştirebilir.

  • Azure'da mantıksal sunucu oluşturulduğunda sağlanan SQL yöneticisi olan hizmet düzeyi asıl oturum açma bilgileri.
  • Mantıksal sunucu için Microsoft Entra yöneticisi..
  • Veritabanının geçerli sahibi.

Aşağıdaki tabloda gereksinimleri özetlemektedir:

Executor Target Result
SQL Server Kimlik Doğrulaması oturum açma SQL Server Kimlik Doğrulaması oturum açma Success
SQL Server Kimlik Doğrulaması oturum açma Microsoft Entra kullanıcısı Fail
Microsoft Entra kullanıcısı SQL Server Kimlik Doğrulaması oturum açma Success
Microsoft Entra kullanıcısı Microsoft Entra kullanıcısı Success

Veritabanının Microsoft Entra sahibini doğrulamak için kullanıcı veritabanında (bu örnekte testdb) aşağıdaki Transact-SQL komutunu yürütür.

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

Çıkış, veritabanı sahibi olarak atanan Microsoft Entra kullanıcısının veya hizmet sorumlusunun nesne kimliğine karşılık gelen bir GUID (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXXgibi) olacaktır. Microsoft Entra Id'de kullanıcının nesne kimliğini denetleyerek bunu doğrulayabilirsiniz. Sql Server kimlik doğrulaması oturum açma kullanıcısı veritabanı sahibi olduğunda, veritabanı sahibini doğrulamak için ana veritabanında aşağıdaki deyimi yürütür:

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;

En iyi uygulama

Microsoft Entra kullanıcılarını veritabanının tek tek sahipleri olarak kullanmak yerine , db_owner sabit veritabanı rolünün üyesi olarak bir Microsoft Entra grubu kullanın. Aşağıdaki adımlarda, devre dışı bırakılmış oturum açma bilgilerinin veritabanı sahibi olarak yapılandırılması ve Microsoft Entra grubunun (mydbogroup) db_owner rolüne üye yapılması gösterilmektedir.

  1. SQL Server'da Microsoft Entra yöneticisi olarak oturum açın ve veritabanının sahibini devre dışı bırakılmış bir SQL Server kimlik doğrulaması oturumuyla değiştirin. Örneğin, kullanıcı veritabanından şu komutu yürütür:

    ALTER AUTHORIZATION ON database::testdb TO DisabledLogin;
    
  2. Veritabanına sahip olması gereken bir Microsoft Entra grubu oluşturun ve bunu kullanıcı veritabanına kullanıcı olarak ekleyin. Örneğin:

    CREATE USER [mydbogroup] FROM EXTERNAL PROVIDER;
    
  3. Kullanıcı veritabanında, Microsoft Entra grubunu temsil eden kullanıcıyı db_owner sabit veritabanı rolüne ekleyin. Örneğin:

    ALTER ROLE db_owner ADD MEMBER mydbogroup;
    

mydbogroup Artık üyeler veritabanını db_owner rolünün üyeleri olarak merkezi olarak yönetebilir.

  • Bu grubun üyeleri Microsoft Entra grubundan kaldırıldığında, bu veritabanı için dbo izinlerini otomatik olarak kaybederler.
  • Benzer şekilde, Microsoft Entra grubuna mydbogroup yeni üyeler eklenirse, bu veritabanı için otomatik olarak dbo erişimi kazanırlar.

Belirli bir kullanıcının geçerli dbo iznine sahip olup olmadığını denetlemek için kullanıcının aşağıdaki deyimi yürütmesini sağlayın:

SELECT IS_MEMBER ('db_owner');

1 dönüş değeri, kullanıcının rolün üyesi olduğunu gösterir.

Permissions

Varlık üzerinde SAHIPLIK ALMA izni gerektirir. Yeni sahip bu deyimi yürüten kullanıcı değilse, 1) Bir kullanıcı veya oturum açma ise yeni sahip üzerinde KIMLIĞE BÜRÜNme izni de gerektirir; veya 2) yeni sahip bir rolse, rol üyeliğiyse veya rol üzerinde ALTER izni varsa; veya 3) yeni sahip bir uygulama rolüyse, uygulama rolü üzerinde ALTER izni.

Examples

A. Tablonun sahipliğini aktarma

Aşağıdaki örnek, tablosunun Sprockets sahipliğini kullanıcıya MichikoOsadaaktarır. Tablo şema Partsiçinde bulunur.

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

Sorgu aşağıdaki gibi de görünebilir:

ALTER AUTHORIZATION ON Parts.Sprockets TO MichikoOsada;
GO

Nesne şeması deyiminin bir parçası olarak dahil değilse, Veritabanı Altyapısı nesneyi kullanıcılar varsayılan şemasında arar. Örneğin:

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

B. Bir görünümün sahipliğini şema sahibine aktarma

Aşağıdaki örnek, görünümü içeren şemanın sahibine sahipliği ProductionView06 aktarır. Görünüm şema Productioniçinde bulunur.

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

C. Şemanın sahipliğini kullanıcıya aktarma

Aşağıdaki örnek şemanın SeattleProduction11 sahipliğini kullanıcıya SandraAlayoaktarır.

ALTER AUTHORIZATION ON SCHEMA::SeattleProduction11 TO SandraAlayo;
GO

D. Uç noktanın sahipliğini SQL Server oturum açma bilgilerine aktarma

Aşağıdaki örnek uç noktanın CantabSalesServer1 sahipliğini öğesine JaePakaktarır. Uç nokta sunucu düzeyinde güvenli hale getirilebilir olduğundan, uç nokta yalnızca sunucu düzeyinde bir sorumluya aktarılabilir.

için geçerlidir: SQL Server 2008 (10.0.x) ve üzeri.

ALTER AUTHORIZATION ON ENDPOINT::CantabSalesServer1 TO JaePak;
GO

E. Tablonun sahibini değiştirme

Aşağıdaki örneklerin her biri veritabanındaki Sprockets tablonun Parts sahibini veritabanı kullanıcısı MichikoOsadaolarak değiştirir.

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. Veritabanının sahibini değiştirme

Şunlar için geçerlidir: SQL Server 2008 (10.0.x) ve üzeri, Analiz Platformu Sistemi (PDW), SQL Veritabanı.

Aşağıdaki örnek, veritabanının sahibini Parts oturum açma MichikoOsadaolarak değiştirir.

ALTER AUTHORIZATION ON DATABASE::Parts TO MichikoOsada;

G. Veritabanının sahibini Microsoft Entra kullanıcısı olarak değiştirme

Aşağıdaki örnekte, adlı cqclinic.onmicrosoft.comözel bir Microsoft Entra etki alanına sahip bir kuruluştaki SQL Server için Microsoft Entra yöneticisi, aşağıdaki komutu kullanarak veritabanının targetDB geçerli sahipliğini değiştirebilir ve mevcut bir Microsoft Entra kullanıcısını richel@cqclinic.onmicorsoft.com yeni veritabanı sahibi yapabilir:

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

Ayrıca Bkz.

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