Mengonfigurasi akses terisolasi untuk replika bernama Hyperscale

Berlaku untuk:Azure SQL Database

Artikel ini menjelaskan prosedur untuk memberikan akses ke replika bernama Azure SQL Database Hyperscale tanpa memberikan akses ke replika utama atau replika bernama lainnya. Skenario ini memungkinkan isolasi sumber daya dan keamanan dari replika bernama - karena replika bernama akan berjalan menggunakan simpul komputasi sendiri - dan berguna setiap kali akses baca-saja terisolasi ke database Azure SQL Hyperscale diperlukan. Terisolasi, dalam konteks ini, artinya CPU dan memori tidak dibagi antara replika primer dan bernama, kueri yang berjalan pada replika bernama tidak menggunakan sumber daya komputasi primer atau replika lainnya, dan utama mengakses replika bernama tidak dapat mengakses replika lain, termasuk yang utama.

Catatan

ID Microsoft Entra sebelumnya dikenal sebagai Azure Active Directory (Azure AD).

Membuat login di server utama

Dalam database master pada server logis yang menghosting database utama, jalankan perintah berikut untuk membuat login baru.

Gunakan kata sandi Anda sendiri yang kuat dan unik, ganti strong_password_here dengan kata sandi Anda yang kuat.

CREATE LOGIN [third-party-login] WITH PASSWORD = 'strong_password_here';

Ambil nilai heksadesimal SID untuk login yang dibuat dari tampilan sistem sys.sql_logins:

SELECT SID FROM sys.sql_logins WHERE name = 'third-party-login';

Nonaktifkan login. Ini mencegah login ini mengakses database apa pun di server yang menghosting replika utama.

ALTER LOGIN [third-party-login] DISABLE;

Membuat pengguna di database baca-tulis utama

Setelah login dibuat, sambungkan ke replika baca-tulis utama database Anda, misalnya WideWorldImporters (Anda dapat menemukan contoh skrip untuk memulihkannya di sini: Memulihkan Database di Azure SQL) dan buat database pengguna untuk login itu:

CREATE USER [third-party-user] FROM LOGIN [third-party-login];

Sebagai langkah opsional, setelah pengguna database dibuat, Anda dapat menghilangkan login server yang dibuat pada langkah sebelumnya jika Anda khawatir tentang login yang diaktifkan kembali dengan cara apa pun. Koneksi ke master database di server logis yang menghosting database utama, dan jalankan contoh skrip berikut:

DROP LOGIN [third-party-login];

Membuat replika bernama pada server logis yang berbeda

Buat server logis Azure SQL baru yang akan digunakan untuk mengisolasi akses ke replika bernama. Ikuti petunjuk yang tersedia di Membuat dan mengelola server dan database tunggal di Azure SQL Database. Untuk membuat replika bernama, server ini harus berada di wilayah Azure yang sama dengan server hosting replika utama.

Dalam sampel berikut, ganti strong_password_here dengan kata sandi anda yang kuat. Misalnya, menggunakan Azure CLI:

az sql server create -g MyResourceGroup -n MyNamedReplicaServer -l MyLocation --admin-user MyAdminUser --admin-password strong_password_here

Kemudian, buat replika bernama untuk database utama di server ini. Misalnya, menggunakan Azure CLI:

az sql db replica create -g MyResourceGroup -n WideWorldImporters -s MyPrimaryServer --secondary-type Named --partner-database WideWorldImporters_NR --partner-server MyNamedReplicaServer

Membuat login di server replika bernama

Sambungkan ke database master di server logis yang menghosting replika bernama, yang dibuat pada langkah sebelumnya. Ganti strong_password_here dengan kata sandi anda yang kuat. Tambahkan login menggunakan SID yang diambil dari replika utama:

CREATE LOGIN [third-party-login] WITH PASSWORD = 'strong_password_here', sid = 0x0...1234;

Pada titik ini, pengguna dan aplikasi yang menggunakan third-party-login atau bob@contoso.com dapat terhubung ke replika bernama, tetapi tidak ke replika utama.

Memberikan izin tingkat objek dalam database

Setelah Anda menyiapkan autentikasi login seperti yang dijelaskan, Anda dapat menggunakan pernyataan reguler GRANT, DENY, dan REVOKE untuk mengelola otorisasi, atau izin tingkat objek dalam database. Dalam pernyataan ini, referensikan nama pengguna yang Anda buat dalam database, atau peran database yang mencakup pengguna ini sebagai anggota. Ingat, jalankan perintah ini pada replika utama. Perubahan menyebar ke semua replika sekunder, tetapi hanya akan efektif pada replika bernama tempat login tingkat server dibuat.

Ingat bahwa secara default pengguna yang baru dibuat memiliki satu set minimal izin yang diberikan (misalnya, tidak dapat mengakses tabel pengguna). Jika Anda ingin mengizinkan third-party-user atau bob@contoso.com membaca data dalam tabel, Anda perlu memberikan izin secara SELECT eksplisit:

GRANT SELECT ON [Application].[Cities] to [third-party-user];

Sebagai alternatif untuk memberikan izin secara individu pada setiap tabel, Anda dapat menambahkan pengguna ke db_datareadersperan database untuk mengizinkan akses baca ke semua tabel, atau menggunakan skema untuk mengizinkan akses ke semua tabel yang sudah ada dan yang baru dalam sebuah skema.

Uji akses

Anda dapat menguji konfigurasi ini dengan menggunakan alat klien apa pun dan mencoba terhubung ke replika utama dan bernama. Misalnya, menggunakan sqlcmd, Anda dapat mencoba menyambungkan ke replika utama menggunakan third-party-login pengguna. Ganti strong_password_here dengan kata sandi anda yang kuat.

sqlcmd -S MyPrimaryServer.database.windows.net -U third-party-login -P strong_password_here -d WideWorldImporters

Tindakan ini akan mengakibatkan kesalahan karena pengguna tidak diizinkan untuk tersambung ke server:

Sqlcmd: Error: Microsoft ODBC Driver 13 for SQL Server : Login failed for user 'third-party-login'. Reason: The account is disabled.

Upaya untuk menyambungkan ke replika bernama berhasil. Ganti strong_password_here dengan kata sandi anda yang kuat.

sqlcmd -S MyNamedReplicaServer.database.windows.net -U third-party-login -P strong_password_here -d WideWorldImporters_NR

Tidak ada kesalahan yang dikembalikan, dan kueri dapat dieksekusi pada replika bernama sebagaimana diizinkan oleh izin tingkat objek yang diberikan.