Há muitas maneiras de ver um procedimento criptografado.
Exemplo de um procedimento criptografado no SSMS:
Há uma pergunta muito boa: Como visualizar uma exibição criptografada ou um procedimento armazenado, onde você pode ver muitas maneiras de visualizar o código do seu procedimento criptografado, usando ferramentas de terceiros , a Conexão de Administrador Dedicada , revertendo a cifra de fluxo RC4 , só para mencionar algumas, mas há outras boas respostas lá.
Aqui está outra maneira espetacular de ver o código de um procedimento armazenado criptografado usando o DAC e um servidor vinculado.
Como então posso implantar procedimentos armazenados criptografados nos bancos de dados dos meus clientes, para que eles não consigam descriptografar e ver o código?
No passado, eles usaram nosso código em seus próprios procedimentos armazenados e quebraram a integridade dos dados em muitos aspectos e áreas. Não queremos que isso aconteça novamente; se eles precisarem de alguma mudança ou melhoria, eles podem passar pelo suporte e nós podemos providenciar isso.
Eles hospedam os bancos de dados e têm total acesso/controle e responsabilidade por backups, manutenção, etc. Não posso dar mais detalhes, talvez os DBAs deles estejam lendo isso agora ;)
Eu estava pensando que talvez eu pudesse adicionar ou anexar a descriptografia a uma senha...?
Eu também consideraria ferramentas de terceiros. Por favor, mencione se você tem uma experiência positiva com qualquer uma dessas ferramentas, mas eu preferiria fazer isso via SQL Server.
Pergunta: Existe uma maneira de implantar procedimentos armazenados criptografados que não podem ser descriptografados?
TL;DR: você não pode resolver seu problema subjacente dessa maneira.
Não há como bloquear um usuário competente com acesso root de executar ações administrativas como essa.
Se você não quiser que os clientes tenham privilégios de administrador de sistema, não poderá deixá-los se auto-hospedar.
Você pode dividir a diferença declarando que quaisquer alterações em determinado código anulam o SLA deles, mas isso é o mais perto que você vai chegar (e mesmo isso tem problemas específicos de implementação). Fora isso, você precisa hospedar o banco de dados para eles.
este artigo é muito útil:
Como criptografar um procedimento armazenado no SQL Server
ele mostra vários aspectos da criptografia, descriptografia e muito mais do procedimento de armazenamento:
Aqui estão algumas coisas que você deve saber sobre criptografia de procedimentos armazenados no SQL Server:
Usuários privilegiados que podem acessar tabelas do sistema pela porta DAC ou acessar diretamente arquivos de banco de dados ainda poderão visualizar a definição do procedimento armazenado (não criptografado).
Usuários que podem anexar um depurador ao processo do servidor podem recuperar o procedimento original da memória em tempo de execução.
3. O uso de criptografia impede que o procedimento seja publicado como parte da replicação do SQL Server.
Os procedimentos CLR não podem ser criptografados.
Procedimentos compilados nativamente não podem ser criptografados.
Em relação à minha própria pergunta acima,
Não acho que haja uma maneira. Só para executar um procedimento armazenado, o SQL Server precisa ser capaz de ler o código SQL (e compilá-lo, se necessário).
Então, se existisse tal recurso, o usuário só conseguiria executar o procedimento se tivesse a senha.
A menos que o sql armazenasse apenas o código compilado sem ter que manter o código-fonte. Isso é possível com um procedimento armazenado CLR , mas o IL subjacente poderia ser submetido a engenharia reversa por um DBA determinado.