CREATE SYMMETRIC KEY (Transact-SQL)

Genera una chiave simmetrica e ne specifica le proprietà.

Icona di collegamento a un argomento Convenzioni della sintassi Transact-SQL

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 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
    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 dalla quale derivare una chiave TRIPLE_DES con cui proteggere la 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.

Nota di attenzioneAttenzione

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 eseguire il mapping delle 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.

Nota importanteImportante

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. 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 a partire da una delle prossime versioni di Microsoft SQL Server. Evitare di utilizzare 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.

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 funzionalità verrà rimossa a partire da una delle prossime versioni di Microsoft SQL Server. Non utilizzare questa funzionalità in un nuovo progetto di sviluppo e modificare non appena possibile le applicazioni in cui è attualmente implementata.

Nota di attenzioneAttenzione

L'algoritmo RC4 è supportato solo per motivi di compatibilità con le versioni precedenti. È possibile crittografare il nuovo materiale utilizzando RC4 o RC4_128 solo quando il livello di compatibilità del database è 90 o 100. (Non consigliato.) Utilizzare un algoritmo più recente, ad esempio uno degli algoritmi AES. In SQL Server 2012 il materiale crittografato utilizzando RC4 o RC4_128 può essere decrittografato in qualsiasi livello di compatibilità.

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

Vedere anche

Riferimento

ALTER SYMMETRIC KEY (Transact-SQL)

DROP SYMMETRIC KEY (Transact-SQL)

sys.symmetric_keys (Transact-SQL)

Concetti

Scelta di un algoritmo di crittografia

Gerarchia di crittografia

Extensible Key Management (EKM)