Condividi tramite


CREATE CERTIFICATE (Transact-SQL)

Viene aggiunto un certificato a un database.

Icona di collegamento a un argomentoConvenzioni della sintassi Transact-SQL

Sintassi

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> ) ] 
      }
        
<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' ]  

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

Argomenti

  • certificate_name
    Nome con il quale sarà noto il certificato all'interno del database.

  • AUTHORIZATION user_name
    Nome dell'utente che sarà il proprietario del certificato.

  • ASSEMBLY assembly_name
    Specifica un assembly firmato già caricato nel database.

  • [ EXECUTABLE ] FILE ='path_to_file'
    Specifica il percorso completo, nome di file incluso, del file con codifica DER che contiene il certificato. Se si utilizza l'opzione EXECUTABLE, il file è una DLL firmata con il certificato. path_to_file può essere un percorso locale o un percorso UNC di rete. L'accesso al file verrà effettuato nel contesto di protezione dell'account del servizio SQL Server. L'account deve disporre delle necessarie autorizzazioni per il file system.

  • WITH PRIVATE KEY
    Specifica che la chiave privata del certificato viene caricata in SQL Server. Questa clausola è valida solo se il certificato viene creato da un file. Per caricare la chiave privata di un assembly, utilizzare ALTER CERTIFICATE.

  • FILE ='path_to_private_key'
    Specifica il percorso completo, nome di file incluso, della chiave privata. path_to_private_key può essere un percorso locale o un percorso UNC di rete. L'accesso al file verrà effettuato nel contesto di protezione dell'account del servizio SQL Server. L'account deve disporre delle necessarie autorizzazioni per il file system.

  • DECRYPTION BY PASSWORD = 'key_password'
    Specifica la password necessaria per decrittografare la chiave privata recuperata da un file. Questa clausola è facoltativa se la chiave privata è protetta con una password Null. Non è consigliabile salvare una chiave privata in un file senza proteggerla con una password. Se è richiesta una password ma questa non viene specificata, l'istruzione avrà esito negativo.

  • ENCRYPTION BY PASSWORD ='password'
    Specifica la password che verrà utilizzata per crittografare la chiave privata. Utilizzare questa opzione solo se si desidera crittografare il certificato con una password. Se questa clausola è omessa, la chiave privata verrà crittografata con la chiave master del database. password deve soddisfare i criteri password Windows del computer che sta eseguendo l'istanza di SQL Server. Per ulteriori informazioni, vedere Criteri password.

  • SUBJECT = 'certificate_subject_name'
    Il termine subject fa riferimento a un campo nei metadati del certificato, conformemente ai requisiti dello standard X.509. L'oggetto può essere costituito da un massimo di 128 caratteri. Gli oggetti con lunghezza maggiore di 128 caratteri verranno troncati al momento dell'archiviazione nel catalogo, ma nell'oggetto BLOB contenente il certificato verrà mantenuto il nome di oggetto completo.

  • START_DATE ='datetime'
    Data di inizio validità del certificato. Se non si specifica una data, per il parametro START_DATE verrà impostata la data corrente. START_DATE è in ora UTC e si può specificare in un qualsiasi formato convertibile in una data e ora.

  • EXPIRY_DATE ='datetime'
    Data di scadenza del certificato. Se non si specifica una data, per il parametro EXPIRY_DATE verrà impostata una data di scadenza corrispondente a un anno dopo START_DATE. EXPIRY_DATE è in ora UTC e si può specificare in un qualsiasi formato convertibile in una data e ora. In SQL Server Service Broker viene controllata la data di scadenza, ma la scadenza non viene applicata quando il certificato viene utilizzato per la crittografia.

  • ACTIVE FOR BEGIN_DIALOG = { ON | OFF }
    Rende il certificato disponibile per l'initiator di una conversazione di dialogo di Service Broker. Il valore predefinito è ON.

Osservazioni

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. L'istruzione CREATE CERTIFICATE consente di caricare un certificato da un file o un assembly e può inoltre essere utilizzata per generare una coppia di chiavi e creare un certificato autofirmato.

Le chiavi private generate da SQL Server hanno una lunghezza di 1024 bit. Le chiavi private importate da un'origine esterna devono avere una lunghezza compresa tra 384 bit e 3456 bit. La lunghezza di una chiave privata importata deve essere un intero multiplo di 64 bit.

La chiave privata deve corrispondere alla chiave pubblica specificata da certificate_name.

Quando si crea un certificato da un contenitore, il caricamento della chiave privata è facoltativo. La chiave privata viene invece sempre creata quando SQL Server genera un certificato autofirmato. Per impostazione predefinita, la chiave privata viene crittografata con la chiave master del database. Se la chiave master del database non esiste e non si specifica una password, l'istruzione avrà esito negativo.

L'opzione ENCRYPTION BY PASSWORD non è obbligatoria se la chiave privata verrà crittografata con la chiave master del database. Utilizzare questa opzione solo se la chiave privata verrà crittografata con una password. Se non si specifica la password, la chiave privata del certificato verrà crittografata con la chiave master del database. Verrà generato un errore se si omette questa clausola e non è possibile aprire la chiave master del database.

Non è necessario specificare una password di decrittografia quando la chiave privata è crittografata con la chiave master del database.

[!NOTA]

Le funzioni predefinite per la crittografia e la firma non controllano le date di scadenza dei certificati. Gli utenti di queste funzioni dovranno decidere autonomamente quando eseguire il controllo delle scadenze dei certificati.

Autorizzazioni

È richiesta l'autorizzazione CREATE CERTIFICATE per il database. Solo gli account di accesso di Windows e di SQL Server e i ruoli applicazione possono disporre di certificati. I gruppi e i ruoli non possono disporre di certificati.

Esempi

A. Creazione di un certificato autofirmato

Nell'esempio seguente viene creato un certificato denominato Shipping04. La chiave privata di questo certificato è protetta con una password.

USE AdventureWorks;
CREATE CERTIFICATE Shipping04 
   ENCRYPTION BY PASSWORD = 'pGFD4bb925DGvbd2439587y'
   WITH SUBJECT = 'Sammamish Shipping Records', 
   EXPIRY_DATE = '10/31/2009';
GO

B. Creazione di un certificato da un file

Nell'esempio seguente viene creato un certificato nel database e la coppia di chiavi viene caricata da file.

USE AdventureWorks;
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. Creazione di un certificato da un file eseguibile firmato

USE AdventureWorks;
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.

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