Gewähren von SA-Berechtigungen für Entwickler in der Entwicklungsbox

8

Trotz unserer heftigen Proteste hat unser Management entschieden, dass dem Entwicklungsteam "sa" -Rechte auf dem Entwicklungsserver gewährt werden müssen. Der Haken ist, dass wir, die DB-Support-Gruppe, weiterhin für die Wartung dieser Box verantwortlich sind.

Wir wurden nun mit der Aufgabe betraut, eine Liste von Dos and Don'ts für die Entwicklungsteams mit diesen erweiterten Berechtigungen zu erstellen.

Bitte fügen Sie dieser Liste hinzu:

DO - Beschränken Sie die Aktivitäten auf die in der Entwicklung befindliche DB

UNTERLASSEN SIE --

  • Ändern Sie alle SQL-Instanzeinstellungen
  • sp_configure (einschließlich cmdshell)
  • Hinzufügen / Ändern / Löschen von Sicherheitseinstellungen
  • Datenbankobjekte hinzufügen / ändern / löschen
  • Hinzufügen / Ändern / Löschen von Serverobjekten wie Sicherungsgeräten und Verbindungsservern
  • Replikation hinzufügen / ändern / löschen
  • Wartungspläne hinzufügen / ändern / löschen
  • Berühren Sie eine Datenbank, die nicht zu Ihrem Team gehört

Alle Hinweise auf Tools, die zum Verfolgen der Aktivitäten dieser Benutzer verfügbar sind, werden sehr geschätzt.

Raj
quelle
1
Welche Aufgaben müssen sie erledigen, die übergeordnete Privilegien von SA erfordern?
Ich würde denken, dass db_owner alles wäre, was sie brauchen ...
5
OK, wenn ihnen geraten wird, NICHT "Datenbankobjekte hinzuzufügen / zu ändern / zu löschen", was sollen sie dann tun? Ist es nicht der springende Punkt einer Entwicklungsbox, dass sie sie kaputt machen kann?
Stuart Ainsworth
Dies sind Anwendungsentwickler. Sie benötigen 'sa'-Berechtigungen, um gespeicherte Prozeduren in Dev Studio debuggen zu können. Die Entscheidung wird bereits von der Geschäftsleitung getroffen und sie sind nicht bereit, sich zu rühren. Wir versuchen, die möglichen Kopfschmerzen zu minimieren
2
+1 für die Frage, da ich dieses Problem ein paar Mal getroffen habe. Eine andere Lösung: Geben Sie den Entwicklern eine Sandbox-VM mit SQL, die sie zu 100% beherrschen. Sie sind auch zu 100% dafür verantwortlich, dass es am Leben bleibt :) -> Es ist erstaunlich, wie schnell die DEVs lernen, ihr eigenes System nicht zu beschädigen :)
Martin S. Stoller

Antworten:

8

Wenn es nicht zu spät ist, besteht eine Kompromissoption, die ich als gut angesehen habe, darin, die Berechtigungen nicht zu aktualisieren oder die vorhandenen Konten der Entwickler zu ersetzen. Erstellen Sie ein separates Konto, das nur verwendet wird, wenn sie die erhöhten Berechtigungen benötigen.

Normalerweise arbeiten sie also unter einzelnen "eingeschränkten" Konten (die ich nur lose verwende, da diese eingeschränkten Konten noch einige wichtige Berechtigungen benötigen - dh Tabellen erstellen, löschen, ändern). Aber für den seltenen saFall, dass sie denken , dass sie es brauchen , können sie sich mit diesem Konto anmelden. Anschließend können Sie das Konto in Ihren Protokollen kennzeichnen und es zusätzlich überwachen. Sie haben den Entwicklern den Zugriff gewährt, den sie angefordert haben, aber auf eine Weise, die etwas kontrollierbarer ist.

Wenn es Missbrauch gibt, können die Protokolle in diesem Konto als Beweismittel verwendet werden, um es zu entfernen.

Joel Coehoorn
quelle
6

Es heißt hier (MSDN) Sie Sysadmin (sa) müssen zum Debuggen auf SQL Server 2005.

Diese SO-Frage zeigt jedoch einen anderen Weg ohne sa, was ich anfangs dachte. Lass sie einfach laufensp_sidedebug

Ich würde auch vorschlagen, ihnen lokalen SQL Express zu geben, der auch andere Probleme löst ...

(bearbeitet mit mehr Infos)

Bearbeiten Sie nach der Antwort von W. Craig Trader

Andere Probleme mit "sa" -Rechten im schlimmsten Fall:

  • Entwickler erstellen nicht vertrauenswürdige CLR-Assemblys
  • Sie werden xp_cmdshell verwenden
  • Alle Aktionen stehen im Kontext des SQL Server-Dienstkontos
  • Sie übernehmen die Rechte für die Client-Verbindung
  • etc etc.

z.B xp_cmdshell 'scm -Action 6 -Server PRODSERVER'

gbn
quelle
1
Die Antwort für Entwickler, die außerhalb der Zeilen codieren, besteht darin, eine kontinuierliche Integration mit gesperrtem Code durchzuführen, wie dies von den Berechtigungen der Benutzer ausgeführt wird, und den Build entsprechend fehlzuschlagen. Lassen Sie den Build-Server die Datenbank von Grund auf neu erstellen und mit Testdaten füllen (natürlich alle aus SCM). (In meinem Fall habe ich genau den gleichen Code verwendet, den das Anwendungsinstallationsprogramm zum Erstellen einer neuen Datenbank verwenden würde, wodurch sowohl das Installationsprogramm als auch die Anwendung getestet wurden.)
1
@Craig Trader: funktioniert nicht. Um meine alte Antwort neu zu formulieren: Entwicklern kann nicht vertraut werden, und Integratiointegrationsn erkennt nicht alle Fälle. Ich bin ein Entwickler dba: Ein Client-Code-Affe ist mein Feind. In meinem Unternehmen gewinne ich ... es ist mein
Zugset
Anscheinend kann Ihr Kilometerstand variieren. Nach meiner Erfahrung musste ich normalerweise ein wenig trainieren / orientieren, um zu erklären, wie und warum Dinge gemacht werden, aber danach laufen die Dinge normalerweise ziemlich gut. Natürlich bestehe ich immer darauf, dass die einzigen Builds, die über die Entwicklung hinausgehen, diejenigen sind, die vom streng kontrollierten Build-Server stammen. Wenn der Code dort nicht erstellt wird, liegt ein Problem mit Ihrem Code (oder Ihren Tests) vor, nicht mit dem Aufbau. Ich habe dies mit kleinen Teams und großen Projekten in vielen Unternehmen und immer erfolgreich gemacht.
4

Auf Vorschlag habe ich die Möglichkeit, ein richtlinienbasiertes Management einzurichten und alle Ihre "Do" und "Don't" als Richtlinienregeln durchzusetzen. Dies würde einen großen Beitrag zum Schutz der Instanz leisten.

Ich würde auch DDL Änderungsüberwachung finden Sie unter Bereitstellen der Wirtschaftsprüfung in SQL Server 2008 , nicht so sehr als Abschreckung, sondern vor allem als eine Änderung Tracking - System so , wenn etwas wird geschraubt, zumindest wissen Sie , was geändert.

Remus Rusanu
quelle
3

Wenn es sich um den DEVELOPMENT-Server handelt, was ist das Problem, wenn die DEVELOPERS vollen Zugriff haben? Wenn Sie Entwicklern mitteilen, dass Sie keine Datenbankobjekte (z. B. Tabellen, Spalten, Indizes) hinzufügen, entfernen oder ändern können, sagen Sie ihnen: "Sie können einen Compiler haben, aber Sie dürfen ihn nicht ausführen." Es scheint mir, dass die Entwickler Zugriff auf ihre eigene Datenbankinstanz wünschen / benötigen, um verschiedene Methoden zur Problemlösung testen zu können, ohne sich mit den Datenbanken PRODUCTION oder TEST herumschlagen zu müssen. Sie sollten diese Art von Verhalten fördern und nicht entmutigen.

Einige schlagen möglicherweise vor, dass Entwickler mit lokalen Instanzen von SQL Express arbeiten. SQL Express für jeden Entwickler kann zwar bestimmte Probleme lösen, weist jedoch andere Einschränkungen und Leistungsmerkmale auf als SQL Server auf einem separaten Server.

Was Sie tun sollten, ist einen regelmäßigen Sicherungsplan (mindestens jede Nacht) einzurichten und mit den Entwicklern zusammenzuarbeiten, um sicherzustellen, dass sie wissen, wie ungeplante Sicherungen initiiert und aus Sicherungen wiederhergestellt werden, damit Ausfallzeiten bei Problemen minimiert werden.

Craig Trader
quelle
Ihre Analogie ist völlig falsch. Was passiert, ist, dass sie herumspielen und dann herumhüpfen, wenn sie ihren Mist nicht auf gesperrte Server migrieren können. Ich bin natürlich ein Entwickler-DBA :-)
gbn
Dann ist ein wenig Bildung angebracht. Ich bin ein Entwickler, der allzu oft DBA war. Mit einem Fuß in beiden Welten war es normalerweise meine Aufgabe, beiden Seiten das Zusammenleben beizubringen. Immerhin sind es die USERs, die der Feind sind, nicht die DBAs oder Entwickler ...
Es gibt auch Dinge wie Wartungspläne, auf die sie keinen Zugriff haben sollten.
Joel Coehoorn
1
Das Problem ist, wir haben mehrere Dev-Gruppen und dieser Server hostet alle ihre DBs. Diese Gruppe, die 'sa'-Rechte benötigt, besitzt nur 33% der Dbs. Die Sorge ist, dass sie herumdrehen und den Server herunterfahren könnten, was sich auch auf andere Gruppen auswirkt. Das Unternehmen möchte keine separate Hardware für sie erhalten, es sei denn, wir können nachweisen, dass sie es vermasselt haben.
2
Das ist lächerlich. Jede Entwicklungsgruppe sollte einen eigenen Server haben, damit niemand auf andere Zehen tritt. Hardware ist heutzutage praktisch kostenlos und Software fast so billig wie Hardware. Und wenn Ihre Organisation groß genug ist, um mehrere Entwicklungsgruppen zu haben, sollte sie Servervirtualisierung verwenden, was all dies noch einfacher machen würde.
3

Es ist der Entwicklungsserver , nicht der DB-Support-Gruppenserver oder der Produktionsserver. Behalte ein gutes Backup / Image und lass die Entwickler weghacken. DBAs Kontrolle über die Devbox zu lassen, ist wie den Schwanz mit dem Hund wedeln zu lassen. Es ist für Entwickler da, an denen Entwickler arbeiten können. Dies beinhaltet manchmal das Brechen von Dingen und das Löschen von Tabellen und das Zurücksetzen mit anderen Einstellungen. Entwicklungsboxen werden nach einer Weile immer in einem schlechten Zustand sein, das ist was wir tun. Wenn wir nicht wissen, wo ein Problem auftritt, probieren wir verschiedene Dinge aus. Einige von ihnen sind leicht rückgängig zu machen, andere weniger.


quelle
Das Problem hierbei ist, dass Entwickler leicht vergessen können, dass die von ihnen erstellten Apps nicht immer dieselben Rechte haben. Ja, geben Sie sie sa, aber machen Sie es so, dass sie nicht standardmäßig sicher sind, damit sie wissen, wann sie etwas tun, für dessen ordnungsgemäße Bereitstellung ein wenig zusätzliche Arbeit erforderlich ist.
Joel Coehoorn
1

Ich glaube nicht, dass sie SA-Berechtigungen für die Entwicklungsbox benötigen. In fast allen Fällen können sie darauf verzichten.

Ich denke, eine gute Option ist die Installation der lokalen Dev Edition.

Frage:

Sie möchten nicht, dass Entwickler Datenbankobjekte hinzufügen / ändern / löschen? !! Wie werden sie sich entwickeln?

Raj Mehr
quelle
Entschuldigung für die Verwirrung. Mit diesem Punkt meinte ich, dass Entwickler keine Datenbankeinstellungen ändern oder Datenbanken löschen dürfen.
1

Wir fordern, dass alle Änderungen der Datenbankstruktur mit Skripten (auch auf dev) vorgenommen und in Subversion gespeichert werden. Dann aktualisieren wir nach einem festgelegten Zeitplan die Entwickler von prod und sie müssen ihre Skripte erneut ausführen, um wieder dorthin zu gelangen, wo sie sich im Entwicklungszyklus befanden. Dies hilft sicherzustellen, dass alles über Skripte erledigt wird und dass Skripte bereitstehen, wenn es Zeit für die Bereitstellung ist.

Ich weiß, dass Sie 2008 DDL-Trigger einrichten können, um strukturelle Änderungen der Datenbank zu verfolgen. Können Sie dies 2005 tun? Auf diese Weise können Sie zumindest herausfinden, wann jemand eine Einstellung ändert, wer dies getan hat, und herausfinden, warum.

HLGEM
quelle