CREATE CERTIFICATE (Transact-SQL)CREATE CERTIFICATE (Transact-SQL)

QUESTO ARGOMENTO SI APPLICA A: sìSQL Server (a partire dalla versione 2008)sìDatabase SQL di AzuresìAzure SQL Data Warehouse sìParallel Data Warehouse THIS TOPIC APPLIES TO: yesSQL Server (starting with 2008)yesAzure SQL DatabaseyesAzure SQL Data Warehouse yesParallel Data Warehouse

Aggiunge un certificato a un database in SQL ServerSQL Server.Adds a certificate to a database in SQL ServerSQL Server.

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 tutti i certificati.You must drop all certificates before exporting.

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

SintassiSyntax

-- Syntax for SQL Server and Azure SQL Database  

CREATE CERTIFICATE certificate_name [ AUTHORIZATION user_name ]   
    { FROM <existing_keys> | <generate_new_keys> }  
    [ ACTIVE FOR BEGIN_DIALOG =  { ON | OFF } ]  

<existing_keys> ::=   
    ASSEMBLY assembly_name  
    | {   
        [ EXECUTABLE ] FILE = 'path_to_file'  
        [ WITH PRIVATE KEY ( <private_key_options> ) ]   
      }  
    | {   
        BINARY = asn_encoded_certificate  
        [ WITH PRIVATE KEY ( <private_key_options> ) ]  
      }  
<generate_new_keys> ::=   
    [ ENCRYPTION BY PASSWORD = 'password' ]   
    WITH SUBJECT = 'certificate_subject_name'   
    [ , <date_options> [ ,...n ] ]   

<private_key_options> ::=  
      {   
        FILE = 'path_to_private_key'  
         [ , DECRYPTION BY PASSWORD = 'password' ]  
         [ , ENCRYPTION BY PASSWORD = 'password' ]    
      }  
    |  
      {   
        BINARY = private_key_bits  
         [ , DECRYPTION BY PASSWORD = 'password' ]  
         [ , ENCRYPTION BY PASSWORD = 'password' ]    
      }  

<date_options> ::=  
    START_DATE = 'datetime' | EXPIRY_DATE = 'datetime'  
-- Syntax for Azure SQL Data Warehouse and Parallel Data Warehouse  

CREATE CERTIFICATE certificate_name   
    { <generate_new_keys> | FROM <existing_keys> }  
    [ ; ]  

<generate_new_keys> ::=   
    WITH SUBJECT ='certificate_subject_name'   
    [ , <date_options> [ ,...n ] ]   

<existing_keys> ::=   
    {   
      FILE ='path_to_file'  
      WITH PRIVATE KEY   
         (   
           FILE ='path_to_private_key'  
           , DECRYPTION BY PASSWORD ='password'   
         )  
    }  

<date_options> ::=  
    START_DATE ='datetime' | EXPIRY_DATE ='datetime'  

ArgomentiArguments

nome_certificatocertificate_name
È il nome per il certificato nel database.Is the name for the certificate in the database.

AUTORIZZAZIONE nome_utenteAUTHORIZATION user_name
È il nome dell'utente che possiede il certificato.Is the name of the user that owns this certificate.

ASSEMBLY nome_assemblyASSEMBLY assembly_name
Specifica un assembly firmato già caricato nel database.Specifies a signed assembly that has already been loaded into the database.

[ESEGUIBILE] FILE ='path_to_file'[ EXECUTABLE ] FILE ='path_to_file'
Specifica il percorso completo, nome di file incluso, del file con codifica DER che contiene il certificato.Specifies the complete path, including file name, to a DER-encoded file that contains the certificate. Se viene utilizzata l'opzione EXECUTABLE, il file è una DLL firmata dal certificato.If the EXECUTABLE option is used, the file is a DLL that has been signed by the certificate. path_to_file può essere un percorso locale o un percorso UNC di un percorso di rete.path_to_file can be a local path or a UNC path to a network location. Nel contesto di sicurezza di accesso al file il SQL ServerSQL Server account del servizio.The file is accessed in the security context of the SQL ServerSQL Server service account. L'account deve disporre delle necessarie autorizzazioni per il file system.This account must have the required file-system permissions.

WITH PRIVATE KEYWITH PRIVATE KEY
Specifica che la chiave privata del certificato viene caricata in SQL ServerSQL Server.Specifies that the private key of the certificate is loaded into SQL ServerSQL Server. Questa clausola è valida solo se il certificato viene creato da un file.This clause is only valid when the certificate is being created from a file. Per caricare la chiave privata di un assembly, utilizzare ALTER CERTIFICATE.To load the private key of an assembly, use ALTER CERTIFICATE.

FILE ='path_to_private_key'FILE ='path_to_private_key'
Specifica il percorso completo, compreso il nome del file, per la chiave privata.Specifies the complete path, including file name, to the private key. path_to_private_key può essere un percorso locale o un percorso UNC di un percorso di rete.path_to_private_key can be a local path or a UNC path to a network location. Nel contesto di sicurezza di accesso al file il SQL ServerSQL Server account del servizio.The file is accessed in the security context of the SQL ServerSQL Server service account. L'account deve disporre delle necessarie autorizzazioni per il file system.This account must have the necessary file-system permissions.

Nota

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

asn_encoded_certificateasn_encoded_certificate
Bit di un certificato con codifica ASN specificati come costante binaria.ASN encoded certificate bits specified as a binary constant.

BINARIO =private_key_bitsBINARY =private_key_bits
Si applica a: SQL Server 2012SQL Server 2012 tramite SQL Server 2017SQL Server 2017.Applies to: SQL Server 2012SQL Server 2012 through SQL Server 2017SQL Server 2017.

Bit della chiave privata specificati come costante binaria.Private key bits specified as binary constant. Questi bit possono essere in formato crittografato.These bits can be in encrypted form. Se crittografati, l'utente deve fornire una password di decrittografia.If encrypted, the user must provide a decryption password. I controlli dei criteri della password non vengono eseguiti su questa password.Password policy checks are not performed on this password. I bit della chiave privata devono essere in un formato di file PVK.The private key bits should be in a PVK file format.

DECRYPTION BY PASSWORD ='key_password'DECRYPTION BY PASSWORD ='key_password'
Specifica la password necessaria per decrittografare la chiave privata recuperata da un file.Specifies the password required to decrypt a private key that is retrieved from a file. Questa clausola è facoltativa se la chiave privata è protetta con una password Null.This clause is optional if the private key is protected by a null password. Non è consigliabile salvare una chiave privata in un file senza proteggerla con una password.Saving a private key to a file without password protection is not recommended. Se è necessaria una password senza non specifica alcuna password, l'istruzione ha esito negativo.If a password is required but no password is specified, the statement fails.

ENCRYPTION BY PASSWORD ='password'ENCRYPTION BY PASSWORD ='password'
Specifica la password utilizzata per crittografare la chiave privata.Specifies the password used to encrypt the private key. Utilizzare questa opzione solo se si desidera crittografare il certificato con una password.Use this option only if you want to encrypt the certificate with a password. Se questa clausola viene omessa, la chiave privata è crittografata tramite la chiave master del database.If this clause is omitted, the private key is encrypted using the database master key. password deve soddisfare i requisiti dei criteri password Windows del computer in cui è in esecuzione 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. Per ulteriori informazioni, vedere Password Policy.For more information, see Password Policy.

OGGETTO ='certificate_subject_name'SUBJECT ='certificate_subject_name'
Il termine soggetto si riferisce a un campo nei metadati del certificato, come definito nello standard x. 509.The term subject refers to a field in the metadata of the certificate as defined in the X.509 standard. L'oggetto deve essere lungo non più di 64 caratteri, e questo limite viene applicato per SQL ServerSQL Server in Linux.The subject should be no more than 64 characters long, and this limit is enforced for SQL ServerSQL Server on Linux. Per SQL ServerSQL Server in Windows, l'oggetto può essere fino a 128 caratteri.For SQL ServerSQL Server on Windows, the subject can be up to 128 characters long. Oggetti che superano i 128 caratteri vengono troncati quando questi vengono archiviati nel catalogo, ma l'oggetto binario di grandi dimensioni (BLOB) che contiene il certificato viene mantenuto il nome di oggetto completo.Subjects that exceed 128 characters are truncated when they are stored in the catalog, but the binary large object (BLOB) that contains the certificate retains the full subject name.

Start_date ='datetime'START_DATE ='datetime'
Data di inizio validità del certificato.Is the date on which the certificate becomes valid. Se non specificato, START_DATE verrà impostata sulla data corrente.If not specified, START_DATE is set equal to the current date. START_DATE è in ora UTC e si può specificare in un qualsiasi formato convertibile in una data e ora.START_DATE is in UTC time and can be specified in any format that can be converted to a date and time.

EXPIRY_DATE ='datetime'EXPIRY_DATE ='datetime'
Data di scadenza del certificato.Is the date on which the certificate expires. Se non specificato, EXPIRY_DATE è impostato su una data un anno dopo START_DATE.If not specified, EXPIRY_DATE is set to a date one year after START_DATE. EXPIRY_DATE è in ora UTC e si può specificare in un qualsiasi formato convertibile in una data e ora.EXPIRY_DATE is in UTC time and can be specified in any format that can be converted to a date and time. SQL ServerSQL ServerService Broker viene controllata la data di scadenza. Service Broker checks the expiration date. Tuttavia, scadenza non viene applicata quando il certificato viene utilizzato per la crittografia.However, expiration is not enforced when the certificate is used for encryption.

ACTIVE FOR BEGIN_DIALOG = { ON | OFF}ACTIVE FOR BEGIN_DIALOG = { ON | OFF }
Rende il certificato disponibile per un initiator di una conversazione di dialogo di Service BrokerService Broker.Makes the certificate available to the initiator of a Service BrokerService Broker dialog conversation. Il valore predefinito è ON.The default value is ON.

OsservazioniRemarks

Un certificato è un'entità a protezione diretta a livello di database conforme allo standard X.509 e che supporta i campi della specifica X.509 V1.A certificate is a database-level securable that follows the X.509 standard and supports X.509 V1 fields. L'istruzione CREATE CERTIFICATE consente di caricare un certificato da un file o un assemblyCREATE CERTIFICATE can load a certificate from a file or assembly. e può inoltre essere utilizzata per generare una coppia di chiavi e creare un certificato autofirmato.This statement can also generate a key pair and create a self-signed certificate.

La chiave privata deve essere <= 2500 byte in formato crittografato.The Private Key must be <= 2500 bytes in encrypted format. Le chiavi private generate da SQL ServerSQL Server sono 1024 bit tempo tramite SQL Server 2014SQL Server 2014 e sono della lunghezza di 2048 bit a partire da SQL Server 2016SQL Server 2016.Private keys generated by SQL ServerSQL Server are 1024 bits long through SQL Server 2014SQL Server 2014 and are 2048 bits long beginning with SQL Server 2016SQL Server 2016. Le chiavi private importate da un'origine esterna devono avere una lunghezza compresa tra 384 bit e 4,096 bit.Private keys imported from an external source have a minimum length of 384 bits and a maximum length of 4,096 bits. La lunghezza di una chiave privata importata deve essere un valore intero multiplo di 64 bit.The length of an imported private key must be an integer multiple of 64 bits. I certificati usati per TDE sono limitati a chiavi private con dimensioni di 3456 bit.Certificates used for TDE are limited to a private key size of 3456 bits.

Il numero intero di serie del certificato viene archiviato, ma solo i primi 16 byte viene visualizzata nella vista del catalogo sys. Certificates.The entire Serial Number of the certificate is stored but only the first 16 bytes appear in the sys.certificates catalog view.

L'intero campo emittente del certificato viene archiviato, ma solo i primi 884 byte di Sys. Certificates vista del catalogo.The entire Issuer field of the certificate is stored but only the first 884 bytes in the sys.certificates catalog view.

La chiave privata deve corrispondere alla chiave pubblica specificata da nome_certificato.The private key must correspond to the public key specified by certificate_name.

Quando si crea un certificato da un contenitore, il caricamento della chiave privata è facoltativo.When you create a certificate from a container, loading the private key is optional. La chiave privata viene invece sempre creata quando SQL ServerSQL Server genera un certificato autofirmato.But when SQL ServerSQL Server generates a self-signed certificate, the private key is always created. Per impostazione predefinita, la chiave privata viene crittografata con la chiave master del database.By default, the private key is encrypted using the database master key. Se la chiave master del database non esiste e non viene specificata, l'istruzione ha esito negativo.If the database master key does not exist and no password is specified, the statement fails.

L'opzione ENCRYPTION BY PASSWORD non è obbligatorio quando la chiave privata è crittografata con la chiave master del database.The ENCRYPTION BY PASSWORD option is not required when the private key is encrypted with the database master key. Utilizzare questa opzione solo quando la chiave privata è crittografata con una password.Use this option only when the private key is encrypted with a password. Se non si specifica la password, la chiave privata del certificato verrà crittografata con la chiave master del database.If no password is specified, the private key of the certificate will be encrypted using the database master key. Se la chiave master del database non può essere aperto, si omette questa clausola causa un errore.If the master key of the database cannot be opened, omitting this clause causes an error.

Non è necessario specificare una password di decrittografia quando la chiave privata è crittografata con la chiave master del database.You do not have to specify a decryption password when the private key is encrypted with the database master key.

Nota

Le funzioni predefinite per la crittografia e la firma non controllano le date di scadenza dei certificati.Built-in functions for encryption and signing do not check the expiration dates of certificates. Gli utenti di queste funzioni dovranno decidere autonomamente quando eseguire il controllo delle scadenze dei certificati.Users of these functions must decide when to check certificate expiration.

È possibile creare una descrizione binaria di un certificato utilizzando il CERTENCODED ( Transact-SQL ) e CERTPRIVATEKEY ( Transact-SQL ) funzioni.A binary description of a certificate can be created by using the CERTENCODED (Transact-SQL) and CERTPRIVATEKEY (Transact-SQL) functions. Per un esempio che utilizza CERTPRIVATEKEY e CERTENCODED per copiare un certificato a un altro database, vedere l'esempio B nell'argomento CERTENCODED ( Transact-SQL ) .For an example that uses CERTPRIVATEKEY and CERTENCODED to copy a certificate to another database, see example B in the topic CERTENCODED (Transact-SQL).

PermissionsPermissions

È richiesta l'autorizzazione CREATE CERTIFICATE per il database.Requires CREATE CERTIFICATE permission on the database. Solo account di accesso Windows, SQL ServerSQL Server gli account di accesso e i ruoli applicazione possono disporre di certificati.Only Windows logins, SQL ServerSQL Server logins, and application roles can own certificates. I gruppi e i ruoli non possono disporre di certificati.Groups and roles cannot own certificates.

EsempiExamples

A.A. Creazione di un certificato autofirmatoCreating a self-signed certificate

Nell'esempio seguente viene creato un certificato denominato Shipping04.The following example creates a certificate called Shipping04. La chiave privata di questo certificato è protetta con una password.The private key of this certificate is protected using a password.

CREATE CERTIFICATE Shipping04   
   ENCRYPTION BY PASSWORD = 'pGFD4bb925DGvbd2439587y'  
   WITH SUBJECT = 'Sammamish Shipping Records',   
   EXPIRY_DATE = '20201031';  
GO  

B.B. Creazione di un certificato da un fileCreating a certificate from a file

Nell'esempio seguente viene creato un certificato nel database e la coppia di chiavi viene caricata da file.The following example creates a certificate in the database, loading the key pair from files.

CREATE CERTIFICATE Shipping11   
    FROM FILE = 'c:\Shipping\Certs\Shipping11.cer'   
    WITH PRIVATE KEY (FILE = 'c:\Shipping\Certs\Shipping11.pvk',   
    DECRYPTION BY PASSWORD = 'sldkflk34et6gs%53#v00');  
GO   

C.C. Creazione di un certificato da un file eseguibile firmatoCreating a certificate from a signed executable file

CREATE CERTIFICATE Shipping19   
    FROM EXECUTABLE FILE = 'c:\Shipping\Certs\Shipping19.dll';  
GO  

In alternativa, è possibile creare un assembly dal file dll e quindi creare un certificato dall'assembly.Alternatively, you can create an assembly from the dll file, and then create a certificate from the assembly.

CREATE ASSEMBLY Shipping19   
    FROM ' c:\Shipping\Certs\Shipping19.dll'   
    WITH PERMISSION_SET = SAFE;  
GO  
CREATE CERTIFICATE Shipping19 FROM ASSEMBLY Shipping19;  
GO  

D.D. Creazione di un certificato autofirmatoCreating a self-signed certificate

Nell'esempio seguente viene creato un certificato denominato Shipping04 senza specificare una password di crittografia.The following example creates a certificate called Shipping04 without specifying an encryption password. Questo esempio può essere utilizzato con Azure SQL Data WarehouseAzure SQL Data Warehouse e Parallel Data WarehouseParallel Data Warehouse.This example can be used with Azure SQL Data WarehouseAzure SQL Data Warehouse and Parallel Data WarehouseParallel Data Warehouse.

CREATE CERTIFICATE Shipping04   
   WITH SUBJECT = 'Sammamish Shipping Records';  
GO  

Vedere ancheSee Also

Istruzione ALTER CERTIFICATE ( Transact-SQL ) ALTER CERTIFICATE (Transact-SQL)
DROP CERTIFICATE ( Transact-SQL ) DROP CERTIFICATE (Transact-SQL)
BACKUP CERTIFICATE (Transact-SQL) BACKUP CERTIFICATE (Transact-SQL)
Gerarchia di crittografia Encryption Hierarchy
EVENTDATA (Transact-SQL) EVENTDATA (Transact-SQL)
CERTENCODED ( Transact-SQL ) CERTENCODED (Transact-SQL)
CERTPRIVATEKEY ( Transact-SQL )CERTPRIVATEKEY (Transact-SQL)