Wir haben eine Situation, in der Entwickler keine UPDATE
Berechtigungen haben, ABER sie arbeiten mit Anwendungen und sehen Verbindungszeichenfolgen -> sie kennen Kennwörter von einigen SQL-Konten (Beispiel SQLLogin1
), die UPDATE-Berechtigungen haben. Unsere Abläufe sind derzeit nicht perfekt, und manchmal müssen Produktionsdaten geändert werden (noch keine grafische Benutzeroberfläche).
Anstatt sich an DBA zu wenden und ihn zu bitten, die Daten zu ändern, würde der Entwickler (zu Unrecht) ein SQL-Konto SQLLogin1
(das die Berechtigung zum Ändern der Daten hat) verwenden und eine Verbindung über SQL Server Management Studio herstellen, um die Daten selbst zu ändern.
Der DBA kann das Kennwort nicht ändern, SQLLogin1
ohne dass der Entwickler die neue Verbindungszeichenfolge und das neue Kennwort sieht, da die verwendete Anwendungsverbindungszeichenfolge SQLLogin1
vom Entwickler verwaltet wird.
Frage:
Gibt es eine Möglichkeit, den Zugriff auf die SQLLogin1
SQL-Anmeldung zu verweigern , jedoch nur, wenn eine Verbindung über SSMS hergestellt wird?
Zur gleichen Zeit, wenn SQLLogin1
eine Verbindung über .Net SqlClient Data Provider
( program_name
in sys.dm_exec_sessions
) hergestellt wird, muss die Anmeldung gestattet sein.
Auf diese Weise möchten wir nicht, dass Entwickler über SSMS eine Verbindung herstellen SQLLogin1
, während die verwendete Anwendung SQLLogin1
weiterhin eine Verbindung herstellen kann.
quelle
Ich denke, es gibt keine zuverlässige Lösung für Ihr Problem, da
Application Name
es modifizierbar ist,parameter
dass die Kamera von jedem Benutzer geändert wird.So ändern Sie es innerhalb
SSMS
:Connect to Database Object
Wählen Sie im Dialogfeld Optionen, öffnen SieAdditional Connection Parameters
und wählen Sie einen beliebigen Namen fürApplication Name
Folgendes:Jetzt zeigen
sys.dm_exec_sessions
DMV und Program_name () an, was Sie in Ihrer Verbindungszeichenfolge imApplication Name
Parameter übergeben haben:quelle
Sie können einen bestimmten Client nicht abschneiden, wie bereits in den anderen Antworten beschrieben.
Die Lösung besteht darin, die Zugriffsrechte auf die Produktionssysteme aus den Konten des Entwicklers zu entfernen.
Jede Änderung muss per Skript ausgeführt werden, und eine Datenbank führt das Skript aus.
Die Bereitstellung wird von einem Systemadministrator durchgeführt. Entwickler erstellen ein Paket, das sie jemandem mit den richtigen Berechtigungen geben, und Entwickler sehen niemals die auf Produktionssystemen verwendeten Konfigurationen.
Das Debuggen wird von Fall zu Fall mit einer Kopie der Produktionsdaten in einer Staging-Umgebung als bevorzugte Lösung oder einem temporären Konto mit eingeschränkten Berechtigungen bei Bedarf arrangiert.
quelle
Im Idealfall handelt es sich hierbei um ein Prozess- / Richtlinien- / Managementproblem. Selbst wenn jemand das Kennwort kennt, wenn es gegen die Unternehmensrichtlinien verstößt, dass nur ein DBA eine Verbindung zur Produktion herstellt (möglicherweise haben Sie ein Release Engineering-Team und / oder Systemadministratoren usw.), und es gibt Strafen für Verstöße gegen die Regeln. dann sollte das ausreichen (vorausgesetzt, dass solche Regeln durchgesetzt werden).
Der Versuch, die Verbindung einer bestimmten Anwendung zu verhindern, ist nicht möglich. Wie Sepupic gezeigt hat , ist es ziemlich einfach, den "Programmnamen" zu ändern. Aber selbst wenn der Entwickler das nicht herausfinden kann, gibt es viele andere Programme, die eine Verbindung zu SQL Server herstellen können. Die meisten Benutzer haben Zugriff auf SQLCMD.exe und sogar auf die veraltete OSQL.exe . Der Entwickler kann von Visual Studio aus eine Verbindung herstellen und sogar eine eigene App erstellen, um über ".Net SqlClient Data Provider" eine Verbindung herzustellen. Oh, und jetzt haben wir sogar Azure Data Studio. Es sind einfach zu viele.
Dies könnte jedoch immer noch möglich sein, wenn wir uns der anderen Richtung nähern: Anstatt zu verhindern, dass Anwendung X eine Verbindung herstellt, können Sie nur zulassen, dass Anwendung Y eine Verbindung herstellt. Sicher, wir kommen wieder zum "Programmnamen" und sogar "Hostname" kann gefälscht werden, ABER ich bin mir ziemlich sicher, dass die IP-Adresse des Clients nicht gefälscht werden kann (zumindest nicht über die Schlüsselwörter der Verbindungszeichenfolge). Sie kennen die IP-Adresse des / der App-Server (s) oder können sie leicht über die
sys.dm_exec_connections
DMV (imclient_net_address
Feld) finden.Beginnend mit dem von EzLo vorgeschlagenen Anmeldetrigger können wir die Logik ändern, die bestimmt, ob die Verbindung gültig ist oder nicht:
Die einzige Möglichkeit besteht jetzt darin, sich entweder am Produktionscomputer anzumelden oder die IP-Adresse des App-Servers von der Workstation fälschen zu lassen. Hoffentlich haben Entwickler keinen Zugriff, um sich bei Production anzumelden. Und das Spoofing einer vorhandenen IP in einem Netzwerk verursacht Probleme, die sich nachteilig auf die Produktion auswirken können. Sie werden das also nicht versuchen, oder? Richtig?
quelle
Ich habe zuvor für eine Firma gearbeitet, die dieses Problem mit einem Entwickler hatte. Er wurde gefeuert, aber wir haben auch eine Tabelle implementiert, die den LoginName und AllowedMachine (Application Server) über einen Login-Trigger hatte. Dies löste unsere Probleme. Oder vielleicht lag es am Feuer.
quelle