CREATE SYMMETRIC KEY (Transact-SQL)
Si applica a: SQL Server Database SQL di Azure Istanza gestita di SQL di Azure Azure Synapse Analytics
Genera una chiave simmetrica e ne specifica le proprietà in SQL Server.
Questa funzionalità non è compatibile con l'esportazione del database mediante Data Tier Application Framework (DACFx). Prima dell'esportazione, è necessario eliminare tutte le chiavi simmetriche.
Convenzioni relative alla sintassi Transact-SQL
Nota
Questa sintassi non è supportata da pool SQL serverless in Azure Synapse Analytics.
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. Parametro obbligatorio. Le chiavi temporanee vengono designate quando il key_name inizia con un segno di numero (#
). Ad esempio: #temporaryKey900007
. Non è possibile creare una chiave simmetrica con un nome che inizia con più di un #
oggetto . Non è possibile creare una chiave simmetrica temporanea usando un provider EKM.
AUTHORIZATION owner_name
Specifica il nome dell'utente del database o del ruolo applicazione proprietario di questa chiave.
FROM PROVIDER provider_name
Specifica un nome e un provider EKM. La chiave non viene esportata dal dispositivo EKM. Il provider deve essere definito per primo usando l'istruzione CREATE PROVIDER
. Per altre informazioni sulla creazione di provider di chiavi esterne, vedere Extensible Key Management (EKM).
Nota
Questa opzione non è disponibile in un database indipendente.
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.
PROVIDER_KEY_NAME = 'key_name_in_provider'
Specifica il nome a cui viene fatto riferimento nel provider EKM.
Nota
Questa opzione non è disponibile in un database indipendente.
CREATION_DISPOSITION = { CREATE_NEW | OPEN_EXISTING }
Crea o esegue il mapping di una chiave simmetrica a un dispositivo Extensible Key Management.
CREATE_NEW
Crea una nuova chiave nel dispositivo EKM. Se nel dispositivo esiste già una chiave, l'istruzione ha esito negativo con un errore.
OPEN_EXISTING
Definisce il mapping di una chiave simmetrica di SQL Server a una chiave EKM esistente. Se
CREATION_DISPOSITION = OPEN_EXISTING
non viene specificato, l'impostazione predefinita èCREATE_NEW
.
certificate_name
Specifica il nome del certificato utilizzato per crittografare la chiave simmetrica. Il certificato deve esistere nel database corrente.
'password'
Specifica una password dalla quale derivare una chiave TRIPLE_DES con cui proteggere la chiave simmetrica. password deve soddisfare i requisiti per i criteri password di Windows del computer che esegue l'istanza di SQL Server. Usare sempre password complesse.
symmetric_key_name
Specifica una chiave simmetrica usata per crittografare la chiave creata. La chiave specificata deve esistere nel database ed essere aperta.
asym_key_name
Specifica una chiave asimmetrica usata per crittografare la chiave creata. Tale chiave asimmetrica deve esistere nel database.
<algorithm>
Specifica l'algoritmo di crittografia.
Avviso
A partire da SQL Server 2016 (13.x), tutti gli algoritmi diversi da AES_128, AES_192 e AES_256 sono deprecati. Per usare algoritmi meno recenti (sconsigliato), è necessario impostare il database sul livello di compatibilità del database 120 o su un livello inferiore.
Osservazioni:
Quando viene creata una chiave simmetrica, la chiave simmetrica deve essere crittografata usando almeno una delle opzioni seguenti:
- certificato
- password
- chiave simmetrica
- chiave asimmetrica
- 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 un certificato o un'altra chiave, la password viene crittografata con 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.
IDENTITY_VALUE
genera un GUID con cui contrassegnare i dati crittografati con la nuova chiave simmetrica. Tale contrassegno può essere utilizzato per eseguire il mapping delle chiavi ai dati crittografati. Il GUID generato da una frase specifica è sempre uguale. Dopo che una frase è stata usata per generare un GUID, la frase non può essere riutilizzata finché nel database è presente almeno una chiave simmetrica che usa attivamente la frase. IDENTITY_VALUE
è una clausola facoltativa; Tuttavia, è consigliabile usarlo quando si archiviano i dati crittografati con una chiave temporanea.
Non esiste alcun algoritmo di crittografia predefinito.
Importante
Non è consigliabile usare le crittografie di flusso RC4 e RC4_128 per proteggere i dati sensibili. SQL Server non codifica ulteriormente la crittografia eseguita con tali chiavi.
Le informazioni sulle chiavi simmetriche sono visibili nella vista del catalogo sys.symmetric_keys.
Le chiavi simmetriche non possono essere crittografate da chiavi simmetriche create dal provider di crittografia.
Chiarimento relativo agli algoritmi DES
- La crittografia DESX è stata menzionata erroneamente. Le chiavi simmetriche create con ALGORITHM = DESX utilizzano in realtà la crittografia TRIPLE DES con una chiave a 192 bit. L'algoritmo DESX non è disponibile. Questa funzionalità verrà rimossa nelle versioni future di SQL Server. Evitare di usare questa funzionalità in un nuovo progetto di sviluppo e prevedere interventi di modifica nelle applicazioni in cui è attualmente implementata.
- Le chiavi simmetriche create con ALGORITHM = TRIPLE_DES_3KEY utilizzano TRIPLE DES con una chiave a 192 bit.
- Le chiavi simmetriche create con ALGORITHM = TRIPLE_DES utilizzano TRIPLE DES con una chiave a 128 bit.
Deprecazione dell'algoritmo RC4
L'uso ripetuto dello stesso RC4 o RC4_128 KEY_GUID su blocchi di dati diversi comporta la stessa chiave RC4 perché SQL Server non fornisce automaticamente un salt. L'uso ripetuto della stessa chiave RC4 è un errore noto che causa una crittografia molto debole. Per questo motivo le parole chiave RC4 e RC4_128 sono deprecate. Questa funzionalità verrà rimossa nelle versioni future di SQL Server. Evitare di usare questa funzionalità in un nuovo progetto di sviluppo e prevedere interventi di modifica nelle applicazioni in cui è attualmente implementata.
Avviso
L'algoritmo RC4 è supportato solo per motivi di compatibilità con le versioni precedenti. È possibile crittografare il nuovo materiale usando RC4 o RC4_128 solo quando il livello di compatibilità del database è 90 o 100. (Non consigliato.) Usare un algoritmo più recente, ad esempio uno degli algoritmi AES. In SQL Server il materiale crittografato usando RC4 o RC4_128 può essere decrittografato in qualsiasi livello di compatibilità.
Autorizzazioni
È richiesta l'autorizzazione ALTER ANY SYMMETRIC KEY per il database. Se AUTHORIZATION
è specificato, è richiesta l'autorizzazione IMPERSONATE per l'utente del 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 avere chiavi simmetriche. I gruppi e i ruoli non possono disporre di chiavi simmetriche.
Esempi
R. Creare 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. Creare una chiave simmetrica temporanea
Nell'esempio seguente viene creata una chiave simmetrica temporanea chiamata #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. Creare una chiave simmetrica usando un dispositivo EKM (Extensible Key Management)
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