Eu tenho um banco de dados ao qual um aplicativo se conecta usando db_owner
permissões.
Como determinar efetivamente o conjunto mínimo de requisitos realmente necessários para que esse usuário (aplicativo) seja executado sem causar interrupção do serviço? (ou seja, sem tentativa e erro)
Isso deve estar disponível no desenvolvedor que escreveu o software. No entanto, às vezes essas informações não estão disponíveis - por exemplo, se o software for escrito por um fornecedor terceirizado. A maioria dos fornecedores tende a dizer que precisa
sa
oudb_owner
que geralmente se deve a uma codificação ruim da parte deles, se for o caso.Se essas informações não estiverem disponíveis com o desenvolvedor do software, sua melhor solução seria executar um rastreamento do criador de perfil nessa conta de usuário durante um determinado período de tempo - isso deve fornecer a maioria dos objetos aos quais ele precisa acessar.
A melhor prática seria configurar um ambiente de teste e colocar o rastreamento nele - você realmente não deseja colocar um rastreamento em um banco de dados de produção, a menos que seja absolutamente necessário - e esperar testes significativos antes de poder alterar as permissões das contas de produção.
Espero que isso ajude você.
Tudo se resume a uma coisa simples: você tem acesso ao código-fonte do aplicativo?
Se você fizer isso (e presumivelmente concordar em fazer essas alterações; também, tecnicamente, a engenharia reversa se enquadra nessa categoria, mas... você não ouviu isso de mim), é simplesmente uma questão de pesquisar, testar e documentação. Navegação suave, certo? :)
Caso contrário, há dois casos:
O aplicativo está atualmente sob licença e/ou o fornecedor/proprietário não quer que você se intrometa. Fazer esse tipo de mudança é definitivamente um não-não. Existem casos raros em que alterações no nível do banco de dados são aceitáveis, mas esse certamente não é um deles.
O aplicativo está sem licença ou o fornecedor/proprietário não se importa com o que você faz com ele. Nesse caso, não há escolha a não ser determinar quais permissões são necessárias com base nas consultas de banco de dados feitas pelo aplicativo. Tecnicamente, isso não é adivinhação, mas você só encontrará as permissões necessárias com base no que já ocorreu , não no que é necessário no futuro . Isso se resume ao rastreamento completo (Profiler ou Extended Events) e testes.