2016-11-09 2 views
2

Ich bin mit SQL Server 2008/2012.In meine Datenbank Ich habe eine Tabelle, die Spalte verschlüsselt.Erhalten Zertifikatnamen von Spaltennamen oder den symmetrischen Schlüssel

Ich bin bekommen Verschlüsselungsschlüssel einer verschlüsselten Spalte durch diese Abfrage mit -

SELECT DISTINCT key_name(encryptedcol) FROM encryptedTable; 

meine verschlüsselte Spaltenname ist encryptedcol.

Jetzt möchte ich den Zertifikatsnamen erhalten, der verwendet wird, um den verschlüsselten Schlüssel zu erstellen (bedeutet, dass ich den Zertifikatsnamen benötige, der zum Öffnen des obigen symmetrischen Schlüssels zum Entschlüsseln von Daten verwendet wird).

Zum Beispiel -

enter image description here

Hier markierten Text mein Zertifikat Name ist, der hier fest einprogrammiert ist, aber ich mag dies aus einer SQL-Abfrage erhalten.

Antwort

1

können Sie die Systemtabellen verwenden, um die Verschlüsselungshierarchie für eine Spalte zu bestimmen. Unter der Annahme, dass der symmetrische Schlüssel durch ein Zertifikat verschlüsselt wurde, funktioniert dieser Tsql. Wenn Ihr symmetrischer Schlüssel durch einen asymmetrischen Schlüssel verschlüsselt wurde, ersetzen Sie sys.certificates durch sys.asymmetric_keys, das auch über eine Fingerabdruckspalte verfügt, die es eindeutig identifiziert.

select 
    c.name 
from sys.symmetric_keys sk 
join sys.key_encryptions ke 
    on 
    sk.symmetric_key_id= ke.key_id 
join sys.certificates c 
    on 
    ke.thumbprint=c.thumbprint 
where 
    sk.name in 
     (SELECT DISTINCT key_name(encryptedssn) FROM HR.Employees) 
Verwandte Themen