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
master
Dalam database di server logis yang menghosting database utama, jalankan yang berikut ini 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. Sambungkan 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 satu per satu pada setiap tabel, Anda dapat menambahkan pengguna ke db_datareaders
peran database untuk mengizinkan akses baca ke semua tabel, atau Anda dapat menggunakan skema untuk izinkan akses ke semua tabel yang ada dan 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.
Konten terkait
- Server logis Azure SQL, lihat Apa itu server di Azure SQL Database?
- Mengelola akses database dan login, lihat Keamanan SQL Database: Mengelola akses database dan keamanan masuk.
- Izin mesin database, lihat Izin.
- Memberikan izin objek, lihat MEMBERIKAN Izin Objek.