Mengapa database MSDB TRUSTWORTHY?

9

The TRUSTWORTHYPengaturan bisa lebih berbahaya jika Anda tidak hati-hati dan kecuali untuk keadaan tertentu rekomendasinya adalah untuk tetap dimatikan. Namun secara default MSDBdatabase telah TRUSTWORHTYditetapkan ONsecara default. Saya penasaran kenapa?

Saya sudah membaca entri ini di BOL

Catatan Secara default, pengaturan TRUSTWORTHY diatur ke AKTIF untuk database MSDB. Mengubah pengaturan ini dari nilai defaultnya dapat mengakibatkan perilaku yang tidak terduga oleh komponen SQL Server yang menggunakan database MSDB.

Tapi saya ingin tahu tentang spesifikasinya. Mengapa secara khusus MSDBperlu TRUSTWORTHYdihidupkan? Fungsi apa yang menggunakannya?

Kenneth Fisher
sumber
2
Hanya pemikiran cepat tanpa riset untuk MENGAPA akan jadi layanan SQL Agent dapat berinteraksi dengan semua DB pada contoh, untuk menggunakan surat DB untuk pemberitahuan, sumber daya eksternal lainnya; jalur, objek AD, dll dalam pekerjaan SQL Agent.
Pimp Juice
1
@JUICED_IT juga riwayat pekerjaan SQL Agent, riwayat monitor pengiriman log, paket SSIS, data Database Engine Tuning Advisor, dan data antrian Broker Layanan, serta informasi cadangan. Ada banyak hal yang Anda inginkan dari perilaku standar. sqlperformance.com/2015/07/sql-maintenance/msdb
ConstantineK
Saya menduga itu diperlukan untuk apa pun yang menggunakan panggilan lintas basis data. Anda harus beralih TRUSTWORTHYke OFF untuk msdbmelihat apa yang berhenti berfungsi dan Anda akan memiliki setidaknya sebagian dari jawabannya :). Saya pikir CADANGAN akan memiliki masalah tetapi saya hanya mencoba dan berhasil.
Solomon Rutzky

Jawaban:

3

Ada lusinan objek dalam msdbreferensi itu masterdatabase.

Jika msdb tidak ditandai TRUSTWORTHY, maka pengguna akan memerlukan izin untuk kedua msdbobjek yang berinteraksi dengan mereka, ditambah masterobjek yang sedang direferensikan.

Sebagai contoh, pengguna msdb yang mendapatkan izin melalui peran database SQLAgentUserRole diberikan untuk dieksekusi msdb.dbo.sp_enum_sqlagent_subsystems. Tumpukan panggilan untuk prosedur itu akhirnya mengenai master:

* msdb.dbo.sp_enum_sqlagent_subsystems
    * msdb.dbo.sp_enum_sqlagent_subsystems_internal
        * master.dbo.xp_instance_regread

Jika msdbtidak ditandai sebagai TRUSTWORTHY, maka pengguna yang merupakan bagian dari peran basis data SQLAgentUserRole JUGA perlu mengeksekusi master.dbo.xp_instance_regread.

Secara teknis, mungkin untuk menghapus TRUSTWORTHYpengaturan msdbdan bukannya memberikan izin khusus di master. Namun, izin yang diperlukan itu tidak didokumentasikan atau didukung.

AMtwo
sumber
Anda mungkin benar tetapi jika demikian maka sama pentingnya bahwa pemilik MSDB memiliki izin tersebut.
Kenneth Fisher
@KennethFisher Mungkin? Saya biasanya tidak mengacaukan pemilik database untuk msdb, jadi saya tidak yakin. Saya selalu meninggalkannya sebagai sa. Saya secara sah tidak memikirkan hal itu.
AMtwo
Ahh tetapi jika saya memiliki izin yang tepat di MSDB, saya dapat menggunakan akses itu bersama dengan TRUSTWORTHY untuk mengambil alih server Anda :)
Kenneth Fisher
Benar. Tapi ini sebabnya akses ke sistem DB harus dibatasi dengan hati-hati. Jika Anda bukan DBA, Anda tidak perlu masuk ke database sistem.
AMtwo