The certificate ” cannot be dropped because it is bound to one or more database hatasının çözümü(Sertifika Silmek)
TDE(Transparent Data Encryption) ile veritabanı şifreleme işlemi işlemi sırasında oluşturduğunuz sertifikanızı silmeniz gerekebilir. Ve bu silme işlemi sırasında aşağıdaki gibi bir hata ile karşılaşabilirsiniz.
Bu hatayı aşıp sertifikayı silebilmek için öncelikle instance üzerinde bu sertifika ile ilişkilendirilmiş database encryption key leri bulup silmeniz gerekir. Aşağıdaki sorgu yardımıyla bu listeye ulaşabilirsiniz.
select database_name = db.name,dek.encryptor_type, cert_name = mycert.name from sys.dm_database_encryption_keys dek left join sys.certificates mycert on dek.encryptor_thumbprint = mycert.thumbprint inner join sys.databases db on dek.database_id = db.database_id where mycert.name is not null
Bu sorgu sonucu çıkan ekran aşağıdaki ekran çıktısı ile benzer olacaktır.
Silmeye çalıştığımız sertifikanın ismi “Sertifikam”. Bu sertifika ile ilişkili olan database encryption key’in bulunduğu veritabanı ismi ise denemeveri. Sertifikamızı silebilmek için öncelikle denemeveri veritabanındaki database encryption key’i silmemiz gerekiyor. Bu işlemi şu şekilde yapabiliriz.
Öncelikle veritabanı üzerinde encryption’ı kapatıyoruz.
ALTER DATABASE denemeveri SET ENCRYPTION OFF; GO
Sonra aşağıdaki sorgu sonucu 3 ve 1 gelene kadar bekliyoruz. Encryption açıkken 3 ve 3 olarak geliyor. Tabi benim kullandığım SQL Server Sürümü SQL Server 2014. Başka sürümlerde tek satır olarak dönebilir. Önemli olan orda 1’i görebilmek.
SELECT encryption_state FROM sys.dm_database_encryption_keys; GO
Daha sonra ise aşağıdaki şekilde dek’i siliyoruz.
USE denemeveri; GO DROP DATABASE ENCRYPTION KEY; GO
Dek silme işlemi bittikten sonra sertifikanızı hata almadan silebilirsiniz.