Bagikan melalui


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).

Konvensi sintaks transact-SQL

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, , modelmsdb, 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 Ntransmisi .

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