Condividi tramite


CREATE CERTIFICATE (Transact-SQL)

Aggiunge un certificato in 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 = 'mm/dd/yyyy' | EXPIRY_DATE = 'mm/dd/yyyy'

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
    La clausola WITH PRIVATE KEY specifica che la chiave privata del certificato deve essere 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 la clausola viene omessa, la chiave privata verrà crittografata con la chiave master del database. La password deve essere conforme ai criteri di complessità delle password. Per ulteriori informazioni, vedere Criteri di gestione delle password.
  • SUBJECT = 'certificate_subject_name'
    Il termine subject fa riferimento al campo dell'oggetto nei metadati del certificato, conformemente ai requisiti dello standard X.509. L'oggetto può contenere al massimo 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 ='mm/dd/yyyy'
    Data di inizio validità del certificato. Se non si specifica una data, per il parametro START_DATE verrà impostata la data corrente.
  • EXPIRY_DATE ='mm/dd/yyyy'
    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.
  • 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 nell'intervallo da 384 bit a 3.456 bit. La lunghezza di una chiave privata importata deve essere un valore integer 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.

Gli argomenti START_DATE ed EXPIRY_DATE non consentono di specificare ore per queste date. È tuttavia possibile utilizzare le funzioni di data e ora disponibili in SQL Server per aggiungere ore specifiche alle date di inizio e di scadenza dei certificati. Per ulteriori informazioni, vedere gli argomenti seguenti:

Autorizzazioni

È richiesta l'autorizzazione CREATE CERTIFICATE per il database.

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

Vedere anche

Riferimento

ALTER CERTIFICATE (Transact-SQL)
DROP CERTIFICATE (Transact-SQL)
BACKUP CERTIFICATE (Transact-SQL)
EVENTDATA (Transact-SQL)

Altre risorse

Gerarchia di crittografia

Guida in linea e informazioni

Assistenza su SQL Server 2005