Prinsipal basis data memiliki skema dalam basis data, dan tidak dapat dijatuhkan pesan

28

Saya mencoba menghapus prinsipal dari database tetapi tidak bisa karena memiliki skema. Ketika saya pergi untuk mengedit pengguna, kotak untuk menghapus centang skema berwarna biru dan tidak dapat dihapus. Bagaimana saya bisa menghapus kepala sekolah dari skema ini?

terutama
sumber

Jawaban:

31

Coba T-SQL untuk melakukan ini:

alter authorization
on schema::YourSchemaName
to dbo
go

drop user TheUserYouWantToDelete
go

Anda tidak dapat menjatuhkan prinsipal yang merupakan pemilik skema, sehingga ALTER AUTHORZATIONperubahan skema yang dimiliki (saya gunakan YourSchemaName, tapi jelas menggantikannya dengan skema yang dimiliki dalam database Anda) untuk dbo(juga, Anda dapat mengubah kepemilikan ke prinsip apa pun yang Anda butuhkan di lingkungan Hidup). Itu akan memungkinkan Anda untuk menjatuhkan pengguna yang sebelumnya memiliki skema (misalnya tujuan yang saya gunakan TheUserYouWantToDelete, tetapi itu akan menjadi bukan pemilik yang ingin Anda jatuhkan).

Thomas Stringer
sumber
Oke, jadi ini berhasil. Namun saya agak bingung mengapa. Mengapa saya perlu mengotorisasi skema ke skema lain? Mungkin saya perlu meninjau skema ...
rsteckly
1
@ benar-benar Sederhana, otorisasi = kepemilikan. Jika Anda dapat menghapus pengguna yang memiliki skema, skema tersebut tidak akan valid, karena pemiliknya tidak ada lagi. Bayangkan Anda bisa menghapus pelanggan yang telah melakukan pemesanan. Apa yang dimaksud dengan CustomerID dalam tabel Pesanan jika tidak ada lagi Pelanggan yang ditunjuknya? Di mana saya harus mengirimkan pesanan?
Aaron Bertrand
Maaf, contoh saya tidak dijelaskan dengan baik. Kami tidak mengubah otorisasi ke dboskema, kami mengubah otorisasi ke dboprinsipal. Itu bisa saja prinsipal basis data apa pun.
Thomas Stringer
30

Cara T-SQL bekerja. Berkat http://zarez.net/?p=179 saya menemukan cara SSMS untuk melakukan ini (UI).

Untuk mengubah pemilik skema dari Sql Server Management Studio:

Expand your database -> Security -> Schemas

Di Rincian Penjelajah Objek, Anda dapat melihat daftar skema dan pemilik:

masukkan deskripsi gambar di sini

Jika Anda tidak tahu skema apa yang dimiliki Pengguna, periksa properti Pengguna.

masukkan deskripsi gambar di sini

Buka properti skema yang dimiliki Pengguna, dan klik "Cari" untuk menemukan pemilik baru. Jika Anda tidak tahu pemilik baru, Anda bisa "Jelajahi" untuk satu.

Properites -> Search -> Browse

dan Anda dapat mengubah pemilik skema menjadi dbo (atau siapa pun yang paling tepat).

masukkan deskripsi gambar di sini

woodvi
sumber
1
Cara T-SQL jauh lebih baik dan fleksibel. Melakukannya melalui GUI selalu menyakitkan!
Kin Shah
Saya semua untuk cara T-SQL, juga karena dapat digunakan dalam skrip.
woodvi
2
Catatan: F7 adalah jalan pintas untuk menampilkan detail jika tidak muncul
Simon_Weaver