ALTER AUTHORIZATION (Transact-SQL)

Berlaku untuk:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics AnalyticsPlatform System (PDW)Titik akhir analitik SQL di Microsoft FabricWarehouse di Microsoft Fabric

Mengubah kepemilikan yang dapat diamankan.

Konvensi sintaks transact-SQL

Catatan

ID Microsoft Entra sebelumnya dikenal sebagai Azure Active Directory (Azure AD).

Sintaksis

-- 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
    }

Catatan

Sintaks ini tidak didukung oleh kumpulan SQL tanpa server di Azure Synapse Analytics.

Catatan

Untuk melihat sintaks Transact-SQL untuk SQL Server 2014 (12.x) dan versi yang lebih lama, lihat Dokumentasi versi sebelumnya.

Argumen

<> class_type Adalah kelas entitas yang dapat diamankan tempat pemilik diubah. OBJECT adalah default.

Kelas Produk
OBJECT Berlaku untuk: SQL Server 2008 (10.0.x) dan yang lebih baru, Azure SQL Database, Azure Synapse Analytics, Analytics Platform System (PDW).
RAKITAN Berlaku untuk: SQL Server 2008 (10.0.x) dan yang lebih baru, Azure SQL Database.
KUNCI ASIMETRIS Berlaku untuk: SQL Server 2008 (10.0.x) dan yang lebih baru, Azure SQL Database.
GRUP KETERSEDIAAN Berlaku untuk: SQL Server 2012 dan yang lebih baru.
SERTIFIKAT Berlaku untuk: SQL Server 2008 (10.0.x) dan yang lebih baru, Azure SQL Database.
KONTRAK Berlaku untuk: SQL Server 2008 (10.0.x) dan yang lebih baru.
DATABASE Berlaku untuk: SQL Server 2008 (10.0.x) dan yang lebih baru, Azure SQL Database. Untuk informasi selengkapnya, lihat MENGUBAH OTORISASI untuk database.
ENDPOINT Berlaku untuk: SQL Server 2008 (10.0.x) dan yang lebih baru.
KATALOG TEKS LENGKAP Berlaku untuk: SQL Server 2008 (10.0.x) dan yang lebih baru, Azure SQL Database.
DAFTAR HENTI TEKS PENUH Berlaku untuk: SQL Server 2008 (10.0.x) dan yang lebih baru, Azure SQL Database.
JENIS PESAN Berlaku untuk: SQL Server 2008 (10.0.x) dan yang lebih baru.
PENGIKATAN LAYANAN JARAK JAUH Berlaku untuk: SQL Server 2008 (10.0.x) dan yang lebih baru.
PERAN Berlaku untuk: SQL Server 2008 (10.0.x) dan yang lebih baru, Azure SQL Database.
RUTE Berlaku untuk: SQL Server 2008 (10.0.x) dan yang lebih baru.
SKEMA Berlaku untuk: SQL Server 2008 (10.0.x) dan yang lebih baru, Azure SQL Database, Azure Synapse Analytics, Analytics Platform System (PDW).
DAFTAR PROPERTI PENCARIAN Berlaku untuk: SQL Server 2012 (11.x) dan yang lebih baru, Azure SQL Database.
PERAN SERVER Berlaku untuk: SQL Server 2008 (10.0.x) dan yang lebih baru.
LAYANAN Berlaku untuk: SQL Server 2008 (10.0.x) dan yang lebih baru.
KUNCI KONTEN Berlaku untuk: SQL Server 2008 (10.0.x) dan yang lebih baru, Azure SQL Database.
TYPE Berlaku untuk: SQL Server 2008 (10.0.x) dan yang lebih baru, Azure SQL Database.
KOLEKSI SKEMA XML Berlaku untuk: SQL Server 2008 (10.0.x) dan yang lebih baru, Azure SQL Database.

entity_name Adalah nama entitas.

principal_name | Nama PEMILIK SKEMA dari prinsip keamanan yang akan memiliki entitas. Objek database harus dimiliki oleh prinsipal database; pengguna atau peran database. Objek server (seperti database) harus dimiliki oleh prinsipal server (login). Tentukan PEMILIK SKEMA sebagai *principal_name- untuk menunjukkan bahwa objek harus dimiliki oleh prinsipal yang memiliki skema objek.

Keterangan

ALTER AUTHORIZATION dapat digunakan untuk mengubah kepemilikan entitas apa pun yang memiliki pemilik. Kepemilikan entitas yang terkandung dalam database dapat ditransfer ke prinsipal tingkat database apa pun. Kepemilikan entitas tingkat server hanya dapat ditransfer ke prinsipal tingkat server.

Penting

Dimulai dengan SQL Server 2005 (9.x), pengguna dapat memiliki OBJECT atau TYPE yang dimuat oleh skema yang dimiliki oleh pengguna database lain. Ini adalah perubahan perilaku dari versi SQL Server yang lebih lama. Untuk informasi selengkapnya, lihat OBJECTPROPERTY (Transact-SQL) dan TYPEPROPERTY (Transact-SQL).

Kepemilikan entitas jenis "objek" yang berisi skema berikut dapat ditransfer: tabel, tampilan, fungsi, prosedur, antrean, dan sinonim.

Kepemilikan entitas berikut tidak dapat ditransfer: server tertaut, statistik, batasan, aturan, default, pemicu, antrean Service Broker, kredensial, fungsi partisi, skema partisi, kunci master database, kunci master layanan, dan pemberitahuan peristiwa.

Kepemilikan anggota kelas yang dapat diamankan berikut tidak dapat ditransfer: server, login, pengguna, peran aplikasi, dan kolom.

Opsi PEMILIK SKEMA hanya valid saat Anda mentransfer kepemilikan entitas yang berisi skema. PEMILIK SKEMA akan mentransfer kepemilikan entitas kepada pemilik skema tempatnya berada. Hanya entitas kelas OBJECT, TYPE, atau XML SCHEMA COLLECTION yang berisi skema.

Jika entitas target bukan database dan entitas sedang ditransfer ke pemilik baru, semua izin pada target akan dihilangkan.

Perhatian

Di SQL Server 2005 (9.x), perilaku skema berubah dari perilaku di versi SQL Server sebelumnya. Kode yang mengasumsikan bahwa skema setara dengan pengguna database mungkin tidak mengembalikan hasil yang benar. Tampilan katalog lama, termasuk sysobjects, tidak boleh digunakan dalam database di mana salah satu pernyataan DDL berikut pernah digunakan: CREATE SCHEMA, ALTER SCHEMA, DROP SCHEMA, CREATE USER, ALTER USER, DROP USER, CREATE ROLE, ALTER ROLE, DROP ROLE, CREATE APPROLE, ALTER APPROLE, DROP APPROLE, ALTER AUTHORIZATION. Dalam database di mana salah satu pernyataan ini pernah digunakan, Anda harus menggunakan tampilan katalog baru. Tampilan katalog baru memperhitungkan pemisahan prinsipal dan skema yang diperkenalkan di SQL Server 2005 (9.x). Untuk informasi selengkapnya tentang tampilan katalog, lihat Tampilan Katalog (Transact-SQL).

Perhatikan juga hal-hal berikut:

Penting

Satu-satunya cara yang dapat diandalkan untuk menemukan pemilik objek adalah dengan mengkueri tampilan katalog sys.objects . Satu-satunya cara yang dapat diandalkan untuk menemukan pemilik jenis adalah dengan menggunakan fungsi TYPEPROPERTY.

Kasus dan Kondisi Khusus

Tabel berikut ini mencantumkan kasus, pengecualian, dan kondisi khusus yang berlaku untuk mengubah otorisasi.

Kelas Kondisi
OBJECT Tidak dapat mengubah kepemilikan pemicu, batasan, aturan, default, statistik, objek sistem, antrean, tampilan terindeks, atau tabel dengan tampilan terindeks.
SKEMA Ketika kepemilikan ditransfer, izin pada objek yang berisi skema yang tidak memiliki pemilik eksplisit akan dihilangkan. Tidak dapat mengubah pemilik sys, dbo, atau information_schema.
TYPE Tidak dapat mengubah kepemilikan TYPE milik sys atau information_schema.
KONTRAK, JENIS PESAN, atau LAYANAN Tidak dapat mengubah kepemilikan entitas sistem.
KUNCI KONTEN Tidak dapat mengubah kepemilikan kunci sementara global.
SERTIFIKAT atau KUNCI ASIMETRIS Tidak dapat mentransfer kepemilikan entitas ini ke peran atau grup.
ENDPOINT Prinsipal harus masuk.

ALTER AUTHORIZATION untuk database

Untuk SQL Server

Persyaratan untuk pemilik baru: Prinsipal pemilik baru harus menjadi salah satu hal berikut:

  • Login autentikasi SQL Server.
  • Login autentikasi Windows yang mewakili pengguna Windows (bukan grup).
  • Pengguna Windows yang mengautentikasi melalui login autentikasi Windows yang mewakili grup Windows.

Persyaratan untuk orang yang menjalankan pernyataan ALTER AUTHORIZATION: Jika Anda bukan anggota peran server tetap sysadmin , Anda harus memiliki setidaknya izin TAKE OWNERSHIP pada database, dan harus memiliki izin IMPERSONATE pada login pemilik baru.

Untuk Azure SQL Database

Persyaratan untuk pemilik baru: Prinsipal pemilik baru harus menjadi salah satu hal berikut:

  • Login autentikasi SQL Server.
  • Pengguna gabungan (bukan grup) yang ada di ID Microsoft Entra.
  • Pengguna terkelola (bukan grup) atau aplikasi yang ada di ID Microsoft Entra.

Jika pemilik baru adalah pengguna Microsoft Entra, itu tidak dapat ada sebagai pengguna dalam database di mana pemilik baru akan menjadi pemilik database baru (dbo). Pengguna Microsoft Entra harus terlebih dahulu dihapus dari database sebelum menjalankan pernyataan ALTER AUTHORIZATION yang mengubah kepemilikan database ke pengguna baru. Untuk informasi selengkapnya tentang mengonfigurasi pengguna Microsoft Entra dengan SQL Database, lihat Mengonfigurasi autentikasi Microsoft Entra.

Persyaratan untuk orang yang menjalankan pernyataan ALTER AUTHORIZATION: Anda harus tersambung ke database target untuk mengubah pemilik database tersebut.

Tipe akun berikut dapat mengubah pemilik database.

  • Login utama tingkat layanan, yang merupakan administrator SQL yang disediakan saat server logis di Azure dibuat.
  • Administrator Microsoft Entra untuk server logis..
  • Pemilik database saat ini.

Tabel berikut ini meringkas persyaratan:

Eksekutor Target Hasil
Login Autentikasi SQL Server Login Autentikasi SQL Server Berhasil
Login Autentikasi SQL Server Pengguna Microsoft Entra Gagal
Pengguna Microsoft Entra Login Autentikasi SQL Server Berhasil
Pengguna Microsoft Entra Pengguna Microsoft Entra Berhasil

Untuk memverifikasi pemilik Microsoft Entra database, jalankan perintah Transact-SQL berikut dalam database pengguna (dalam contoh testdbini ).

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

Output akan menjadi GUID (seperti XXXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXX) yang sesuai dengan ID objek pengguna Microsoft Entra atau perwakilan layanan yang ditetapkan sebagai pemilik database. Anda dapat memverifikasi ini dengan memeriksa ID objek pengguna di ID Microsoft Entra. Saat pengguna masuk autentikasi SQL Server adalah pemilik database, jalankan pernyataan berikut di database master untuk memverifikasi pemilik database:

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;

Praktik terbaik

Alih-alih menggunakan pengguna Microsoft Entra sebagai pemilik individual database, gunakan grup Microsoft Entra sebagai anggota peran database tetap db_owner . Langkah-langkah berikut menunjukkan cara mengonfigurasi login yang dinonaktifkan sebagai pemilik database, dan menjadikan grup Microsoft Entra (mydbogroup) sebagai anggota peran db_owner .

  1. Masuk ke SQL Server sebagai admin Microsoft Entra, dan ubah pemilik database menjadi login autentikasi SQL Server yang dinonaktifkan. Misalnya, dari database pengguna jalankan:

    ALTER AUTHORIZATION ON database::testdb TO DisabledLogin;
    
  2. Buat grup Microsoft Entra yang harus memiliki database dan tambahkan sebagai pengguna ke database pengguna. Contohnya:

    CREATE USER [mydbogroup] FROM EXTERNAL PROVIDER;
    
  3. Dalam database pengguna, tambahkan pengguna yang mewakili grup Microsoft Entra, ke peran database tetap db_owner . Contohnya:

    ALTER ROLE db_owner ADD MEMBER mydbogroup;
    

Sekarang anggota mydbogroup dapat mengelola database secara terpusat sebagai anggota peran db_owner .

  • Ketika anggota grup ini dihapus dari grup Microsoft Entra, mereka secara otomatis kehilangan izin dbo untuk database ini.
  • Demikian pula jika anggota baru ditambahkan ke mydbogroup grup Microsoft Entra, mereka secara otomatis mendapatkan akses dbo untuk database ini.

Untuk memeriksa apakah pengguna tertentu memiliki izin dbo yang efektif, minta pengguna menjalankan pernyataan berikut:

SELECT IS_MEMBER ('db_owner');

Nilai pengembalian 1 menunjukkan bahwa pengguna adalah anggota peran.

Izin

Memerlukan izin TAKE OWNERSHIP pada entitas. Jika pemilik baru bukan pengguna yang menjalankan pernyataan ini, juga memerlukan, 1) izin IMPERSONATE pada pemilik baru jika itu adalah pengguna atau login; atau 2) jika pemilik baru adalah peran, keanggotaan dalam peran, atau izin ALTER pada peran; atau 3) jika pemilik baru adalah peran aplikasi, UBAH izin pada peran aplikasi.

Contoh

J. Mentransfer kepemilikan tabel

Contoh berikut mentransfer kepemilikan tabel Sprockets kepada pengguna MichikoOsada. Tabel terletak di dalam skema Parts.

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

Kueri juga bisa terlihat seperti berikut ini:

ALTER AUTHORIZATION ON Parts.Sprockets TO MichikoOsada;
GO

Jika skema objek tidak disertakan sebagai bagian dari pernyataan, Mesin Database akan mencari objek dalam skema default pengguna. Contohnya:

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

B. Mentransfer kepemilikan tampilan ke pemilik skema

Contoh berikut mentransfer kepemilikan tampilan ProductionView06 kepada pemilik skema yang berisinya. Tampilan terletak di dalam skema Production.

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

C. Mentransfer kepemilikan skema ke pengguna

Contoh berikut mentransfer kepemilikan skema SeattleProduction11 kepada pengguna SandraAlayo.

ALTER AUTHORIZATION ON SCHEMA::SeattleProduction11 TO SandraAlayo;
GO

D. Mentransfer kepemilikan titik akhir ke login SQL Server

Contoh berikut mentransfer kepemilikan titik CantabSalesServer1 akhir ke JaePak. Karena titik akhir adalah tingkat server yang dapat diamankan, titik akhir hanya dapat ditransfer ke prinsipal tingkat server.

Berlaku untuk: SQL Server 2008 (10.0.x) dan yang lebih baru.

ALTER AUTHORIZATION ON ENDPOINT::CantabSalesServer1 TO JaePak;
GO

E. Mengubah pemilik tabel

Setiap contoh berikut mengubah pemilik Sprockets tabel dalam Parts database menjadi pengguna MichikoOsadadatabase .

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. Mengubah pemilik database

Berlaku untuk: SQL Server 2008 (10.0.x) dan yang lebih baru, Analytics Platform System (PDW), SQL Database.

Contoh berikut mengubah pemilik Parts database ke login MichikoOsada.

ALTER AUTHORIZATION ON DATABASE::Parts TO MichikoOsada;

G. Mengubah pemilik database ke pengguna Microsoft Entra

Dalam contoh berikut, administrator Microsoft Entra untuk SQL Server di organisasi dengan domain Microsoft Entra kustom bernama cqclinic.onmicrosoft.com, dapat mengubah kepemilikan database targetDB saat ini dan menjadikan pengguna richel@cqclinic.onmicorsoft.com Microsoft Entra yang sudah ada sebagai pemilik database baru menggunakan perintah berikut:

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

Lihat Juga

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