CREATE CERTIFICATE (Transact-SQL)
Adiciona um certificado a um banco de dados.
Sintaxe
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'
Argumentos
certificate_name
É o nome pelo qual o certificado será conhecido no banco de dados.AUTHORIZATION user_name
É o nome do usuário que será proprietário desse certificado.ASSEMBLY assembly_name
Especifica um assembly assinado que já foi carregado no banco de dados.[ EXECUTABLE ] FILE ='path_to_file'
Especifica o caminho completo, incluindo nome de arquivo, para um arquivo codificado por DER que contém o certificado. Se a opção EXECUTABLE for usada, o arquivo será uma DLL que foi assinada pelo certificado. path_to_file pode ser um caminho local ou um caminho UNC para um local de rede. O arquivo será acessado no contexto de segurança da conta de serviço do SQL Server. Essa conta deve ter as permissões de sistema de arquivos necessárias.WITH PRIVATE KEY
Especifica que a chave privada do certificado foi carregada no SQL Server. Essa cláusula é válida apenas quando o certificado é criado a partir de um arquivo. Para carregar a chave particular de um assembly, use ALTER CERTIFICATE.FILE ='path_to_private_key'
Especifica o caminho completo, incluindo o nome de arquivo, para a chave particular. path_to_private_key pode ser um caminho local ou um caminho UNC para um local de rede. O arquivo será acessado no contexto de segurança da conta de serviço do SQL Server. Essa conta deve ter as permissões de sistema de arquivos necessárias.DECRYPTION BY PASSWORD = 'key_password'
Especifica a senha necessária para descriptografar uma chave particular que é recuperada de um arquivo. Essa cláusula será opcional se a chave particular for protegida por uma senha nula. Não é recomendável salvar uma chave particular em um arquivo sem proteção de senha. Se uma senha for necessária, mas nenhuma senha for especificada, a instrução falhará.ENCRYPTION BY PASSWORD ='password'
Especifica a senha que será usada para criptografar a chave particular. Use esta opção somente se quiser criptografar o certificado com uma senha. Se esta cláusula for omitida, a chave particular será criptografada com a chave mestra do banco de dados. A password deverá atender aos requisitos da diretiva de senha do Windows do computador que está executando a instância do SQL Server. Para obter mais informações, consulte Diretiva de senha.SUBJECT = 'certificate_subject_name'
O termo subject se refere a um campo nos metadados do certificado, conforme definido pelo padrão X.509. O assunto pode ter até 128 caracteres. Os assuntos que excederem 128 caracteres serão truncados quando forem armazenados no catálogo, mas o BLOB (objeto binário grande) que contém o certificado manterá o nome completo do assunto.START_DATE ='datetime'
É a data na qual o certificado se torna válido. Se seu valor não for especificado, START_DATE será definido com a data atual. START_DATE está na hora UTC e pode ser especificado em qualquer formato que possa ser convertido em data e hora.EXPIRY_DATE ='datetime'
É a data na qual o certificado expira. Se seu valor não for especificado, EXPIRY_DATE será definido com uma data um ano após START_DATE. EXPIRY_DATE está na hora UTC e pode ser especificado em qualquer formato que possa ser convertido em data e hora. O SQL Server Service Broker verifica a data de validade. No entanto, a validade não é forçada quando o certificado é usado para criptografia.ACTIVE FOR BEGIN_DIALOG = { ON | OFF }
Disponibiliza o certificado para o iniciador de uma conversação de caixa de diálogo do Service Broker. O valor padrão é ON.
Comentários
Um certificado é um protegível em nível de banco de dados que segue o padrão X.509 e oferece suporte aos campos X.509 V1. CREATE CERTIFICATE pode carregar um certificado de um arquivo ou assembly. Essa instrução também pode gerar um par de chaves e criar um certificado auto-assinado.
As chaves particulares geradas pelo SQL Server são de 1.024 bits. As chaves particulares importadas de uma origem externa têm um comprimento mínimo de 384 bits e máximo de 3.456 bits. O comprimento de uma chave particular importada deve ser um número inteiro múltiplo de 64 bits.
A chave particular deve corresponder à chave pública especificada por certificate_name.
Ao criar um certificado de um contêiner, o carregamento da chave particular é opcional. Mas quando o SQL Server gera um certificado auto-assinado, a chave particular sempre é criada. Por padrão, a chave particular é criptografada usando a chave mestra do banco de dados. Se a chave mestra do banco de dados não existir e nenhuma senha for especificada, a instrução falhará.
A opção ENCRYPTION BY PASSWORD não será necessária quando a chave particular for criptografada com a chave mestra do banco de dados. Use essa opção somente quando a chave particular for criptografada com uma senha. Se nenhuma senha for especificada, a chave particular do certificado será criptografada com a chave mestra do banco de dados. Omitir essa cláusula causará um erro se a chave mestra do banco de dados não puder ser aberta.
Não é necessário especificar uma senha de descriptografia quando a chave particular for criptografada com a chave mestra do banco de dados.
Observação |
---|
As funções internas para criptografia e assinatura não verificam as datas de expiração de certificados. Os usuários dessas funções devem decidir quando verificar expiração de certificado. |
Permissões
Requer a permissão CREATE CERTIFICATE no banco de dados. Somente logons do Windows, logons do SQL Server e funções de aplicativo podem possuir certificados. Grupos e funções não podem possuir certificados.
Exemplos
A. Criando um certificado auto-assinado
O exemplo a seguir cria um certificado denominado Shipping04. A chave particular desse certificado é protegida usando uma senha.
USE AdventureWorks;
CREATE CERTIFICATE Shipping04
ENCRYPTION BY PASSWORD = 'pGFD4bb925DGvbd2439587y'
WITH SUBJECT = 'Sammamish Shipping Records',
EXPIRY_DATE = '10/31/2009';
GO
B. Criando um certificado de um arquivo
O exemplo a seguir cria um certificado no banco de dados, carregando o par de chaves a partir de arquivos.
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. Criando um certificado a partir de um arquivo executável assinado
USE AdventureWorks;
CREATE CERTIFICATE Shipping19
FROM EXECUTABLE FILE = 'c:\Shipping\Certs\Shipping19.dll';
GO
Como alternativa, é possível criar um assembly a partir do arquivo dll e, em seguida, um certificado a partir do assembly.
USE AdventureWorks;
CREATE ASSEMBLY Shipping19
FROM ' c:\Shipping\Certs\Shipping19.dll'
WITH PERMISSION_SET = SAFE;
GO
CREATE CERTIFICATE Shipping19 FROM ASSEMBLY Shipping19;
GO