Temos uma situação em que os desenvolvedores não têm UPDATE
permissão, MAS trabalham com aplicativos e veem cadeias de conexão -> eles conhecem senhas de algumas contas SQL (exemplo SQLLogin1
) que possuem permissões UPDATE. Atualmente, nossas operações não são perfeitas e, às vezes, os dados de produção precisam ser modificados (nenhuma GUI para isso ainda).
Em vez de entrar em contato com o DBA e pedir para ele modificar os dados, o Desenvolvedor (indevidamente) usaria a conta SQL SQLLogin1
(que tem permissão para modificar os dados) e se conectaria pelo SQL Server Management Studio para modificar os dados.
O DBA não pode alterar a senha SQLLogin1
sem que o Developer veja a nova cadeia de conexão e a nova senha, pois a cadeia de conexão do aplicativo usada SQLLogin1
é mantida pelo Developer.
Questão:
Existe uma maneira de negar o acesso ao SQLLogin1
logon do SQL, mas apenas se ele estiver se conectando pelo SSMS?
Ao mesmo tempo, se SQLLogin1
estiver se conectando .Net SqlClient Data Provider
( program_name
no sys.dm_exec_sessions
), deve ser permitido o login.
Dessa forma, não queremos permitir que o Developer se conecte pelo SSMS usando SQLLogin1
, enquanto o aplicativo que estiver usando SQLLogin1
, ainda poderá se conectar.
fonte
Eu acho que não há solução confiável para o seu problema, pois
Application Name
é modificávelparameter
que a cam seja alterada por qualquer usuário.Aqui está como alterá-lo dentro de
SSMS
:Na
Connect to Database Object
caixa de diálogo, escolha Opções, abraAdditional Connection Parameters
e escolha qualquer nome para oApplication Name
seguinte:Agora
sys.dm_exec_sessions
DMV e Program_name () mostrarão o que você passou na sua cadeia de conexão noApplication Name
parâmetro:fonte
Você não pode cortar um cliente específico, como já detalhado nas outras respostas.
A solução é remover os privilégios de acesso aos sistemas de produção das contas do desenvolvedor.
Qualquer alteração deve ter um script e um dba executará o script.
A implantação é realizada por um administrador de sistemas; devs produzem um pacote que dão a alguém com privilégios adequados e nunca vêem as configurações usadas nos sistemas de produção.
A depuração é organizada caso a caso com uma cópia dos dados de produção em um ambiente de preparação como uma solução preferida ou uma conta temporária com privilégios limitados, se necessário.
fonte
No sentido ideal, essa é uma questão de processo / política / gerenciamento. Mesmo se alguém souber a senha, se for contra a política da empresa que alguém, exceto um DBA, se conecte à Produção (bem, você pode ter uma equipe de Engenharia de Liberação e / ou administradores de sistemas, etc.) e há penalidades por violar as regras, então isso deve ser suficiente (supondo que essas regras sejam aplicadas).
Tentar impedir que um aplicativo específico se conecte é impossível. Como demonstrou sepupic , é bastante fácil alterar o "nome do programa". Mas mesmo que o desenvolvedor não consiga descobrir isso, existem muitos outros programas que podem se conectar ao SQL Server. A maioria das pessoas terá acesso ao SQLCMD.exe e até ao OSQL.exe descontinuado . O desenvolvedor pode se conectar a partir do Visual Studio e até criar seu próprio aplicativo para se conectar via ".Net SqlClient Data Provider". Ah, e agora ainda temos o Azure Data Studio. São demais.
Ainda assim, isso ainda pode ser possível se a abordarmos de outra direção: em vez de impedir que o aplicativo X se conecte, que tal permitir apenas o aplicativo Y se conectar? Claro, entramos novamente no "nome do programa" e até mesmo o "hostname" pode ser falsificado, MAS, tenho certeza de que o endereço IP do cliente não pode ser falsificado (pelo menos não através das palavras-chave da cadeia de conexão). Você conhece o endereço IP dos servidores de aplicativos ou pode encontrá-lo facilmente na
sys.dm_exec_connections
DMV (noclient_net_address
campo).Começando com o gatilho de logon sugerido pelo EzLo , podemos modificar a lógica que determina se a conexão é válida ou não:
As únicas maneiras agora são logon na máquina de produção ou ter sua estação de trabalho falsificar o IP do servidor de aplicativos. Esperamos que os desenvolvedores não tenham acesso para fazer logon na Produção. A falsificação de um IP existente em uma rede causa problemas que podem afetar adversamente a Produção, para que eles não tentem isso, certo? Direita?
fonte
Eu trabalhei anteriormente para uma empresa que tinha esse problema com um desenvolvedor. Ele foi demitido, mas também implementamos uma tabela que tinha o LoginName e AllowedMachine (Application Server) por meio de um gatilho de login. Isso resolveu nossos problemas. Ou talvez tenha sido devido ao disparo.
fonte