Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Os objetos de banco de dados gerenciado, como os procedimentos armazenados ou gatilhos, são compilados e implantados em unidades chamadas de assembly. Os assemblies 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 tópico discute 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. Este é 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 físico do arquivo que é local no computador.
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 também cria os assemblies referenciados pelo assembly de nível raiz, se os assemblies referenciados ainda não forem criados no banco de dados.
Usuários de banco de dados ou funções de usuário recebem permissões para criar e, assim, possuir assemblies em um banco de dados. Para criar assemblies, o usuário ou a função do banco de dados deve ter a permissão CREATE ASSEMBLY.
Um assembly só poderá ter êxito ao referenciar outros assemblies se:
O assembly que é chamado ou referenciado pertence ao mesmo usuário ou função.
O assembly chamado ou referenciado foi criado no mesmo banco de dados.
Especificando a 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_ACCESSou UNSAFE. Quando a CREATE ASSEMBLY instrução é 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. Para obter mais informações, consulte o exemplo de Representação no CodePlex.
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 SAFE permissão definida simplesmente omitindo a terceira linha de código acima:
CREATE ASSEMBLY SQLCLRTest
FROM 'C:\MyDBApp\SQLCLRTest.dll';
Quando o código em um assembly é executado no 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.
Criando assemblies EXTERNAL_ACCESS e UNSAFE
EXTERNAL_ACCESS aborda cenários em que 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 A permissão de código é para as situações em que um assembly não é verificávelmente seguro ou requer acesso adicional a recursos restritos, como a API do Microsoft Win32.
Para criar um assembly EXTERNAL_ACCESS ou UNSAFE no SQL Server, uma das duas condições a seguir deve ser atendida:
O assembly é assinado com nome forte ou com Authenticode usando 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 de
EXTERNAL ACCESS ASSEMBLY(para assemblies de acesso externo) ou permissão deUNSAFE ASSEMBLY(para assemblies não seguros).O DBO (proprietário do banco de dados) tem
EXTERNAL ACCESS ASSEMBLYpermissão (paraEXTERNAL ACCESSassemblies) ouUNSAFE ASSEMBLY(paraUNSAFEassemblies) e o banco de dados tem a Propriedade de Banco de Dados TRUSTWORTHY definida comoON.
As duas condições listadas acima também são verificadas no tempo de carregamento do assembly (que inclui a execução). Pelo menos um das condições precisa ser cumprida para carregar o assembly.
Recomendamos que a Propriedade de Banco de Dados TRUSTWORTHY em um banco de dados não seja definida apenas para ON 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 de assembly no banco de dados mestre. Um logon mapeado para essa chave assimétrica deve ser criado e o logon deve receber EXTERNAL ACCESS ASSEMBLY ou UNSAFE ASSEMBLY permissão.
As instruções Transact-SQL a seguir 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 logon novo para associar com a chave assimétrica. Esse logon só é usado para conceder permissões; ele não precisa ser associado a um usuário ou usado dentro do aplicativo.
Para criar um EXTERNAL ACCESS assembly, o criador precisa ter EXTERNAL ACCESS permissão. Isso é especificado ao criar o assembly:
CREATE ASSEMBLY SQLCLRTest
FROM 'C:\MyDBApp\SQLCLRTest.dll'
WITH PERMISSION_SET = EXTERNAL_ACCESS;
As instruções Transact-SQL a seguir 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 é 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 detalhes sobre as permissões para cada uma das configurações, consulte CLR Integration Security.
Consulte Também
Gerenciando assemblies de integração clr
Alterando um assembly
Soltando um assembly
Segurança de acesso ao código de integração clr
propriedade TRUSTWORTHY do banco de dados
Permitindo chamadores parcialmente confiáveis