A documentação do BOL diz que a permissão sysadmin é necessária para executar o depurador.
Tenho 90% de certeza de que não há solução alternativa para esse requisito, mas pensei em perguntar caso alguém encontrasse uma maneira de conceder permissão ao Debugger sem conceder permissão ao administrador do sistema.
O que as pessoas fazem quando você tem uma equipe de desenvolvedores precisando passar por um loop de cursor complicado com variáveis, etc., para depurar algum aspecto disso?
A maioria das lojas não permite que os desenvolvedores tenham permissão sysadmin mesmo em servidores de desenvolvimento, e muitos não permitem que os desenvolvedores mantenham uma cópia dos dados corporativos em sua máquina local com sua própria edição do servidor sql do desenvolvedor, por exemplo, devido a PII e razões de segurança de dados.
Não tenho certeza por que o depurador seria configurado dessa maneira.
Então, estou curioso para saber como outras pessoas lidam com as solicitações de permissão do Debugger em um cenário semelhante.
O que você faz no seu ambiente?
Você pode adicionar uma
declare @idebug int
variável aos seus procedimentos armazenados e, em seguida, codificar os bits importantes quando precisar de informações relevantes.Seu procedimento armazenado ficaria um pouco assim:
Este é apenas um exemplo de como isso pode ser feito.
Você então chamaria o sproc com:
...que forneceria informações básicas (bit a bit
1
) e detalhadas (bit a bit2
), dependendo de onde você inseriu o código relevante.Eu tive problemas uma vez ao executar um procedimento armazenado que não estava produzindo os resultados corretos e tive que depurar as instruções individuais, então acabei de inserir os vários níveis de depuração no procedimento armazenado e, quando necessário, executei o sproc com os
@iiDebug
valores relevantes dependendo de o nível de informação que eu precisava.Exemplos de valores de entrada:
Exemplos como código (a variável de entrada
@iiDebug
é armazenada no@debug
código sproc):Estes são apenas exemplos rápidos de como você pode introduzir a depuração sem ter acesso ao SQL Server Debugger ou aos privilégios necessários.
Se você não se opõe totalmente a dar a cada desenvolvedor uma cópia do banco de dados para jogar localmente, considere reservar um tempo para configurar um script em seu ambiente de teste/desenvolvimento que reduzirá o banco de dados a um tamanho de brinquedo. Mantenha os últimos n meses de dados, limpe/anonimize seus dados de PII e, por mais que me doa dizer, se necessário, configure os dados necessários para testar os cenários (DBAs, bem, pelo menos eu, não como configurar dados de teste para outros desenvolvedores, mas se você é o único com acesso a eles, acho que precisa). Cada desenvolvedor pode pegar esse banco de dados e restaurá-lo localmente.
Onde eu trabalho, temos um servidor sandbox onde vale tudo, então é opcional para o desenvolvedor restaurar localmente ou jogar no sandbox. Mas o mesmo conceito acima se aplica.
Muito provavelmente devido à natureza invasiva/insegura da depuração: o depurador se anexa ao próprio processo do SQL Server para que ele possa ver dentro desse processo e até mesmo fazer alterações em tempo real. Isso é assumir o controle do servidor. E impacta muito a segurança, bem como a estabilidade.
É também por isso que você não deve fazer isso na Produção. De forma alguma.
Obtenha novos/melhores desenvolvedores ;-)
Verdadeiro. É por isso que sempre achei útil configurar uma máquina de teste isolada. Quaisquer dados da Produção podem ser carregados nele, mas ele só precisa conter dados suficientes para percorrer o código que está sendo depurado. Ele pode até ser isolado para que quem o estiver usando não possa transferir os dados para sua máquina de desenvolvimento. Mas o código pode ser modificado no local sem a necessidade de revisão de código, pois é apenas teste/depuração. E você não precisa se preocupar com modificação de dados, como se eles tivessem restaurado esses dados na estação de trabalho do desenvolvedor.
Depois que o problema for identificado e uma correção testada, os bancos de dados, bem como os dados e os arquivos de log, poderão ser descartados. Se houver PII que precise ser limpo (supondo que isso não interfira no teste/depuração), isso pode ser feito antes de dar acesso a qualquer desenvolvedor.
Eu uso o SQL Builder do CAST (versão 7.0.11, build 4230). Ele me permite depurar procedimentos armazenados SEM essas permissões especiais que o SQL Server Management Studio requer. Eu tive que criar um procedimento armazenado fictício dentro do próprio banco de dados para o SQL Builder funcionar:
O único problema é que as ferramentas CAST não são gratuitas.