Properti database TRUSTWORTHY
Berlaku untuk:SQL ServerAzure SQL Managed Instance
Properti TRUSTWORTHY
database digunakan untuk menunjukkan apakah instans SQL Server mempercayai database dan konten di dalamnya. Secara default, pengaturan ini NONAKTIF, tetapi dapat diatur ke AKTIF dengan menggunakan ALTER DATABASE
pernyataan . Misalnya: ALTER DATABASE AdventureWorks2022 SET TRUSTWORTHY ON;
.
Catatan
Untuk mengatur opsi ini, Anda harus menjadi anggota peran server tetap sysadmin .
Kami menyarankan agar Anda membiarkan TRUSTWORTHY
properti database diatur ke NONAKTIF untuk mengurangi ancaman tertentu yang bisa ada sebagai akibat melampirkan database yang berisi salah satu objek berikut:
Rakitan berbahaya dengan pengaturan izin EXTERNAL_ACCESS atau TIDAK AMAN. Untuk informasi selengkapnya, lihat Keamanan Integrasi CLR.
Modul berbahaya yang didefinisikan untuk dijalankan sebagai pengguna dengan hak istimewa tinggi. Untuk informasi selengkapnya, lihat EXECUTE AS Clause (Transact-SQL).
Kedua situasi memerlukan tingkat hak istimewa tertentu dan dilindungi oleh mekanisme yang sesuai ketika digunakan dalam konteks database yang sudah dilampirkan ke instans SQL Server. Namun, jika database diambil secara offline, jika Anda memiliki akses ke file database, Anda berpotensi melampirkannya ke instans SQL Server pilihan Anda dan menambahkan konten berbahaya ke database. Ketika database dilepas dan dilampirkan di SQL Server, izin tertentu diatur pada data dan file log yang membatasi akses ke file database.
Karena database yang dilampirkan ke instans SQL Server tidak dapat segera dipercaya, database tidak diizinkan untuk mengakses sumber daya di luar cakupan database hingga database ditandai secara eksplisit dapat dipercaya. Oleh karena itu, jika Anda mencadangkan atau melepaskan database yang memiliki TRUSTWORTHY
opsi AKTIF dan Anda melampirkan atau memulihkan database ke instans SQL Server yang sama atau lainnya, TRUSTWORTHY
properti diatur ke NONAKTIF saat melampirkan atau memulihkan selesai. Selain itu, modul yang dirancang untuk mengakses sumber daya di luar database, dan rakitan dengan pengaturan izin EXTERNAL_ACCESS dan TIDAK AMAN, memiliki persyaratan tambahan untuk berjalan dengan sukses.
Catatan
Secara default, TRUSTWORTHY
pengaturan diatur ke AKTIF untuk msdb
database. Jika Anda mengubah pengaturan ini dari nilai defaultnya, itu mungkin mengakibatkan perilaku tak terduga oleh komponen SQL Server yang menggunakan msdb
database.
TRUSTWORTHY
Jika pengaturan diatur ke AKTIF, dan jika pemilik database adalah anggota grup yang memiliki kredensial administratif, seperti grup sysadmin, pemilik database kemudian dapat membuat dan menjalankan rakitan yang tidak aman yang dapat membahayakan instans SQL Server.
Informasi selengkapnya
Di lingkungan Penyedia Layanan Internet (ISP) (misalnya, dalam layanan hosting web), setiap pelanggan diizinkan untuk mengelola database mereka sendiri dan dibatasi untuk mengakses database sistem dan database pengguna lainnya. Misalnya, database dua perusahaan yang bersaing dapat dihosting oleh ISP yang sama dan ada dalam instans SQL Server yang sama. Kode berbahaya dapat ditambahkan ke database pengguna ketika database dilampirkan ke instans aslinya, dan kode akan diaktifkan pada instans ISP saat database disebarkan. Situasi ini membuat pengendalian akses lintas database sangat penting.
Jika entitas umum yang sama memiliki dan mengelola setiap database, masih bukan praktik yang baik untuk membangun hubungan kepercayaan dengan database kecuali fitur khusus aplikasi, seperti komunikasi Service Broker lintas database, diperlukan. Hubungan kepercayaan antara database dapat dibuat dengan mengaktifkan rantai kepemilikan lintas database atau dengan menandai database sebagai tepercaya oleh instans menggunakan TRUSTWORTHY
properti . Kolom is_trustworthy_on
sys.databases
tampilan katalog menunjukkan apakah database memiliki kumpulan propertinya TRUSTWORTHY
.
Praktik terbaik untuk kepemilikan dan kepercayaan database meliputi yang berikut ini:
- Memiliki pemilik yang berbeda untuk database. Tidak semua database harus dimiliki oleh administrator sistem.
- Batasi jumlah pemilik untuk setiap database.
- Menganugerah kepercayaan secara selektif.
- Biarkan pengaturan rantai kepemilikan cross db diatur ke NONAKTIF kecuali beberapa database disebarkan pada satu unit.
- Migrasikan penggunaan ke kepercayaan selektif alih-alih menggunakan
TRUSTWORTHY
properti .
Sampel kode berikut dapat digunakan untuk mendapatkan daftar database yang propertinya diatur TRUSTWORTHY
ke AKTIF dan pemilik databasenya termasuk dalam peran server sysadmin .
SELECT SUSER_SNAME(owner_sid) AS DBOWNER,
d.name AS DATABASENAME
FROM sys.server_principals r
INNER JOIN sys.server_role_members m ON r.principal_id = m.role_principal_id
INNER JOIN sys.server_principals p ON p.principal_id = m.member_principal_id
INNER JOIN sys.databases d ON suser_sname(d.owner_sid) = p.name
WHERE is_trustworthy_on = 1
AND d.name NOT IN ('msdb')
AND r.type = 'R'
AND r.name = N'sysadmin';
GO
Anda bisa menjalankan kueri berikut untuk menentukan TRUSTWORTHY
properti msdb
database:
SELECT name,
trustworthy_setting = CASE is_trustworthy_on
WHEN 1 THEN 'Trustworthy setting is ON for msdb'
ELSE 'Trustworthy setting is OFF for msdb'
END
FROM sys.databases
WHERE database_id = 4;
GO
Jika kueri ini memperlihatkan bahwa TRUSTWORTHY
properti diatur ke NONAKTIF, Anda bisa menjalankan kueri berikut untuk mengatur properti ke TRUSTWORTHY
AKTIF.
ALTER DATABASE msdb SET TRUSTWORTHY ON;
GO
Peringatan
Ada cara untuk meningkatkan pengguna dengan db_owner
peran untuk menjadi sysadmin
saat mengatur TRUSTWORTHY
ke AKTIF. Berhati-hatilah saat menggunakan TRUSTWORTHY
properti . Kode SQL berikut dapat digunakan untuk mendapatkan daftar pengguna database dalam database yang diberikan peran tersebut db_owner
.
SELECT roles.principal_id AS RolePrincipalID
, roles.name AS RolePrincipalName
, database_role_members.member_principal_id AS MemberPrincipalID
, members.name AS MemberPrincipalName
FROM sys.database_role_members AS database_role_members
JOIN sys.database_principals AS roles
ON database_role_members.role_principal_id = roles.principal_id
JOIN sys.database_principals AS members
ON database_role_members.member_principal_id = members.principal_id where roles.name='db_owner' and members.name <>'dbo'
GO
Langkah berikutnya
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk