Criar um assembly
Aplica-se a:SQL Server
Objetos de banco de dados gerenciados, como procedimentos armazenados ou gatilhos, são compilados e, em seguida, implantados em unidades chamadas de assembly. Os assemblies de DLL gerenciados devem ser registrados no SQL Server antes que a funcionalidade fornecida pelo assembly possa ser usada. Para registrar um assembly em um banco de dados do SQL Server, use a instrução CREATE ASSEMBLY
. Este artigo descreve como registrar um assembly em um banco de dados usando a instrução CREATE ASSEMBLY
e como especificar as configurações de segurança para o assembly.
A instrução CREATE ASSEMBLY
A instrução CREATE ASSEMBLY
é usada para criar um assembly em um banco de dados. Aqui está um exemplo:
CREATE ASSEMBLY SQLCLRTest
FROM 'C:\MyDBApp\SQLCLRTest.dll';
A cláusula FROM
especifica o nome do caminho do assembly a ser criado. Esse caminho pode ser um caminho UNC (Convenção de Nomenclatura Universal) ou um caminho de arquivo físico local para a máquina.
O SQL Server não permite registrar versões diferentes de um assembly com o mesmo nome, cultura e chave pública.
É possível criar assemblies que fazem referência a outros assemblies. Quando um assembly é criado no SQL Server, o SQL Server também cria os assemblies referenciados pelo assembly de nível raiz, se os assemblies referenciados ainda não tiverem sido criados no banco de dados.
Usuários de banco de dados ou funções de usuário recebem permissões para criar e, portanto, possuir assemblies em um banco de dados. Para criar assemblies, o usuário ou função do banco de dados deve ter a permissão CREATE ASSEMBLY
.
Um assembly só pode ter êxito na referência a outros assemblies se:
- O assembly chamado ou referenciado pertence ao mesmo usuário ou função.
- O assembly que é chamado ou referenciado, foi criado no mesmo banco de dados.
Especificar segurança ao criar assemblies
Ao criar um assembly em um banco de dados do SQL Server, você pode especificar um dos três níveis diferentes de segurança nos quais seu código pode ser executado: SAFE
, EXTERNAL_ACCESS
ou UNSAFE
. Quando a instrução CREATE ASSEMBLY
é executada, determinadas verificações são executadas no assembly de código, o que pode fazer com que o assembly não seja registrado no servidor.
SAFE
é o conjunto de permissões padrão e funciona para a maioria dos cenários. Para especificar um determinado nível de segurança, modifique a sintaxe da instrução CREATE ASSEMBLY
da seguinte maneira:
CREATE ASSEMBLY SQLCLRTest
FROM 'C:\MyDBApp\SQLCLRTest.dll'
WITH PERMISSION_SET = SAFE;
Também é possível criar um assembly com a permissão SAFE
definida omitindo a terceira linha do anterior.
CREATE ASSEMBLY SQLCLRTest
FROM 'C:\MyDBApp\SQLCLRTest.dll';
Quando o código em um assembly é executado sob o conjunto de permissões SAFE
, ele só pode fazer computação e acesso a dados dentro do servidor por meio do provedor gerenciado em processo.
Criar assemblies EXTERNAL_ACCESS e UNSAFE
EXTERNAL_ACCESS
aborda cenários nos quais o código precisa acessar recursos fora do servidor, como arquivos, rede, registro e variáveis de ambiente. Sempre que o servidor acessa um recurso externo, ele representa o contexto de segurança do usuário que chama o código gerenciado.
UNSAFE
permissão de código é para aquelas situações em que um assembly não é verificável ou requer acesso adicional a recursos restritos, como a API do Win32.
Para criar um assembly EXTERNAL_ACCESS
ou UNSAFE
no SQL Server, uma das duas condições a seguir deve ser atendida:
O assembly é um nome forte assinado ou Authenticode assinado com um certificado. Esse nome forte (ou certificado) é criado dentro do SQL Server como uma chave assimétrica (ou certificado) e tem um logon correspondente com permissão
EXTERNAL ACCESS ASSEMBLY
(para assemblies de acesso externo) ou permissãoUNSAFE ASSEMBLY
(para assemblies não seguros).O proprietário do banco de dados (DBO) tem permissão
EXTERNAL ACCESS ASSEMBLY
(para assembliesEXTERNAL ACCESS
) ouUNSAFE ASSEMBLY
(para assembliesUNSAFE
) e o banco de dados tem a propriedade de banco de dados TRUSTWORTHY definida comoON
.
As duas condições listadas anteriormente também são verificadas no tempo de carregamento da montagem (o que inclui a execução). Pelo menos uma das condições deve ser cumprida para carregar o conjunto.
Recomendamos que a propriedade de banco de dados TRUSTWORTHY em um banco de dados não esteja definida como ON
apenas para executar o código CLR (Common Language Runtime) no processo do servidor. Em vez disso, recomendamos que uma chave assimétrica seja criada a partir do arquivo assembly no banco de dados master
. Um login mapeado para essa chave assimétrica deve ser criado e o login deve receber permissão EXTERNAL ACCESS ASSEMBLY
ou UNSAFE ASSEMBLY
.
As instruções Transact-SQL a seguir executam as etapas necessárias para criar uma chave assimétrica, mapear um logon para essa chave e conceder permissão EXTERNAL_ACCESS
para o logon. Você deve executar as seguintes instruções Transact-SQL antes de executar a instrução CREATE ASSEMBLY
.
USE master;
GO
CREATE ASYMMETRIC KEY SQLCLRTestKey
FROM EXECUTABLE FILE = 'C:\MyDBApp\SQLCLRTest.dll';
CREATE LOGIN SQLCLRTestLogin
FROM ASYMMETRIC KEY SQLCLRTestKey;
GRANT EXTERNAL ACCESS ASSEMBLY TO SQLCLRTestLogin;
GO
Observação
Você deve criar um novo login para associar à chave assimétrica. Este login é usado apenas para conceder permissões. Ele não precisa ser associado a um usuário ou usado dentro do aplicativo.
Para criar um assembly EXTERNAL ACCESS
, o criador precisa especificar EXTERNAL ACCESS
permissão ao criar o assembly:
CREATE ASSEMBLY SQLCLRTest
FROM 'C:\MyDBApp\SQLCLRTest.dll'
WITH PERMISSION_SET = EXTERNAL_ACCESS;
As instruções Transact-SQL a seguir executam as etapas necessárias para criar uma chave assimétrica, mapear um logon para essa chave e conceder permissão UNSAFE
para o logon. Você deve executar as seguintes instruções Transact-SQL antes de executar a instrução CREATE ASSEMBLY
.
USE master;
GO
CREATE ASYMMETRIC KEY SQLCLRTestKey
FROM EXECUTABLE FILE = 'C:\MyDBApp\SQLCLRTest.dll';
CREATE LOGIN SQLCLRTestLogin
FROM ASYMMETRIC KEY SQLCLRTestKey;
GRANT UNSAFE ASSEMBLY TO SQLCLRTestLogin;
GO
Para especificar que um assembly seja carregado com UNSAFE
permissão, especifique o conjunto de permissões UNSAFE
ao carregar o assembly no servidor:
CREATE ASSEMBLY SQLCLRTest
FROM 'C:\MyDBApp\SQLCLRTest.dll'
WITH PERMISSION_SET = UNSAFE;
Para obter mais informações sobre as permissões para cada uma das configurações, consulte de segurança de integração CLR .
Conteúdo relacionado
- Gerenciar assemblies de integração CLR
- Alterar uma de montagem
- Solte uma de montagem
- Integração CLR de Segurança de Acesso ao Código
- propriedade de banco de dados TRUSTWORTHY