ALTER AUTHORIZATION (Transact-SQL)

Berlaku untuk: SQL Server (semua versi yang didukung) Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW)

Mengubah kepemilikan yang dapat diamankan.

tautan topikIkon Konvensi Sintaks Transact-SQL

Sintaks

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

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 dan 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 dan yang lebih baru, Azure SQL Database, Azure Synapse Analytics, Analytics Platform System (PDW).
RAKITAN Berlaku untuk: SQL Server 2008 dan yang lebih baru, Azure SQL Database.
KUNCI ASIMETRIS Berlaku untuk: SQL Server 2008 dan yang lebih baru, Azure SQL Database.
GRUP KETERSEDIAAN Berlaku untuk: SQL Server 2012 dan yang lebih baru.
SERTIFIKAT Berlaku untuk: SQL Server 2008 dan yang lebih baru, Azure SQL Database.
KONTRAK Berlaku untuk: SQL Server 2008 dan yang lebih baru.
DATABASE Berlaku untuk: SQL Server 2008 dan yang lebih baru, Azure SQL Database. Untuk informasi selengkapnya, lihat MENGUBAH OTORISASI untuk database.
ENDPOINT Berlaku untuk: SQL Server 2008 dan yang lebih baru.
KATALOG TEKS LENGKAP Berlaku untuk: SQL Server 2008 dan yang lebih baru, Azure SQL Database.
DAFTAR HENTI TEKS PENUH Berlaku untuk: SQL Server 2008 dan yang lebih baru, Azure SQL Database.
JENIS PESAN Berlaku untuk: SQL Server 2008 dan yang lebih baru.
PENGIKATAN LAYANAN JARAK JAUH Berlaku untuk: SQL Server 2008 dan yang lebih baru.
PERAN Berlaku untuk: SQL Server 2008 dan yang lebih baru, Azure SQL Database.
RUTE Berlaku untuk: SQL Server 2008 dan yang lebih baru.
SKEMA Berlaku untuk: SQL Server 2008 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 dan yang lebih baru.
LAYANAN Berlaku untuk: SQL Server 2008 dan yang lebih baru.
KUNCI KONTEN Berlaku untuk: SQL Server 2008 dan yang lebih baru, Azure SQL Database.
JENIS Berlaku untuk: SQL Server 2008 dan yang lebih baru, Azure SQL Database.
KOLEKSI SKEMA XML Berlaku untuk: SQL Server 2008 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 sebelumnya. 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 ini tidak dapat ditransfer: server, login, pengguna, peran aplikasi, dan kolom.

Opsi PEMILIK SKEMA hanya valid ketika Anda mentransfer kepemilikan entitas yang terkandung skema. SCHEMA OWNER 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

Pada SQL Server 2005 (9.x), perilaku skema berubah dari perilaku dalam 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 mempertimbangkan pemisahan prinsipal dan skema yang diperkenalkan pada 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.
JENIS Tidak dapat mengubah kepemilikan TYPE yang termasuk dalam 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 salah satu dari yang berikut ini:

  • 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 salah satu dari yang berikut ini:

  • Login autentikasi SQL Server.
  • Pengguna federasi (bukan grup) ada di Azure AD.
  • Pengguna terkelola (bukan grup) atau aplikasi yang ada di Azure AD.

Jika pemilik baru adalah pengguna Azure Active Directory, itu tidak bisa ada sebagai pengguna dalam database di mana pemilik baru akan menjadi DBO baru. Pengguna Azure AD tersebut harus terlebih dahulu dihapus dari database sebelum menjalankan pernyataan ALTER AUTHORIZATION yang mengubah kepemilikan database ke pengguna baru. Untuk informasi selengkapnya tentang mengonfigurasi pengguna Azure Active Directory dengan SQL Database, lihat Menyambungkan ke SQL Database atau Azure Synapse Analytics Dengan Menggunakan Autentikasi Azure Active Directory.

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

Tipe akun berikut ini bisa mengubah pemilik database.

  • Login utama tingkat layanan. (Administrator SQL Azure yang disediakan saat server SQL Database dibuat.)
  • Administrator Azure Active Directory untuk server Azure SQL.
  • Pemilik database saat ini.

Tabel berikut ini meringkas persyaratan:

Eksekutor Target Hasil
SQL Server login Autentikasi SQL Server login Autentikasi Berhasil
SQL Server login Autentikasi Pengguna Azure Active Directory Gagal
Pengguna Azure Active Directory SQL Server login Autentikasi Berhasil
Pengguna Azure Active Directory Pengguna Azure Active Directory Berhasil

Untuk memverifikasi pemilik Azure AD 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 pengidentifikasi (seperti 6D8B81F6-7C79-444C-8858-4AF896C03C67) yang sesuai dengan Azure AD ObjectID yang ditetapkan ke richel@cqclinic.onmicrosoft.com Ketika pengguna login autentikasi SQL Server adalah pemilik database, jalankan pernyataan berikut dalam 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 Azure AD sebagai pemilik individual database, gunakan grup Azure AD sebagai anggota peran database tetap db_owner. Langkah-langkah berikut, memperlihatkan cara mengonfigurasi login yang dinonaktifkan sebagai pemilik database, dan membuat grup Azure Active Directory (mydbogroup) sebagai anggota peran db_owner .

  1. Masuk ke SQL Server sebagai admin Azure AD, 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 Azure AD yang harus memiliki database dan menambahkannya sebagai pengguna ke database pengguna. Contohnya:

    CREATE USER [mydbogroup] FROM EXTERNAL PROVIDER;
    
  3. Dalam database pengguna, tambahkan pengguna yang mewakili grup Azure AD, 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 Azure AD, mereka secara otomatis kehilangan izin dbo untuk database ini.
  • Demikian pula jika anggota baru ditambahkan ke mydbogroup grup Azure AD, 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 yang dikembalikan 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 merupakan pengguna atau login; atau 2) jika pemilik baru adalah peran, keanggotaan dalam peran, atau izin UBAH pada peran; atau 3) jika pemilik baru adalah peran aplikasi, UBAH izin pada peran aplikasi.

Contoh

A. 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 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 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 SQL Database menjadi Pengguna Azure AD

Dalam contoh berikut, administrator Azure Active Directory untuk SQL Server di organisasi dengan direktori aktif bernama cqclinic.onmicrosoft.com, bisa mengubah kepemilikan database targetDB saat ini dan menjadikan pengguna richel@cqclinic.onmicorsoft.com AAD sebagai pemilik database baru menggunakan perintah berikut:

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

Azure AD memerlukan tanda kurung siku [] di sekitar nama pengguna.

Lihat juga

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