Bagaimana saya bisa memeriksa pengaturan keamanan Endpoint SQL Server?

10

Saya sedang dalam proses menciptakan lingkungan TEST untuk staf pengembangan SQL Server kami.

Dalam produksi kami memiliki 3 Server SQL, SQL01berisi beberapa database yang dicerminkan ke SQL02. SQL03bertindak sebagai saksi dalam "keamanan tinggi dengan failover otomatis" atau konfigurasi sinkron.

Saya telah menggunakan VMWare P2V untuk memvirtualisasikan ketiga mesin ke perangkat keras yang terpisah, mengkonfigurasi ulang SID mesin, dan menghitamkan alamat IP server produksi kami dari mesin-mesin baru ini.

Awalnya saya lupa membuat lubang hitam pada mesin saksi produksi, jadi basis data pada mesin TEST masih menggunakan SQL03mesin sebagai saksi. Melihat masalah ini, saya memutuskan untuk mengkonfigurasi ulang basis data pada TEST untuk menunjuk ke saksi TEST yang baru tervirtualisasi, sebut saja TEST03.

Untuk mengkonfigurasi ulang basis data agar menggunakan saksi baru, saya memasukkan perintah berikut di server Utama TEST01:

ALTER DATABASE [TestDB] SET WITNESS = 'TCP://TEST03.domain.inet:5022';

Responsnya tidak terduga:

The ALTER DATABASE command could not be sent to the remote server instance
'TCP://TEST03.domain.inet:5022'.  The database mirroring configuration was
not changed.  Verify that the server is connected, and try again.

Saya sangat bingung dengan pesan kesalahan ini karena konfigurasi tidak bekerja pada mesin produksi, dan belum dimodifikasi dengan cara apa pun pada mesin uji.

Agar ini berfungsi, saya perlu membuat LOGINpada saksi uji:

CREATE LOGIN [DOMAIN\SQLServiceAccount] FOR WINDOWS WITH DEFAULT_DATABASE [Master];

dan GRANTitu CONNECThak pada titik akhir yang dimaksud:

GRANT CONNECT ON ENDPOINT::Mirroring TO [DOMAIN\SQLServiceAccount];

Saya kemudian berhasil mengarahkan database cermin pada lingkungan TEST kepada saksi uji baru.

Bagaimana saya bisa memeriksa titik akhir saksi produksi untuk melihat keamanan apa yang terkait dengannya?

Saya berasumsi pasti ada beberapa katalog sistem yang dapat saya periksa, namun Books-on-Line tampaknya tidak memiliki sesuatu yang spesifik untuk Endpoint, dan Bing baik-baik saja, Bingless ...


Informasi tambahan:

SELECT ep.endpoint_id, p.class_desc, p.permission_name, ep.name, sp.name 
FROM sys.server_permissions p
    INNER JOIN sys.endpoints ep ON p.major_id = ep.endpoint_id
    INNER JOIN sys.server_principals sp ON p.grantee_principal_id = sp.principal_id
WHERE class = '105';

pengembalian:

endpoint_id class_desc  permission_name endpoint_name   principal_name
2           ENDPOINT    CONNECT TSQL    Local Machine   public
3           ENDPOINT    CONNECT TSQL    Named Pipes     public
4           ENDPOINT    CONNECT TSQL    Default TCP     public
5           ENDPOINT    CONNECT TSQL    Default VIA     public

Dan:

SELECT name, endpoint_id, protocol_desc, type_desc, role_desc 
FROM sys.database_mirroring_endpoints;

Pengembalian:

name        endpoint_id  protocol_desc  type_desc           role_desc 
Mirroring   65536        TCP            DATABASE_MIRRORING  WITNESS

Tampaknya tidak ada entri sys.server_permissionsuntuk objek endpoint mirroring. Tidak major_iddan tidak ada yang minor_idcocok dengan 65536. Juga, tidak ada database sistem yang berisi referensi ke titik akhir.

Saya bingung.

Max Vernon
sumber

Jawaban:

7

Setelah menghabiskan sebagian hari berurusan dengan memindahkan mirrored database dari server ke server di lingkungan DEV kami dalam persiapan untuk pindah ke SQL Server 2012, saya menemukan dokumen MSDN ini yang menjelaskan bahwa keamanan ENDPOINT ditentukan hanya berdasarkan pada jenis akun SQL Server berjalan di bawah. Jika SQL Server menggunakan akun domain, maka akun itu secara otomatis memiliki akses ke titik akhir. Jika SQL Server menggunakan akun bawaan seperti [Layanan Jaringan] atau [Sistem Lokal] dll, maka titik akhir harus dikonfigurasi dengan sertifikat keamanan, dan hanya pemegang sertifikat yang dapat mengakses titik akhir.

Bagian yang relevan dari dokumen:

Menentukan Jenis Otentikasi untuk Endpoint Mirroring Database

Penting untuk memahami bahwa akun layanan SQL Server dari server Anda menentukan jenis otentikasi apa yang dapat Anda gunakan untuk titik akhir mirroring database Anda, sebagai berikut:

Jika setiap instance server berjalan di bawah akun layanan domain, Anda dapat menggunakan Otentikasi Windows untuk titik akhir mirroring database Anda. Jika semua instance server dijalankan sebagai akun pengguna domain yang sama, login pengguna yang benar ada secara otomatis di kedua database master. Ini menyederhanakan konfigurasi keamanan untuk database ketersediaan dan direkomendasikan.

Jika ada instance server yang meng-hosting replika ketersediaan untuk grup ketersediaan berjalan sebagai akun yang berbeda, login setiap akun harus dibuat secara master pada instance server lain. Kemudian, login itu harus diberikan izin CONNECT untuk terhubung ke titik akhir mirroring database dari instance server itu.

Jika instance server Anda menggunakan Otentikasi Windows, Anda dapat membuat titik akhir mirroring database dengan menggunakan Transact-SQL, PowerShell, atau New Availability Group Wizard.

catatan:

Jika contoh server yang menjadi tuan rumah replika ketersediaan tidak memiliki titik akhir mirroring database, New Availability Group Wizard dapat secara otomatis membuat titik akhir mirroring database yang menggunakan Otentikasi Windows.

Jika instance server berjalan di bawah akun bawaan, seperti Sistem Lokal, Layanan Lokal, atau Layanan Jaringan, atau akun nondomain, Anda harus menggunakan sertifikat untuk otentikasi titik akhir. Jika Anda menggunakan sertifikat untuk titik akhir pencerminan basis data, administrator sistem Anda harus mengonfigurasi setiap instance server untuk menggunakan sertifikat pada koneksi keluar dan masuk.

Tidak ada metode otomatis untuk mengkonfigurasi keamanan pencerminan basis data menggunakan sertifikat. Anda perlu menggunakan pernyataan CREATE ENDPOINT Transact-SQL atau cmdlet PowerShell New-SqlHadrEndpoint. Untuk informasi lebih lanjut, lihat BUAT ENDPOINT (Transact-SQL).

Remus Rusanu (dalam jawabannya) dengan benar mengidentifikasi cara menentukan keamanan yang ada pada titik akhir mirroring; seperti dalam:

SELECT ep.name, sp2.name AS Grantee, sp.name AS Grantor, p.permission_name, ep.state_desc
FROM sys.server_permissions p 
    INNER JOIN sys.endpoints ep ON p.major_id = ep.endpoint_id
    INNER JOIN sys.server_principals sp ON p.grantor_principal_id = sp.principal_id
    INNER JOIN sys.server_principals sp2 ON p.grantee_principal_id = sp2.principal_id
WHERE p.class_desc = 'ENDPOINT' AND ep.type_desc = 'DATABASE_MIRRORING'

Namun dalam kasus saya di SQL Server 2005 titik akhir mirroring asli tidak muncul dalam hasil permintaan ini - saya berasumsi ini karena mereka keamanan default memungkinkan akses CONNECT ke akun SQL Server berjalan di bawah (seperti yang dijelaskan di atas).

Jadi jawaban kanonik untuk pertanyaan, bagaimana Anda tahu siapa yang memiliki HUBUNGKAN akses ke ENDPOINT, adalah jumlah dari pertanyaan di atas, dan akun yang digunakan oleh SQL Server, bersama dengan setiap sertifikat yang mungkin Anda konfigurasikan dengan akses ke titik akhir .

Max Vernon
sumber
4

Saya kebetulan telah mengatur ini untuk database dalam produksi dan bertanya-tanya hal yang sama menyebabkan saya perlu membandingkan konfigurasi dengan sesi mirroring lain untuk memastikan saya cocok dengan benar.

sys.dm_db_mirroring_connectionsharus menyediakan Anda dengan yang Anda inginkan. Berisi principal_nameyang:

Nama login yang divalidasi untuk izin koneksi. Untuk Otentikasi Windows, nilai ini adalah nama pengguna jarak jauh. Untuk otentikasi sertifikat, nilai ini adalah pemilik sertifikat.

Jika Anda bekerja dengan sesi yang dijeda meskipun saya tidak yakin ini masih akan mengembalikan informasi, yakin itu hanya memiliki koneksi aktif.


sumber
Terima kasih, Shaun. Itu tentu menunjukkan nama pengguna jarak jauh benar-benar terhubung ke titik akhir, namun itu tidak benar-benar menjawab pertanyaan tentang pengaturan keamanan apa yang memungkinkan pengguna untuk terhubung dalam produksi, tetapi tidak dalam pengujian. Saya menghargai bantuannya!
Max Vernon
3

Lihat dokumentasi Buku Daring untuk sys.database_mirroring_endpoints

Untuk izin objek server Anda melihat tempat yang biasa sys.server_permissions,. Seperti halnya setiap kasus ketika keamanan Windows terlibat, hal-hal lebih rumit karena keanggotaan grup windows, dan Anda juga harus mempertimbangkan hierarki izin .

Remus Rusanu
sumber
Saya melihat bahwa bagaimanapun yang saya butuhkan adalah daftar login yang memiliki koneksi CONNECT ke titik akhir. sys.database_mirroring_endpoints tampaknya tidak menunjukkan itu - kecuali saya kehilangan sesuatu!
Max Vernon
1
Untuk izin objek server Anda melihat tempat yang biasa sys.server_permissions,. Seperti halnya setiap kasus ketika keamanan Windows terlibat, hal-hal lebih rumit karena keanggotaan grup windows, dan Anda juga harus mempertimbangkan hierarki izin .
Remus Rusanu
3
Apakah ada kemungkinan Anda bisa menjelaskannya sedikit dalam jawaban itu sendiri?
jcolebrand