Izin SQL Server untuk membuat, mengembalikan, menghapus hanya beberapa database

17

Pada MS SQL Server 2008 R2, saya harus memiliki pengguna yang dapat membuat, mengembalikan, DBCC CHECKDB dan kemudian drop database. Tetapi ia tidak boleh dapat mengakses atau menghapus database tertentu di server (alasan keamanan). Apakah pengaturan ini memungkinkan?

Cicik
sumber
Anda bisa mendapatkan beberapa petunjuk di sini: toadworld.com/platforms/sql-server/w/wiki/…
dezso

Jawaban:

27

Ya itu dimungkinkan melalui izin pasangan.

Pertama - untuk membuat database - Anda harus memberikan izin tingkat server Create Any Database. Izin ini tidak seperti apa kedengarannya - kekuatan untuk membuat database. Catatan ini tidak memberikan peran server tetap dari dbcreator untuk login, karena peran server tetap tersebut memberikan izin perubahan / hapus pada basis data apa pun. Create Any Databasememungkinkan login untuk memiliki kekuasaan atas database yang mereka miliki, hanya. Ini juga akan memberikan kemampuan untuk memulihkan.

(Jadi dengan melakukan "Buat Basis Data Apa Saja " SAJA - Anda memberikan kemampuan untuk membuat basis data baru, tetapi menghindari kemampuan untuk Menjatuhkan atau Mengubah Basis Data APAPUN yang akan Anda peroleh dengan menggunakan peran server tetap dbcreator)

Untuk memberikan izin "Buat Database Apa Pun" -

use [master]
GO
GRANT CREATE ANY DATABASE TO [LoginName]
GO

Untuk kemampuan menjalankan DBCC CHECKDBdan menjatuhkan basis data - peran basis data tetap db_owner sudah cukup. Ini memberikan semua yang Anda minta. Harap Catatan: Anda juga memberi pengguna ini kemampuan untuk memilih, menghapus, memotong, memperbarui dan menyisipkan db_owner. Saya suka menganggap ini sebagai sysadmindalam database.

Anda hanya akan menerapkan izin ini ke basis data yang Anda inginkan. Ini akan memungkinkan Anda untuk mengontrol basis data mana yang dapat dijatuhkan, dikembalikan, atau dicentang oleh pengguna. Basis data apa pun yang Anda belum memberikan izin kepada pengguna ini akan aman dari pengguna ini yang melakukan tindakan ini

Untuk melakukan ini, pertama-tama Anda akan memetakan login ke pengguna basis data:

USE [DatabaseName]
GO
CREATE USER [UserName] FOR LOGIN [LoginName] 
GO

Dan kemudian tambahkan pengguna itu ke db_ownerperan (Bekerja di SQL Server 2012 dan seterusnya):

ALTER ROLE [db_owner] ADD MEMBER [frank]
GO

Untuk SQL Server 2008 Anda harus menggunakan prosedur tersimpan sistem untuk menambahkan anggota peran sebagai komentator di bawah ini dengan tepat ditunjukkan:

EXEC sp_addrolemember 'db_owner', 'frank';

Anda juga dapat melakukan semua ini melalui GUI. Informasi login yang akan Anda lakukan melalui folder keamanan di SSMS di tingkat instance: Klik kanan pada login -> Properties -> Securables. Untuk tingkat basis data, Anda akan melakukannya melalui folder keamanan di tingkat basis data: klik kanan dan pilih pengguna baru -> pilih login yang Anda ingin pengguna dari daftar login server Anda / beri nama pengguna database itu nama -> buka tab keanggotaan untuk memilih peran keanggotaan.

Sistem bantuan SQL Server, Books Online, adalah sumber yang fantastis untuk sebagian besar pertanyaan perizinan juga - jika Anda menentukan Anda perlu menetapkan izin lainnya. Cukup lakukan pencarian untuk perintah T-SQL yang ingin Anda beri izin dan biasanya ada bagian Izin untuk perintah itu di artikel yang memberi tahu Anda izin apa yang diperlukan untuk melakukan tindakan ini. Anda dapat melihat artikel untuk DBCC CHECKDB untuk contoh - sekitar 7/8 dari jalan artikel adalah bagian izin.

Mike Walsh
sumber
3
Saya hanya ingin menambahkan yang ALTER ROLE [db_owner] ADD MEMBER [frank]berfungsi hanya dari SQL Server 2012. Jika Anda menggunakan SQL Server 2008 kita harus menggunakan SP: EXEC sp_addrolemember 'db_owner', 'frank';(Ref di sini dan di sini )
superjos