Bagaimana cara menetapkan seluruh akses keamanan grup Direktori Aktif di SQL Server 2008?

40

Saya ingin menggunakan keamanan terintegrasi dengan aplikasi internal saya yang semuanya ada di domain. Sayangnya, saya tidak pernah bisa melakukan ini dengan baik. Saya ingin menetapkan seluruh Grup Exchange (Direktori Aktif) peran dalam SQL Server untuk akses baca / tulis ke tabel tertentu. Dengan begitu saya tidak perlu membuat operator setiap kali seseorang dipekerjakan atau menghapus operator setiap kali seseorang dipecat. Apakah ini mungkin? Langkah apa yang akan saya ambil untuk melakukan ini?

Michael Hedgpeth
sumber

Jawaban:

48
  • Atur grup AD sebagai login. Dan "login" berarti login tingkat server bukan konsep AD pengguna / login. Dalam SQL Server, ini adalah prinsip tingkat server
  • Buat pengguna yang dipetakan. Anda seharusnya tidak benar-benar mengizinkan pengguna langsung di atas meja. Dan "pengguna" berarti pengguna basis data, bukan konsep AD dari pengguna: dalam SQL Server, ini adalah "basis data tingkat basis"
  • Tambahkan pengguna ke peran (juga "kepala sekolah tingkat basis data")
  • Izin GRANT untuk peran di atas meja (tabel atau proc dll adalah "aman")

Contoh skrip

USE master;
GO
CREATE LOGIN [MYDOMAIN\APPLICATION SUPPORT] FROM WINDOWS;
GO
USE mydb;
GO
CREATE USER [MYDOMAIN\APPLICATION SUPPORT] FROM LOGIN [MYDOMAIN\APPLICATION SUPPORT];
GO
CREATE ROLE rSupport;
GO
EXEC sp_addrolemember 'rSupport', 'MYDOMAIN\APPLICATION SUPPORT';
GO
GRANT SELECT, INSERT,UPDATE, etc ON Mytable TO rSupport;
GO

sp_addrolemembersudah usang mulai dengan SQL Server 2012, di mana ALTER ROLEharus digunakan sebagai gantinya.

gbn
sumber
3
Akan sangat membantu untuk menjelaskan mengapa Anda harus menetapkan izin untuk peran daripada pengguna SQL (dalam hal ini, grup AD).
Drew Chapin
Mungkin maksud Anda "buat pengguna [...] untuk masuk [...]", alih-alih "dari masuk"?
Agostino
BUAT PENGGUNA ... UNTUK LOGIN ...; dan BUAT PENGGUNA ... DARI LOGIN ...; keduanya bekerja untuk saya (MSSQL2016). Tidak yakin apakah ada perbedaan?
Reversed Engineer
4

Pemberian izin dalam SQL Server ke Grup AD relatif mudah. Ini dapat dilakukan baik melalui T-SQL atau Management Studio.

Misalnya, jika Anda memiliki grup AD yang dipanggil MYDOMAIN\APPLICATION SUPPORT, Anda akan membuat login di tingkat server, dan kemudian menggunakan pemetaan untuk masing-masing database untuk memberikan izin yang sedikit lebih terperinci seperti pembaca data.

Idealnya, semua akses aplikasi harus melalui prosedur tersimpan *, jadi hanya jalankan izin pada prosedur tersimpan itu dalam basis data yang diperlukan.

* Dari sudut pandang keamanan, untuk memungkinkan pengguna tertentu melihat beberapa data tertentu, Anda bisa membuat prosedur dan memberikan izin kepada pengguna untuk menjalankan prosedur itu, dan tidak ada yang lain. Mengizinkan pengguna melakukan kueri secara langsung berarti memberikan izin pilih pada semua tabel yang terlibat. Lebih mudah untuk bekerja dengan prosedur, dan lebih mudah untuk debug.

Prosedur tersimpan akses tabel abstrak dan membatasi akses. Untuk tipe DBA, ini seperti "biarkan saya melihat semua variabel instan Anda: Saya tidak ingin menggunakan metode, getter atau setter".

Peter Schofield
sumber
3

Dari marc_s menjawab "Bagaimana cara menambahkan grup pengguna Direktori Aktif sebagai login di SQL Server" :

Di SQL Server Management Studio, buka Object Explorer > (your server) > Security > Loginsdan klik kanan New Login:

masukkan deskripsi gambar di sini

Kemudian di kotak dialog yang muncul, pilih jenis objek yang ingin Anda lihat ( Groupsdinonaktifkan secara default - centang!) Dan pilih lokasi di mana Anda ingin mencari objek Anda (mis. Gunakan Entire Directory) dan kemudian temukan grup AD Anda .

masukkan deskripsi gambar di sini

Anda sekarang memiliki Login SQL Server reguler - sama seperti ketika Anda membuatnya untuk pengguna AD tunggal. Berikan izin masuk yang baru pada database yang dibutuhkan, dan pergilah!

Setiap anggota grup AD itu sekarang dapat masuk ke SQL Server dan menggunakan database Anda.

Bahkan Mien
sumber
2
Menautkan ke jawaban SO itu mungkin berguna tetapi Anda tidak menambahkan sesuatu yang baru ke posting, bukan? Anda bisa saja memasang tautan sebagai komentar.
Andriy M
2
Jawabannya memiliki tangkapan layar yang bagus untuk memeriksa Grup di bawah Jenis Objek, karena itulah yang saya lewatkan ketika saya mencoba melakukan ini. Tautan tidak menunjukkannya sebagai cara yang berguna menurut saya. Hanya berusaha membantu orang berikutnya ...
Bahkan Mien
Apa maksudmu? Biasanya ada tautan untuk mengikutinya, dan semua orang yang mengikuti tautan akan melihat tangkapan layar yang bagus yang Anda bicarakan, serta semua hal lain yang telah Anda pasang ulang di sini. Namun, tidak akan berdebat, hanya memberi tahu Anda bahwa pendapat saya tidak berubah: tautan (dalam komentar) juga cukup baik.
Andriy M
4
Pendapat saya juga tidak berubah. Tautan dalam komentar tidak menyampaikan informasi yang sama dengan gambar yang sebenarnya di halaman web. "Tunjukkan, jangan katakan."
Bahkan Mien
1

Jika pengguna adalah anggota DOMAIN \ SecurityGroup yang memiliki otoritas Sysadmin dalam SQL, maka itu akan digunakan ketika mengakses database. Kalau tidak, Anda perlu melihat apa yang telah diberikan otoritas DOMAIN \ SecurityGroup di setiap basis data. Jika pengguna adalah anggota 2 SecurityGroups, dengan SecGroupA memiliki otoritas pilih dan SecGroupB memiliki otoritas penyisipan, maka pengguna dapat memilih dan menyisipkan.

Piyush Agrawal
sumber