Selbst Microsoft rät von der Verwendung des SQL Server-Authentifizierungsmodus ab , unsere Anwendungen erfordern dies jedoch.
Ich habe gelesen, dass es eine bewährte Methode ist, Benutzern nicht zu sa
erlauben, die Anmeldung direkt zu verwenden, sondern die Windows-Authentifizierung zu verwenden und diesen Konten (oder Kontengruppen) Sysadmin-Berechtigungen zu gewähren.
- Ist das nicht im Wesentlichen dasselbe? Was sind die Vor- und Nachteile?
- Wie erhöht die bewährte Methode die Sicherheit meiner SQL Server-Instanzen?
- Gilt dies nur für Produktionsinstanzen oder auch für unsere internen Entwicklungsinstanzen?
sql-server
security
Jon Seigel
quelle
quelle
Antworten:
Sie haben hier einige verschiedene Fragen, also werde ich sie einzeln klopfen:
"Ich habe gelesen, dass es eine bewährte Methode ist, Benutzer nicht direkt die sa-Anmeldung verwenden zu lassen, sondern die Windows-Authentifizierung zu verwenden."
Sie mischen hier zwei Dinge: das Konzept der SA und das Konzept der SQL-Authentifizierung und der Windows-Authentifizierung.
Die SQL-Authentifizierung ist eine Liste von Benutzernamen und Kennwörtern, die in jedem SQL Server gespeichert sind. Die Tatsache, dass es in SQL gespeichert ist, ist das erste Problem. Wenn Sie das Kennwort eines Logins ändern müssen, müssen Sie es auf jedem Server ändern (oder unterschiedliche Kennwörter auf verschiedenen Servern verwalten). Mit der Windows-Authentifizierung können Sie Anmeldungen zentral deaktivieren, Kennwörter ändern, Richtlinien festlegen usw.
Wenn Sie sich für die Verwendung der SQL-Authentifizierung entscheiden, ist SA nur ein SQL-Authentifizierungs-Login. Dies ist der Standardbenutzername des Administrators, genau wie Administrator bei der Windows-Authentifizierung. Es verfügt über lokale Superkräfte für diese eine Instanz, jedoch nicht über globale Superkräfte für alle Instanzen.
msgstr "... und diesen Konten (oder Kontengruppen) Systemadministratorrechte gewähren."
Für welche Authentifizierungsmethode Sie sich auch entscheiden, im Idealfall möchten Sie dem Grundsatz des geringsten Privilegs folgen: Gewähren Sie den Menschen die Mindestrechte, die sie für die Erledigung ihrer Arbeit benötigen, und nicht mehr.
Betrachten Sie sie nicht nur als Logins - sie sind Leute, die Sie entlassen können. Wenn sie die Datenbank löschen oder Ihre Sicherungsjobs versehentlich deaktivieren, werden sie nicht ausgelöst, da SQL standardmäßig nicht nachverfolgt, wer was getan hat. Du bist derjenige, der gefeuert wird, weil es passieren wird, und du wirst nicht sagen können, welche Person es getan hat.
"Wie erhöht die Best Practice die Sicherheit meiner SQL Server-Instanzen?"
Sie möchten zwei Dinge tun:
Der erste wird mit dem Grundsatz des geringsten Privilegs erreicht: den Leuten nur die Berechtigungen geben, die sie benötigen, und nicht mehr.
Die zweite Möglichkeit besteht darin, jeder Person ein eigenes Login zuzuweisen, gemeinsame Logins nicht zuzulassen (z. B. dass jeder denselben Benutzernamen / dasselbe Passwort verwendet) und im Idealfall die Logins zu überprüfen. Sie werden den letzten Teil wahrscheinlich nicht sofort erledigen, da er ziemlich schmerzhaft ist. Lassen Sie uns die Teile jedoch zuerst an die richtige Stelle bringen, damit Sie später Auditing hinzufügen können, nachdem jemand eine Datenbank gelöscht hat und Ihr Chef wissen möchte, warum.
Ich weiß, was Sie denken: "Aber wir codieren Apps, und die App benötigt ein Login." Ja, geben Sie der Anwendung ein eigenes Login, und die Entwickler müssen dieses Passwort kennen, aber dieses Login sollte so frei von Berechtigungen sein, dass niemand, der bei Verstand ist, es verwenden möchte. Beispielsweise muss es möglicherweise nur in den Rollen db_datareader und db_datawriter vorhanden sein, sonst nichts. Auf diese Weise kann es Daten einfügen, aktualisieren, löschen und auswählen, aber nicht unbedingt Schemas ändern, Indizes hinzufügen, gespeicherte Prozeduren ändern usw.
"Gilt dies nur für Produktionsinstanzen oder auch für unsere internen Entwicklungsinstanzen?"
Ich denke, das gilt genauso für Entwicklungsinstanzen, weil ich mir normalerweise Sorgen mache, wenn Leute Dinge kaputt machen. Die Leute lieben es einfach, Server in der Entwicklung zu beschädigen. Und wenn es Zeit ist, die Liste der Änderungen zu bündeln, die auf die Produktion migriert werden sollen, muss ich natürlich wissen, ob ein bestimmter Index für die App wirklich wichtig ist oder ob ein Bonehead den Database Tuning Advisor nur ausgeführt und angewiesen hat, alle Änderungen zu übernehmen . Die richtigen Berechtigungen lindern diesen Schmerz.
quelle
Wenn Sie dieses Whitepaper lesen: Whitepaper zur SQL Server-Aufgabentrennung
Es wird Ihnen mitgeteilt, dass NIEMAND Sysadmin-Berechtigungen für sein Konto verwenden sollte. Ihrem täglichen Zugriffskonto sollte ein Mindestzugriff gewährt werden, keine expliziten Sysadmin-Rechte. Unter der Voraussetzung, dass CONTROL SERVER tatsächlich in der Nähe von sysadmin ist, können Sie den Zugriff auch dann verweigern / widerrufen, wenn sie ihn nicht benötigen. Das Zulassen von Sysadmin-Rechten für andere wird zu einem Problem, wenn Sie IT-Compliance-Standards einhalten müssen. Die meisten Standards erfordern eine minimale Verwendung der Sysadmin-Rolle.
Ich deaktiviere das Konto "sa" und benenne es um, genau wie Sie es mit dem integrierten Administratorkonto auf dem Betriebssystem tun würden. Nur zur Verwendung im Notfall.
Entwickler erhalten normalerweise vollen Zugriff auf ihre Entwicklungsumgebung. Wenn dann ihr Programm auf die Vorproduktionsinstanz verschoben wird, sollte ihr Zugriff minimal oder nicht vorhanden sein. so wie es in der Produktion wäre. Das ist eine perfekte Welt. Wenn Sie jedoch nicht dabei sind und Ihre Entwickler ein höheres Privileg haben, als Sie es benötigen, würde ich ihre Konten überprüfen. Ich würde alles und alles, was sie tun, bis zu einem gewissen Grad erfassen. Wenn also auf Ihrem Produktionsserver ein Fehler auftritt, können Sie zurückgehen und herausfinden, was genau passiert ist.
quelle
Wenn Sie externen behördlichen Kontrollen oder Standards (SOX, PCI usw.) unterliegen, dann sind Sie
Entwickler sollten db_owner nur für die Entwicklung auf einem Netzwerk-SQL-Server haben.
Befinden sich Ihre SQL-Server alle im Netzwerk mit einem Standard-Build (dh demselben Dienstkonto), verleiht sa in one ihnen alle Rechte.
Wenn das Dienstkonto ein lokaler Administrator ist, haben Ihre Entwickler auch die volle Kontrolle über die Server.
Es gibt keine Vorteile.
quelle
sa
(wahrscheinlich mit "Passwort" als Passwort), deshalb wird es als Übung fortgesetzt.sa = sysadmin
Wenn Sie sich mit sa anmelden, haben Sie die folgenden Möglichkeiten: - Löschen und Erstellen von Datenbanken - Ändern von Objekten in der Datenbank - Löschen und Erstellen von Anmeldungen - Ändern von Kennwörtern - Löschen aller Daten
Wenn Sie einem Windows-Konto sysadmin-Berechtigungen gewähren, geschieht dasselbe.
Die Liste geht weiter, aber dies sollte Ihnen ein paar gute Gründe geben, NIEMALS einen Nicht-Administrator sa verwenden zu lassen.
Sie sollten ein Windows- oder SQL-Konto mit den erforderlichen Mindestberechtigungen erstellen, damit die Apps funktionieren. (zB Login, Zugriff auf gespeicherte Prozeduren und Views)
quelle
Die beste Vorgehensweise besteht darin, ein sicheres Kennwort zu speichern und es zu vergessen.
quelle
Im Moment habe ich zwei Möglichkeiten, warum man kein schwaches SA-Konto haben sollte. Wenn Sie ein schwaches / leeres Passwort für SA haben, könnte eine böse Person (übersetzen Sie das in "freundlicher Kollege"):
Aktivieren Sie die Systemprozedur xp_cmdshell und beschädigen Sie mit den Berechtigungen des SQL Server-Dienstkontos Ihre lokale Box (Dateien erstellen / entfernen ...). Eine niedrige Sicherheit für SA sagt eigentlich nicht viel über die Instanzeinstellungen aus, könnte aber bedeuten, dass der Servicebenutzer schlechten Praktiken folgen könnte (z. B. ein Administrator zu sein :-));
Aktivieren Sie die E-Mail-Funktion auf Ihrer Instanz und führen Sie einen schnellen Vorlauf eines kleinen Spam-Skripts durch (dies kann zu Problemen mit Ihrem Internetprovider oder Ihren Kollegen führen. Je nachdem, wohin die E-Mails gesendet werden ;-)).
Ich werde nicht auf die offensichtlichen Tatsachen hinweisen, dass es Datenbanken, Logins ... usw. löschen kann.
Nicht unbedingt: zB - Auf der SQL Server-Instanz Ihres Laptops bedeutet der Unterschied zwischen Windows-Authentifizierung und SQL-Authentifizierung, dass ein externer Angreifer theoretisch nur ein SQL-Konto verwenden kann, da die Windows-Authentifizierung nicht außerhalb Ihrer eigenen Domäne verwendet werden kann Konto. Ein Benutzer könnte benachbarte Laptops in dem Einkaufszentrum scannen, in dem Sie gerade Ihren Kaffee trinken, und feststellen, dass eine SQL-Instanz installiert und gestartet ist, und versuchen, ein wenig kostenlosen Spaß zu haben. Es ist nicht so, dass es oft passieren könnte ... aber es ist eine Möglichkeit :-).
Wie erhöht die bewährte Methode die Sicherheit meiner SQL Server-Instanzen?
Wie jede bewährte Methode auf dieser Welt ihre Arbeit leistet..de erhöht die Wahrscheinlichkeit eines möglichen Nachteils (z. B .: Die bewährte Methode für körperliche Aktivität verringert die Wahrscheinlichkeit, dass Sie wie ich sind .. eine Stubenhocker), der sonst auftreten könnte.
Gilt dies nur für Produktionsinstanzen oder auch für unsere internen Entwicklungsinstanzen?
quelle
Bei der Beantwortung Ihrer letzten Frage verwenden wir SA-Konten für alle unsere Entwicklungsdatenbanken (mit dem Kennwort "sa"!).
Es ist jedoch wichtig zu beachten, dass wir die Daten nicht speichern und nicht generieren. Unsere Datenbanken werden ausschließlich für einen Datenspeicher für eine C / C ++ - Anwendung verwendet. Diese Entwicklungsdatenbanken enthalten lediglich Testdaten und werden häufig erstellt, gelöscht, geändert usw. \
Ebenso wichtig ist, dass alle Entwicklungsdatenbanken auf Entwicklungscomputern installiert sind. (Zumindest eine Kopie pro Entwickler!) Wenn also jemand eine gesamte Installation durcheinander bringt, hat er nur sich selbst und sonst niemanden durcheinander gebracht.
Wenn Sie in einer Umgebung sicherstellen möchten, dass Ihre Datenbank, Tabellen und Daten tatsächlich konsistent und sicher sind, benötigen Sie ein ansprechendes, sicheres SA-Kennwort. Wenn Sie dies schwach lassen, hat jeder und jede Person uneingeschränkten Zugriff auf Ihre Daten und kann Ihre Datenbank vollständig zerstören.
Für eine Reihe von Entwicklern mit eigenen Kopien der Datenbank, die nur Testdaten enthalten, muss ich noch ein solides Argument für die Aufrechterhaltung eines starken SA-Kontos finden.
quelle
Alle angegebenen Standard-SQL Server-Systemsicherheitsparameter sollten geändert werden. Es wird empfohlen, für die Authentifizierung nicht den gemischten Modus zu verwenden (aktiviert sowohl die Windows- als auch die SQL Server-Authentifizierung). Wechseln Sie stattdessen nur zur Windows-Authentifizierung, um die Windows-Kennwortrichtlinie zu erzwingen, und überprüfen Sie die Kennwortlänge, die Lebensdauer und den Verlauf. Die Windows-Kennwortrichtlinie unterscheidet sich von der SQL Server-Authentifizierung durch die Anmeldesperre. Nach mehreren fehlgeschlagenen Anmeldeversuchen wird die Anmeldung gesperrt und kann nicht mehr verwendet werden
Andererseits bietet die SQL Server-Authentifizierung keine Methoden zum Erkennen von Brute-Force-Angriffsversuchen, und was noch schlimmer ist, SQL Server ist sogar für die Behandlung einer großen Anzahl schneller Anmeldeversuche optimiert. Wenn die SQL Server-Authentifizierung in einem bestimmten SQL Server-System ein Muss ist, wird dringend empfohlen, die SA-Anmeldung zu deaktivieren
quelle