CREATE SYMMETRIC KEY (Transact-SQL)
Genera una chiave simmetrica e ne specifica le proprietà.
Sintassi
CREATE SYMMETRIC KEY key_name [ AUTHORIZATION owner_name ]
[ FROM PROVIDER Provider_Name ]
WITH <key_options> [ , ... n ]
|
ENCRYPTION BY <encrypting_mechanism> [ , ... n ]
<key_options> ::=
KEY_SOURCE = 'pass_phrase'
|
ALGORITHM = <algorithm>
|
IDENTITY_VALUE = 'identity_phrase'
|
PROVIDER_KEY_NAME = 'key_name_in_provider'
|
CREATION_DISPOSITION = {CREATE_NEW | OPEN_EXISTING }
<algorithm> ::=
DES | TRIPLE_DES | TRIPLE_DES_3KEY | RC2 | RC4 | RC4_128
| DESX | AES_128 | AES_192 | AES_256
<encrypting_mechanism> ::=
CERTIFICATE certificate_name
|
PASSWORD = 'password'
|
SYMMETRIC KEY symmetric_key_name
|
ASYMMETRIC KEY asym_key_name
Argomenti
Key_name
Specifica il nome univoco con il quale la chiave simmetrica è nota all'interno del database. I nomi delle chiavi temporanee devono iniziare con un simbolo di cancelletto (#), ad esempio #temporaryKey900007. Non è possibile creare una chiave simmetrica con un nome che inizia con più di un simbolo di cancelletto (#). Non è possibile creare una chiave simmetrica temporanea utilizzando un provider EKM.AUTHORIZATION owner_name
Specifica il nome dell'utente di database o del ruolo applicazione che sarà il proprietario della chiave.FROM PROVIDER Provider_Name
Specifica un nome e un provider EKM. La chiave non viene esportata dal dispositivo EKM. È necessario innanzitutto definire il provider utilizzando l'istruzione CREATE PROVIDER. Per ulteriori informazioni sulla creazione di provider di chiavi esterne, vedere Informazioni su Extensible Key Management (EKM).KEY_SOURCE ='pass_phrase'
Specifica una passphrase da cui derivare la chiave.IDENTITY_VALUE ='identity_phrase'
Specifica una frase identificativa da cui generare un GUID per contrassegnare i dati crittografati con una chiave temporanea.key_name_in_provider
Specifica il nome a cui viene fatto riferimento nel provider EKM.CREATION_DISPOSITION = CREATE_NEW
Crea una nuova chiave sul dispositivo EKM. Se nel dispositivo esiste già una chiave, l'istruzione genererà un errore.CREATION_DISPOSITION = OPEN_EXISTING
Definisce il mapping di una chiave simmetrica di SQL Server a una chiave EKM esistente. Se non si specifica CREATION_DISPOSITION = OPEN_EXISTING, l'impostazione predefinita sarà CREATE_NEW.certificate_name
Specifica il nome del certificato che verrà utilizzato per crittografare la chiave simmetrica. Il certificato deve esistere nel database corrente.'password'
Specifica una password da cui derivare una chiave TRIPLE_DES per la protezione della chiave simmetrica. password deve soddisfare i criteri password Windows del computer che sta eseguendo l'istanza di SQL Server. È necessario utilizzare sempre password complesse.symmetric_key_name
Specifica una chiave simmetrica da utilizzare per crittografare la chiave creata. La chiave specificata deve esistere nel database ed essere aperta.asym_key_name
Specifica una chiave asimmetrica da utilizzare per crittografare la chiave creata. Tale chiave asimmetrica deve esistere nel database.
Osservazioni
Quando si crea una chiave simmetrica è necessario crittografarla con almeno uno degli elementi seguenti: certificato, password, chiave simmetrica, chiave asimmetrica o PROVIDER. Una chiave può essere crittografata con più elementi di ogni tipo, ovvero una singola chiave simmetrica può essere crittografata contemporaneamente con più certificati, password, chiavi simmetriche e chiavi asimmetriche.
Attenzione |
---|
Se si crittografa una chiave simmetrica con una password anziché con la chiave pubblica della chiave master del database, viene utilizzato l'algoritmo di crittografia TRIPLE DES. Per questo motivo, le chiavi create con un algoritmo di crittografia avanzato, come AES, vengono a loro volta protette con un algoritmo meno avanzato. |
È possibile utilizzare la password facoltativa per crittografare la chiave simmetrica prima di distribuirla a più utenti.
Le chiavi temporanee sono di proprietà dell'utente che le crea e sono valide solo per la sessione corrente.
La clausola IDENTITY_VALUE genera un GUID per contrassegnare i dati crittografati con la nuova chiave simmetrica. Tale contrassegno può essere utilizzato per mappare le chiavi ai dati crittografati. Il GUID generato da una frase specifica sarà sempre uguale. Dopo aver utilizzato una frase per generare un GUID, non è possibile utilizzare di nuovo la stessa frase finché viene utilizzata in modo attivo da almeno una sessione. IDENTITY_VALUE è una clausola facoltativa, ma è consigliabile utilizzarla per l'archiviazione di dati crittografati con una chiave temporanea.
Non è previsto un algoritmo di crittografia predefinito.
Importante |
---|
Non è consigliabile utilizzare crittografie a flussi RC4 e RC4_128 per proteggere dati riservati. SQL Server non supporta ulteriori codifiche per la crittografia eseguita con tali chiavi. |
Le informazioni sulle chiavi simmetriche sono visibili nella vista del catalogo sys.symmetric_keys.
Non è possibile crittografare delle chiavi simmetriche con chiavi simmetriche create dal provider di crittografia.
Chiarimento relativo agli algoritmi DES:
La crittografia DESX è stata menzionata erroneamente. Nelle chiavi simmetriche create con ALGORITHM = DESX viene utilizzata in realtà la crittografia TRIPLE DES con una chiave a 192 bit. L'algoritmo DESX non è disponibile. Questa caratteristica verrà rimossa a partire da una delle prossime versioni di Microsoft SQL Server. Evitare di utilizzare questa caratteristica in un nuovo progetto di sviluppo e prevedere interventi di modifica nelle applicazioni in cui è attualmente implementata.
Nelle chiavi simmetriche create con ALGORITHM = TRIPLE_DES_3KEY viene utilizzato TRIPLE DES con una chiave a 192 bit.
Nelle chiavi simmetriche create con ALGORITHM = TRIPLE_DES viene utilizzato TRIPLE DES con una chiave a 128 bit.
Rimozione dell'algoritmo RC4:
L'utilizzo ripetuto della stessa funzione KEY_GUID RC4 o RC4_128 su blocchi di dati diversi produrrà la stessa chiave RC4 perché SQL Server non fornisce automaticamente un valore salt. L'utilizzo ripetuto della stessa chiave RC4 è un errore noto che comporta una crittografia molto debole. Per questo motivo le parole chiave RC4 e RC4_128 sono deprecate. Questa caratteristica verrà rimossa a partire da una delle prossime versioni di Microsoft SQL Server. Non utilizzare questa caratteristica in un nuovo progetto di sviluppo e modificare non appena possibile le applicazioni in cui è attualmente implementata.
Autorizzazioni
È richiesta l'autorizzazione ALTER ANY SYMMETRIC KEY per il database. Se si specifica AUTHORIZATION, è richiesta l'autorizzazione IMPERSONATE per l'utente di database o l'autorizzazione ALTER per il ruolo applicazione. Se la crittografia viene applicata con un certificato o una chiave asimmetrica, è richiesta l'autorizzazione VIEW DEFINITION per il certificato o la chiave asimmetrica. Solo gli account di accesso di Windows e di SQL Server e i ruoli applicazione possono disporre di chiavi simmetriche. I gruppi e i ruoli non possono disporre di chiavi simmetriche.
Esempi
A. Creazione di una chiave simmetrica
Nell'esempio seguente viene creata una chiave simmetrica denominata JanainaKey09 con l'algoritmo AES 256 e la nuova chiave viene quindi crittografata con il certificato Shipping04.
CREATE SYMMETRIC KEY JanainaKey09 WITH ALGORITHM = AES_256
ENCRYPTION BY CERTIFICATE Shipping04;
GO
B. Creazione di una chiave simmetrica temporanea
Nell'esempio seguente viene creata una chiave simmetrica temporanea denominata #MarketingXXV dalla passphrase: The square of the hypotenuse is equal to the sum of the squares of the sides. Alla chiave viene associato un GUID generato dalla stringa Pythagoras e la chiave viene poi crittografata con il certificato Marketing25.
CREATE SYMMETRIC KEY #MarketingXXV
WITH ALGORITHM = AES_128,
KEY_SOURCE
= 'The square of the hypotenuse is equal to the sum of the squares of the sides',
IDENTITY_VALUE = 'Pythagoras'
ENCRYPTION BY CERTIFICATE Marketing25;
GO
C. Creazione di una chiave simmetrica utilizzando un dispositivo EKM
Nell'esempio seguente viene creata la chiave simmetrica denominata MySymKey utilizzando un provider denominato MyEKMProvider e il nome chiave KeyForSensitiveData. Si assegna l'autorizzazione a User1 presupponendo che l'amministratore di sistema abbia già registrato il provider denominato MyEKMProvider in SQL Server.
CREATE SYMMETRIC KEY MySymKey
AUTHORIZATION User1
FROM PROVIDER EKMProvider
WITH
PROVIDER_KEY_NAME='KeyForSensitiveData',
CREATION_DISPOSITION=OPEN_EXISTING;
GO