Il mio scenario è questo:
(Seguendo il metodo di apertura delle chiavi, crittografia e chiusura delle chiavi, trovato in Blog di Ben Cull .)
Immagina di avere un server MS SQL con tonnellate di chiavi per crittografare campi diversi in tabelle diverse che aggiorni ogni tanto, e usi le procedure per aprire le chiavi e chiudere le chiavi, MA per ridurre il numero di procedure e le funzioni che devi aggiornare ogni tanto, eliminate le funzioni per crittografare i dati e invece OUTPUT
i nomi di chiavi e certificati, quindi puoi semplicemente usare la normale funzione di crittografia con la chiave e il certificato dai parametri OUTPUT di la procedura di OpenKey.
Sembrerebbe qualcosa del genere:
CREATE PROC [dbo].[sproc_OpenKey_10]
(
@Key CHAR(10) OUTPUT
,@Cert CHAR(10) OUTPUT
)
AS
BEGIN
IF CONVERT(DATE,GETDATE()) < '1/1/2017'
BEGIN
OPEN SYMMETRIC KEY AC_16
DECRYPTION BY CERTIFICATE WebAC16
Set @Key = 'AC_16'
Set @Cert = 'WebAC16'
END
ELSE
BEGIN
OPEN SYMMETRIC KEY AC_17
DECRYPTION BY CERTIFICATE WebAC17
Set @Key = 'AC_17'
Set @Cert = 'WebAC17'
END
RETURN
END
E così usando la funzione e la crittografia assomiglierebbe a questo:
DECLARE @Key10 CHAR(10)
DECLARE @Cert10 CHAR(10)
DECLARE @EncID VARCHAR(100)
EXEC dbo.sproc_Secure_OpenKey_10 @Key = @Key10 OUTPUT, @Cert = @Cert10 OUTPUT
SET @EncID = EncryptByKey(Key_GUID(@Key10), @Custid)
(NOTA: il CERT verrebbe memorizzato nella tabella per la decrittografia in seguito - ecco perché sarebbe stato restituito.)
In teoria, sarebbe comodo, permettendoti solo di aggiornare le procedure OpenKey e CloseKey.
La mia domanda è:
L'output dei nomi Key e Cert da una stored procedure OpenKey è un possibile buco di sicurezza? Se è così, c'è un modo per renderlo sicuro?
Apprezzerò qualsiasi input.
Grazie!