sp_control_dbmasterkey_password (T-SQL)
Berlaku untuk: SQL Server Azure SQL Managed Instance
Menambahkan atau menghilangkan kredensial yang berisi kata sandi yang diperlukan untuk membuka kunci master database (DMK).
Sintaks
sp_control_dbmasterkey_password @db_name = 'db_name'
, @password = 'password'
, @action = { N'add' | N'drop' }
Argumen
@db_name= N'db_name'
Menentukan nama database yang terkait dengan kredensial ini. Tidak dapat menjadi database sistem. @db_name adalah nvarchar.
@password= N'password'
Menentukan kata sandi DMK. @password adalah nvarchar.
@action = { N'add' | N'drop' }
Menentukan tindakan untuk kredensial untuk database yang ditentukan di penyimpanan kredensial. Nilai yang diteruskan ke @action adalah nvarchar.
Tindakan | Deskripsi |
---|---|
add |
Menentukan bahwa kredensial untuk database yang ditentukan akan ditambahkan ke penyimpanan kredensial. Info masuk berisi kata sandi DMK. |
drop |
Menentukan bahwa kredensial untuk database yang ditentukan akan dihilangkan dari penyimpanan kredensial. |
Keterangan
Ketika SQL Server memerlukan DMK untuk mendekripsi atau mengenkripsi kunci, SQL Server mencoba mendekripsi DMK dengan kunci master layanan (SMK) instans. Jika dekripsi gagal, SQL Server mencari penyimpanan kredensial untuk kredensial yang memiliki GUID keluarga yang sama dengan database yang dibutuhkan kuncinya. SQL Server kemudian mencoba mendekripsi DMK dengan setiap kredensial yang cocok sampai dekripsi berhasil atau tidak ada lagi kredensial.
Perhatian
Jangan membuat kredensial kunci master untuk database yang harus tidak dapat diakses sa
dan prinsipal server dengan hak istimewa lainnya. Anda dapat mengonfigurasi database sehingga hierarki kuncinya tidak dapat didekripsi oleh SMK. Opsi ini didukung sebagai pertahanan mendalam untuk database yang berisi informasi terenkripsi yang seharusnya tidak dapat diakses sa
atau prinsipal server dengan hak istimewa lainnya. Membuat kredensial untuk database seperti itu menghapus pertahanan mendalam ini, memungkinkan sa
dan prinsipal server dengan hak istimewa lainnya untuk mendekripsi database.
Kredensial yang dibuat dengan menggunakan sp_control_dbmasterkey_password
terlihat dalam tampilan katalog sys.master_key_passwords . Nama kredensial yang dibuat untuk DMK memiliki format berikut: ##DBMKEY_<database_family_guid>_<random_password_guid>##
. Kata sandi disimpan sebagai rahasia kredensial. Setiap kata sandi yang ditambahkan ke penyimpanan kredensial memiliki baris yang cocok di sys.credentials
.
Anda tidak dapat menggunakan sp_control_dbmasterkey_password
untuk membuat kredensial untuk database sistem berikut: master
, , model
msdb
, atau tempdb
.
sp_control_dbmasterkey_password
tidak memverifikasi bahwa kata sandi dapat membuka DMK dari database yang ditentukan.
Jika Anda menentukan kata sandi yang sudah disimpan dalam kredensial untuk database yang ditentukan, sp_control_dbmasterkey_password
gagal.
Dua database dari instans server yang berbeda dapat berbagi GUID keluarga yang sama. Jika ini terjadi, database berbagi catatan DMK yang sama di penyimpanan kredensial.
Parameter yang diteruskan untuk sp_control_dbmasterkey_password
tidak muncul dalam jejak.
Saat Anda menggunakan kredensial yang ditambahkan dengan menggunakan sp_control_dbmasterkey_password
untuk membuka DMK, DMK dienkripsi ulang oleh SMK. Jika database dalam mode baca-saja, operasi enkripsi ulang gagal, dan DMK tetap tidak terenkripsi. Untuk akses berikutnya ke DMK, Anda harus menggunakan OPEN MASTER KEY
pernyataan dan kata sandi. Untuk menghindari penggunaan kata sandi, buat kredensial sebelum Anda memindahkan database ke mode baca-saja.
Potensi masalah kompatibilitas mundur
Saat ini, prosedur tersimpan tidak memeriksa apakah kunci ada. Fungsionalitas ini diizinkan untuk kompatibilitas mundur, tetapi menampilkan peringatan. Perilaku ini tidak digunakan lagi. Dalam rilis mendatang, kunci harus ada dan kata sandi yang digunakan dalam prosedur sp_control_dbmasterkey_password
tersimpan harus kata sandi yang sama dengan salah satu kata sandi yang digunakan untuk mengenkripsi DMK.
Izin
Memerlukan keanggotaan dalam peran server tetap sysadmin , atau menjalankan izin langsung pada prosedur tersimpan ini.
Contoh
Sampel kode Transact-SQL dalam artikel ini menggunakan AdventureWorks2022
database sampel atau AdventureWorksDW2022
, yang dapat Anda unduh dari halaman beranda Sampel Microsoft SQL Server dan Proyek Komunitas.
J. Membuat kredensial untuk kunci master AdventureWorks
Contoh berikut membuat kredensial untuk AdventureWorks2022
DMK, dan menyimpan kata sandi kunci master sebagai rahasia dalam kredensial. Karena semua parameter yang diteruskan harus sp_control_dbmasterkey_password
dari jenis data nvarchar, string teks dikonversi dengan operator N
transmisi .
EXEC sp_control_dbmasterkey_password
@db_name = N'AdventureWorks2022',
@password = N'sdfjlkj#mM00sdfdsf98093258jJlfdk4',
@action = N'add';
GO
B. Menghapus kredensial untuk kunci master database
Contoh berikut menghapus kredensial yang dibuat dalam contoh A. Semua parameter diperlukan, termasuk kata sandi.
EXEC sp_control_dbmasterkey_password
@db_name = N'AdventureWorks2022',
@password = N'sdfjlkj#mM00sdfdsf98093258jJlfdk4',
@action = N'drop';
GO