Estou implantando um projeto SQL Server CLR em meu banco de dados e tenho certeza de algo. Para dar acesso externo à função no projeto estou criando uma chave assimétrica a partir da montagem dos projetos, criando um login a partir dessa chave e dando acesso a esse login. Do MSDN:
USE master
GO
CREATE ASYMMETRIC KEY SQLCLRTestKey FROM EXECUTABLE FILE = 'path\to\my\assembly.dll'
CREATE LOGIN SQLCLRTestLogin FROM ASYMMETRIC KEY SQLCLRTestKey
GRANT EXTERNAL ACCESS ASSEMBLY TO SQLCLRTestLogin
GO
Minha dúvida é, preciso manter o assembly no sistema de arquivos após a criação da chave para que o login funcione? Eu sei que poderia testar isso fazendo o acima, removendo a montagem e vendo se as coisas quebram, mas o único ambiente ao qual tenho esse tipo de acesso agora é um de produção e não quero mexer com as coisas lá. Assim, perguntei aqui. Alguém saberia me dizer se preciso manter o assembly após a criação da chave? Obrigado!
Não há necessidade de manter o arquivo. O arquivo é lido pela instrução CREATE ASYMMETRIC KEY, a chave é extraída e salva no banco de dados e pronto, todas as referências posteriores a ela usarão a chave do banco de dados.
Como regra geral, os bancos de dados tentam evitar dependências no sistema de arquivos porque precisam trabalhar em cenários de restauração de backup, pode haver envolvimento no envio de logs ou espelhamento de banco de dados, etc. Por exemplo, quando você cria um assembly no SQLCLR, o assembly é carregado no banco de dados e isso se torna a cópia mestre, não aquela no sistema de arquivos. Trata-se de tornar o banco de dados uma entidade independente . Agora é claro que sei que no mundo real essa história tem alguns furos, mas o CREATE ASYMMETRIC KEY não é um deles :)