Nous avons une situation où les développeurs n'ont aucune UPDATE
autorisation, MAIS ils travaillent avec des applications et voient les chaînes de connexion -> ils connaissent les mots de passe de certains comptes SQL (exemple SQLLogin1
) qui ont des autorisations UPDATE. Nos opérations ne sont actuellement pas parfaites, et parfois les données de production doivent être modifiées (pas encore d'interface graphique pour cela).
Au lieu de contacter DBA et de lui demander de modifier les données, le développeur utiliserait (incorrectement) un compte SQL SQLLogin1
(qui a l'autorisation de modifier les données) et se connecterait sur SQL Server Management Studio pour modifier les données lui-même.
DBA ne peut pas modifier le mot de passe SQLLogin1
sans que Developer ne voit la nouvelle chaîne de connexion et le nouveau mot de passe, car la chaîne de connexion d'application qui utilise SQLLogin1
est gérée par Developer.
Question:
Existe-t-il un moyen de refuser l'accès à la SQLLogin1
connexion SQL, mais uniquement s'il se connecte via SSMS?
En même temps, si SQLLogin1
se connecte .Net SqlClient Data Provider
( program_name
dans le sys.dm_exec_sessions
), il doit être autorisé à se connecter.
De cette façon, nous ne voulons pas permettre au développeur de se connecter via SSMS en utilisant SQLLogin1
, tandis que l'application qui utilise SQLLogin1
, pourrait toujours se connecter.
la source
Je pense qu'il n'y a pas de solution fiable à votre problème car il
Application Name
est modifiableparameter
que la came soit modifiée par n'importe quel utilisateur.Voici comment le changer dans
SSMS
:Dans la
Connect to Database Object
boîte de dialogue, choisissez Options, ouvrezAdditional Connection Parameters
et choisissez un nomApplication Name
comme celui-ci:Maintenant
sys.dm_exec_sessions
DMV et Program_name () vous montreront ce que vous avez passé dans votre chaîne de connexion enApplication Name
paramètre:la source
Vous ne pouvez pas couper un client spécifique, comme déjà détaillé dans les autres réponses.
La solution consiste à supprimer les privilèges d'accès aux systèmes de production des comptes du développeur.
Toute modification doit être scriptée et un dba exécutera le script.
Le déploiement est effectué par un administrateur système; les développeurs produisent un package qu'ils donnent à quelqu'un avec les privilèges appropriés et les développeurs ne voient jamais les configurations utilisées sur les systèmes de production.
Le débogage est organisé au cas par cas avec une copie des données de production dans un environnement de transfert comme solution préférée ou un compte temporaire avec des privilèges limités si nécessaire.
la source
Dans le sens idéal, il s'agit d'un problème de processus / politique / gestion. Même si quelqu'un connaît le mot de passe, s'il est contraire à la politique de l'entreprise que quiconque, sauf un administrateur de base de données, se connecte à Production (eh bien, vous pourriez avoir une équipe d'ingénierie de libération et / ou des administrateurs système, etc.), et il y a des pénalités pour enfreindre les règles, alors cela devrait être suffisant (en supposant que ces règles soient appliquées).
Il est impossible d'empêcher une application particulière de se connecter. Comme l'a démontré Seppic , il est assez facile de changer le "nom du programme". Mais même si le développeur ne parvient pas à comprendre cela, il existe de nombreux autres programmes qui peuvent se connecter à SQL Server. La plupart des gens auront accès à Sqlcmd.exe et même le dépréciée Osql.exe . Le développeur peut se connecter à partir de Visual Studio et peut même créer sa propre application pour se connecter via ".Net SqlClient Data Provider". Oh, et maintenant nous avons même Azure Data Studio. C'est juste trop.
Pourtant, cela pourrait encore être possible si nous l'abordons dans l'autre sens: au lieu d'empêcher l'application X de se connecter, pourquoi ne pas autoriser l'application Y à se connecter? Bien sûr, nous entrons à nouveau dans le "nom du programme", et même le "nom d'hôte" peut être usurpé, MAIS, je suis à peu près sûr que l'adresse IP du client ne peut pas être usurpée (du moins pas via les mots clés de la chaîne de connexion). Vous connaissez l'adresse IP du ou des serveurs d'applications, ou vous pouvez facilement la trouver dans le
sys.dm_exec_connections
DMV (sur leclient_net_address
terrain).En commençant par le déclencheur de connexion suggéré par EzLo , nous pouvons modifier la logique qui détermine si la connexion est valide ou non:
Le seul moyen maintenant serait de se connecter à la machine de production ou de faire usurper l'adresse IP du serveur d'application sur leur poste de travail. J'espère que les développeurs n'ont aucun accès pour se connecter à Production. Et l'usurpation d'une adresse IP existante sur un réseau provoque des problèmes qui pourraient nuire à la production, donc ils n'essaieront pas cela, non? Droite?
la source
J'ai précédemment travaillé pour une entreprise qui avait ce problème avec un développeur. Il a été renvoyé, mais nous avons également implémenté une table qui avait LoginName et AllowedMachine (Application Server) via un déclencheur de connexion. Cela a résolu nos problèmes. Ou peut-être était-ce dû au licenciement.
la source