CREATE ASYMMETRIC KEY (Transact-SQL)CREATE ASYMMETRIC KEY (Transact-SQL)

QUESTO ARGOMENTO SI APPLICA A:sìSQL Server (a partire dalla versione 2008)sìDatabase SQL di AzurenoAzure SQL Data Warehouse noParallel Data Warehouse THIS TOPIC APPLIES TO:yesSQL Server (starting with 2008)yesAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse

Crea una chiave asimmetrica nel database.Creates an asymmetric key in the database.

Questa funzionalità non è compatibile con l'esportazione del database mediante Data Tier Application Framework (DACFx).This feature is incompatible with database export using Data Tier Application Framework (DACFx). Prima dell'esportazione, è necessario eliminare tutte le chiavi asimmetriche.You must drop all asymmetric keys before exporting.

Icona di collegamento a un argomentoConvenzioni della sintassi Transact-SQLTopic link icon Transact-SQL Syntax Conventions

SintassiSyntax

CREATE ASYMMETRIC KEY Asym_Key_Name   
   [ AUTHORIZATION database_principal_name ]  
   [ FROM <Asym_Key_Source> ]  
   [ WITH <key_option> ] 
   [ ENCRYPTION BY <encrypting_mechanism> ] 
   [ ; ]

<Asym_Key_Source>::=  
     FILE = 'path_to_strong-name_file'  
   | EXECUTABLE FILE = 'path_to_executable_file'  
   | ASSEMBLY Assembly_Name  
   | PROVIDER Provider_Name  

<key_option> ::=  
   ALGORITHM = <algorithm>  
      |  
   PROVIDER_KEY_NAME = 'key_name_in_provider'  
      |  
      CREATION_DISPOSITION = { CREATE_NEW | OPEN_EXISTING }  

<algorithm> ::=  
      { RSA_4096 | RSA_3072 | RSA_2048 | RSA_1024 | RSA_512 }   

<encrypting_mechanism> ::=  
    PASSWORD = 'password'   

ArgomentiArguments

FROM Asym_Key_SourceFROM Asym_Key_Source
Specifica l'origine da cui caricare la coppia di chiavi asimmetriche.Specifies the source from which to load the asymmetric key pair.

AUTHORIZATION database_principal_nameAUTHORIZATION database_principal_name
Specifica il proprietario della chiave asimmetrica.Specifies the owner of the asymmetric key. Il proprietario non può essere un ruolo o un gruppo.The owner cannot be a role or a group. Se l'opzione viene omessa, il proprietario sarà l'utente corrente.If this option is omitted, the owner will be the current user.

FILE ='path_to_strong-name_file'FILE ='path_to_strong-name_file'
Specifica il percorso di un file con nome sicuro da cui caricare la coppia di chiavi.Specifies the path of a strong-name file from which to load the key pair.

Nota

Questa opzione non è disponibile in un database indipendente.This option is not available in a contained database.

EXECUTABLE FILE ='path_to_executable_file'EXECUTABLE FILE ='path_to_executable_file'
Viene specificato un file di assembly da cui caricare la chiave pubblica.Specifies an assembly file from which to load the public key. Limitato a 260 caratteri da MAX_PATH dall'API Windows.Limited to 260 characters by MAX_PATH from the Windows API.

Nota

Questa opzione non è disponibile in un database indipendente.This option is not available in a contained database.

ASSEMBLY Assembly_NameASSEMBLY Assembly_Name
Specifica il nome di un assembly da cui caricare la chiave pubblica.Specifies the name of an assembly from which to load the public key.

ENCRYPTION BY <key_name_in_provider> Specifica la crittografia usata per la chiaveENCRYPTION BY <key_name_in_provider> Specifies how the key is encrypted. e può essere un certificato, una password o una chiave asimmetrica.Can be a certificate, password, or asymmetric key.

KEY_NAME ='key_name_in_provider'KEY_NAME ='key_name_in_provider'
Specifica il nome della chiave dal provider esterno.Specifies the key name from the external provider. Per altre informazioni sulla gestione delle chiavi esterne, vedere Extensible Key Management (EKM).For more information about external key management, see Extensible Key Management (EKM).

CREATION_DISPOSITION = CREATE_NEWCREATION_DISPOSITION = CREATE_NEW
Crea una nuova chiave nel dispositivo EKM.Creates a new key on the Extensible Key Management device. Utilizzare PROV_KEY_NAME per specificare il nome della chiave nel dispositivo.PROV_KEY_NAME must be used to specify key name on the device. Se nel dispositivo esiste già una chiave, l'istruzione genererà un errore.If a key already exists on the device the statement fails with error.

CREATION_DISPOSITION = OPEN_EXISTINGCREATION_DISPOSITION = OPEN_EXISTING
Definisce il mapping di una chiave asimmetrica di SQL ServerSQL Server a una chiave EKM esistente.Maps a SQL ServerSQL Server asymmetric key to an existing Extensible Key Management key. Utilizzare PROV_KEY_NAME per specificare il nome della chiave nel dispositivo.PROV_KEY_NAME must be used to specify key name on the device. Se CREATION_DISPOSITION = OPEN_EXISTING non è specificato, l'impostazione predefinita è CREATE_NEW.If CREATION_DISPOSITION = OPEN_EXISTING is not provided, the default is CREATE_NEW.

ALGORITHM = <algorithm>ALGORITHM = <algorithm>
Possono essere specificati cinque algoritmi: RSA_4096, RSA_3072, RSA_2048, RSA_1024 e RSA_512.Five algorithms can be provided; RSA_4096, RSA_3072, RSA_2048, RSA_1024, and RSA_512.

RSA_1024 e RSA_512 sono deprecati.RSA_1024 and RSA_512 are deprecated. Per usare RSA_1024 o RSA_512 (sconsigliato), è necessario impostare il database sul livello di compatibilità del database 120 o su uno inferiore.To use RSA_1024 or RSA_512 (not recommended) you must set the database to database compatibility level 120 or lower.

PASSWORD = 'password'PASSWORD = 'password'
Specifica la password con cui crittografare la chiave privata.Specifies the password with which to encrypt the private key. Se questa clausola è assente, la chiave privata verrà crittografata con la chiave master del database.If this clause is not present, the private key will be encrypted with the database master key. password ha un massimo di 128 caratteri.password is a maximum of 128 characters. password deve soddisfare i requisiti per i criteri password di Windows del computer che sta eseguendo l'istanza di SQL ServerSQL Server.password must meet the Windows password policy requirements of the computer that is running the instance of SQL ServerSQL Server.

RemarksRemarks

Una chiave asimmetrica è un'entità a protezione diretta a livello del database.An asymmetric key is a securable entity at the database level. Nella forma predefinita, questa entità contiene sia una chiave pubblica che una chiave privata.In its default form, this entity contains both a public key and a private key. Se eseguita senza la clausola FROM, l'istruzione CREATE ASYMMETRIC KEY genera una nuova coppia di chiavi.When executed without the FROM clause, CREATE ASYMMETRIC KEY generates a new key pair. Se eseguita con la clausola FROM, l'istruzione CREATE ASYMMETRIC KEY importa una coppia di chiavi da un file o importa una chiave pubblica da un assembly.When executed with the FROM clause, CREATE ASYMMETRIC KEY imports a key pair from a file or imports a public key from an assembly.

Per impostazione predefinita, la chiave privata è protetta dalla chiave master del database.By default, the private key is protected by the database master key. Se non esiste una chiave master del database, è necessario proteggere la chiave privata con una password.If no database master key has been created, a password is required to protect the private key. In presenza di una chiave master del database, la password è facoltativa.If a database master key does exist, the password is optional.

La chiave privata può avere una lunghezza di 512, 1024 o 2048 bit.The private key can be 512, 1024, or 2048 bits long.

AutorizzazioniPermissions

È richiesta l'autorizzazione CREATE ASYMMETRIC KEY per il database.Requires CREATE ASYMMETRIC KEY permission on the database. Se si specifica la clausola AUTHORIZATION, è richiesta l'autorizzazione IMPERSONATE per l'entità di database o l'autorizzazione ALTER per il ruolo applicazione.If the AUTHORIZATION clause is specified, requires IMPERSONATE permission on the database principal, or ALTER permission on the application role. Solo gli account di accesso di Windows e di SQL ServerSQL Server e i ruoli applicazione possono disporre di chiavi asimmetriche.Only Windows logins, SQL ServerSQL Server logins, and application roles can own asymmetric keys. I gruppi e i ruoli non possono disporre di chiavi asimmetriche.Groups and roles cannot own asymmetric keys.

EsempiExamples

A.A. Creazione di una chiave asimmetricaCreating an asymmetric key

Nell'esempio seguente viene creata una chiave asimmetrica denominata PacificSales09 tramite l'algoritmo RSA_2048 e la chiave privata viene protetta con una password.The following example creates an asymmetric key named PacificSales09 by using the RSA_2048 algorithm, and protects the private key with a password.

CREATE ASYMMETRIC KEY PacificSales09   
    WITH ALGORITHM = RSA_2048   
    ENCRYPTION BY PASSWORD = '<enterStrongPasswordHere>';   
GO  

B.B. Creazione di una chiave asimmetrica da un file e concessione dell'autorizzazione a un utenteCreating an asymmetric key from a file, giving authorization to a user

Nell'esempio seguente viene creata la chiave asimmetrica PacificSales19 da una coppia di chiavi memorizzate in un file; l'utente Christina viene quindi autorizzato all'utilizzo della chiave asimmetrica.The following example creates the asymmetric key PacificSales19 from a key pair stored in a file, and then authorizes user Christina to use the asymmetric key.

CREATE ASYMMETRIC KEY PacificSales19 AUTHORIZATION Christina   
    FROM FILE = 'c:\PacSales\Managers\ChristinaCerts.tmp'    
    ENCRYPTION BY PASSWORD = '<enterStrongPasswordHere>';  
GO  

C.C. Creazione di una chiave asimmetrica da un provider EKMCreating an asymmetric key from an EKM provider

L'esempio seguente illustra come creare la chiave asimmetrica EKM_askey1 da una coppia di chiavi memorizzate in un file.The following example creates the asymmetric key EKM_askey1 from a key pair stored in a file. La crittografia avviene utilizzando un provider EKM denominato EKMProvider1 e una chiave nel provider denominata key10_user1.It then encrypts it using an Extensible Key Management provider called EKMProvider1, and a key on that provider called key10_user1.

CREATE ASYMMETRIC KEY EKM_askey1   
    FROM PROVIDER EKM_Provider1  
    WITH   
        ALGORITHM = RSA_2048,   
        CREATION_DISPOSITION = CREATE_NEW  
        , PROVIDER_KEY_NAME  = 'key10_user1' ;  
GO  

Vedere ancheSee Also

Scelta di un algoritmo di crittografia Choose an Encryption Algorithm
ALTER ASYMMETRIC KEY (Transact-SQL) ALTER ASYMMETRIC KEY (Transact-SQL)
DROP ASYMMETRIC KEY (Transact-SQL) DROP ASYMMETRIC KEY (Transact-SQL)
Gerarchia di crittografia Encryption Hierarchy
Extensible Key Management con l'insieme di credenziali delle chiavi di Azure (SQL Server)Extensible Key Management Using Azure Key Vault (SQL Server)