Apa tujuan dari 'pemilik' database?

46

Hari ini ketika memecahkan masalah pialang layanan, saya menemukan bahwa pemilik database adalah login Windows dari seorang karyawan yang telah meninggalkan perusahaan. Info masuknya telah dihapus dan pemberitahuan permintaan gagal.

Seharusnya praktik terbaik untuk menangani ini adalah membuat 'sa' pemilik basis data. Kami mengubahnya dan itu membersihkan antrian.

Pertanyaan saya (sangat mendasar): apa pemilik basis data dan apa tujuannya?

8kb
sumber
Bagaimana Anda mengubah pemilik database menjadi 'sa'? Saya seorang Tek GIS yang bekerja untuk pemerintah daerah. GIS Tech lama dipecat dan sangat sedikit orang di sekitar sini yang tahu banyak tentang GIS. Sepertinya saya tidak bisa memberi diri saya izin untuk mengedit database karena saya bukan pemiliknya. Bagaimana cara mengubah kepemilikan?

Jawaban:

53

Ada beberapa kebingungan di luar sana antara konsep basis data 'dbo' (pengguna) dan 'db_owner' (peran tetap) di satu sisi dan konsep contoh 'pemilik basis data' di sisi lain. 'Dbo' dan 'db_owner' sering disebut 'pemilik basis data'. Dalam apa yang Anda tanyakan, Anda berbicara tentang pemilik basis data sebagai kepala server yang memiliki basis data.

Teorinya seperti ini: segala sesuatu yang dapat diberikan izin adalah 'aman' . Semua yang dapat diamankan memiliki pemilik. Pemilik surat berharga memiliki kendali mutlak atas surat berharga dan tidak dapat ditolak hak istimewa apa pun. Keamanan tingkat instance dimiliki oleh prinsipal server (login). Keamanan tingkat basis data dimiliki oleh prinsipal basis data (pengguna). Kepala sekolah datang dalam dua rasa: primer (identitas) dan sekunder (keanggotaan). Keamanan tingkat server secara default dimiliki oleh prinsipal server primer yang saat ini dicatat. Keamanan tingkat basis data dimiliki secara default oleh prinsipal basis data saat ini, kecuali untuk objek terikat skema yang secara default dimiliki oleh pemilik skema. Semua yang dapat diamankan mendukung klausa OTORISASI pada saat membuat untuk menegakkan pemilik yang berbeda.ALTER AUTHORIZATION nantinya dapat digunakan untuk mengubah pemilik yang dapat diamankan.

Karena basis data adalah tingkat server yang dapat diamankan, maka ia akan, secara default, dimiliki oleh kepala sekolah utama yang mengeluarkan pernyataan CREATE DATABASE. Yaitu. login NT dari karyawan yang berangkat.

Jadi pertanyaan Anda benar-benar " Mengapa barang-barang keamanan memerlukan pemilik? ". Karena pemilik adalah akar kepercayaan. Pemiliklah yang memberikan, menyangkal, dan mencabut izin pada objek. Bisakah sistem keamanan dirancang tanpa pemilik yang dapat diamankan? Mungkin ya, tetapi harus ada mekanisme untuk menggantikan peran yang dimainkan pemilik dalam model saat ini. Misalnya, pertimbangkan bahwa ayah yang dapat diamankan tidak memiliki pemilik (mis. Alih-alih memiliki yang dapat diamankan, pencipta asli hanya diberikan PENGENDALIAN atasnya) akan mungkin membuat akses yang aman dan mencabutnya untuk semua orang , termasuk dirinya sendiri. Persyaratan pemilik menghindari masalah ini karena pemilik tidak dapat mengunci dirinya sendiri.

Efek samping yang sedikit diketahui dari CREATE DATABASE dalam menciptakan sebuah keamanan (database) yang dimiliki oleh login NT asli telah membakar banyak sebelumnya. Aturannya sama untuk setiap yang bisa diamankan, tetapi beberapa faktor memperburuk masalah pemilik DATABASE:

  • keamanan tingkat server lainnya (titik akhir, peran server, login) jarang digunakan, berpindah-pindah dll.
  • keamanan tingkat basis data biasanya berakhir dengan dimiliki oleh dbo(kepala basis data), atau beberapa kepala basis data lainnya, dan dengan demikian pemilik terkandung dengan basis data
  • Memiliki default kepemilikan basis data untuk kepala sekolah NT menciptakan masalah penahanan (pemiliknya adalah SID NT yang dikelola oleh AD dan tidak melakukan perjalanan dengan file database, akun NT dapat di-thumbstoned dll dll dll)
  • yang paling penting: pemilik basis data memiliki efek samping yang penting, khususnya EXECUTE AS context. Masalah di kemudian hari inilah yang membakar sebagian besar pengguna. Karena Service Broker menggunakan EXECUTE AS secara ekstensif (pengiriman pesan memiliki konteks EXECUTE AS, serta aktivasi antrian yang memiliki eksplisit) biasanya pengguna Layanan Broker yang menemukan masalah ini terlebih dahulu.

BTW, Kudos untuk menyelidiki dan memperbaiki masalah awal Anda :)

Remus Rusanu
sumber
13

Basis data ownerini sedikit membuang ke waktu sebelum skema (yang tepat) diperkenalkan dalam SQL Sever 2005.

Pada dasarnya pemilik database adalah default dbo(pemilik database) dari database, dengan database itu sendiri menjadi objek database .

Dari dokumen SQL Server 2000 ...

Ini dboadalah pengguna yang telah menyiratkan izin untuk melakukan semua aktivitas dalam database.

Dalam versi SQL Server sebelumnya, ketika skema tidak bisa "memiliki" objek ( atau lebih tepatnya harus dinyatakan bahwa semua objek, tabel, tampilan, dll. Dimiliki oleh dbodan tidak ada skema lain ) diperlukan untuk "pengguna" untuk memilikinya ... harus pergi tanpa mengatakan mengapa sesuatu perlu memiliki database (atau izin pada umumnya akan agak sulit.)

Jadi, secara teknis dalam versi SQL Server yang lebih lama (atau database yang ditingkatkan) itu bukan tabel "Foo" itu adalah tabel "dbo.Foo" ... dengan dbomenjadi pemiliknya.

Dengan munculnya SQL Server 2005 Anda bisa memiliki skema yang dimiliki objek database seperti misalnya Anda memiliki skema bernama "bar" dan tabel bernama "Foo" ... ini menjadi bar.Fooseperti ...

SELECT * FROM bar.Foo WHERE etc = 'blah`;

Bagian yang sulit datang dengan fakta bahwa pengguna yang membuat basis data secara otomatis ditetapkan sebagai pemilik yang menyebabkan masalah dengan pergantian karyawan, dll.

Karenanya adalah praktik terbaik untuk mengubahnya ke saakun, atau mungkin (menurut pengalaman saya) ke akun domain yang dapat dikelola oleh tim ops / IT organisasi.

Artikel ini memberikan rincian perbedaan antara cara lama "pemilik" dalam melakukan sesuatu, dan sistem kepemilikan berbasis "skema" yang lebih baru.

Untuk memahami perbedaan antara pemilik dan skema, mari luangkan waktu untuk meninjau kepemilikan objek. Ketika suatu objek dibuat di SQL Server 2000 atau sebelumnya, objek harus memiliki pemilik. Sebagian besar waktu, pemiliknya adalah "dbo", juga dikenal sebagai pemilik basis data.

Justin Jenkins
sumber
@RemusRusanu, menggunakan contoh 'skema vs. pemilik' hanyalah cara untuk menjelaskan gagasan mengapa 'pemilik' melekat dalam SQL Server. Saya menghargai jawaban Anda juga! Dinyatakan dengan baik ... namun saya tidak percaya "karena itu" akan menurunkan contoh / jawaban ini. :)
Justin Jenkins