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:
- Verhindern Sie, dass Personen den Server beschädigen
- Wenn sie den Server ausfallen lassen, können Sie genau identifizieren, wer es getan hat
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.