Ist es unter SQL Server möglich, bestimmte Benutzer daran zu hindern, bestimmte Funktionen, Operatoren oder Anweisungen zu verwenden?

7

Wir unterstützen eine große Anzahl von Entwicklern und Analysten, die entweder nicht viel wissen oder sich überhaupt nicht um die Abfrageleistung kümmern. Wir haben jeden Tag Hunderte von schlecht konzipierten Abfragen (auch aufgrund einer schlecht gestalteten Datenbankarchitektur), die jeweils Dutzende Gigabyte RAM von unseren Servern entfernen und Ausführungspläne im Bereich von Megabyte im SQL-Cache speichern.

Wir möchten bestimmte Benutzer daran hindern, SORTs und HASH MATCHes zu verwenden, insbesondere ORDER BY, SELECT DISTINCT und JOINs jeglicher Art. Wir möchten, dass Benutzer ihre Daten abrufen, aber nur auf ihrer Seite daran arbeiten.

Könnte dies in SQL Server erreicht werden? Gibt es eine DB-Engine, die das unterstützt? Was würden Sie darüber denken?

Ich weiß, dass dies das Prinzip einer relationalen Datenbank übertreffen würde, aber wir suchen nach einer Möglichkeit, um sicherzustellen, dass die Engine ordnungsgemäß verwendet und nicht von ungebildeten Benutzern missbraucht wird.

Wir erwägen bereits die Implementierung von Resource Governor, um eine bestimmte Menge an Maschinenressourcen für diese fehlerhaften Abfragen zuzuweisen.

R. Ferraz
quelle

Antworten:

6

Die Antwort von kevinsky ist ein Weg zu einer Lösung für Sie.

Ein anderer Pfad für Ihr spezifisches Problem besteht darin, einen zweiten Berichtsserver (und möglicherweise einen dritten Entwicklungsserver) zu erstellen. Mit Kopien der Produktionsdaten. Ihre Berichterstatter und Entwickler können alle möglichen Dummheiten begehen und haben keinen Einfluss auf die Produktion.

Es gibt mehrere Möglichkeiten, dies zu erreichen, je nachdem, wie aktuell Ihre Berichts- / Entwicklungsdaten sein müssen.

Eine übliche Lösung ist eine nächtliche Sicherung und Wiederherstellung auf dem sekundären Server. Wenn Sie wirklich aktuelle Daten benötigen (z. B. keine Verzögerung oder eine Sekunde), schauen Sie in SQL Server Always On nach

James Jenkins
quelle
Ja, wenn eine zusätzliche Server- und Datenbanklizenz kein Problem darstellt, ist dies die beste Lösung
kevinsky
1
@ Kevininsky verwendet nur die Developer Edition - für die nicht produktive Nutzung ist keine Lizenz erforderlich. Es sei denn natürlich, es handelt sich um Produktionsnutzung.
George.Palacios
2

Sie können Ansichten der benötigten Daten erstellen und eine Rolle erstellen, die nur die Auswahl ermöglicht.

Sie können auch gespeicherte Prozeduren erstellen, die eine Ergebnismenge zurückgeben, bei der es sich um eine beliebige Kombination von Tabellen handeln kann, auf die mit einer Abfrage zugegriffen wird, die eine gute Leistung erbringt.

Ich kenne keine Möglichkeit, die Verwendung grundlegender Befehle in SQL zu beschränken, abgesehen von einem Auslöser auf Hacky-Datenbankebene, und schlage vor, dass eine gewisse Ausbildung effektiver ist, wenn Sie so viele Benutzer haben, die nicht wissen, wie man eine gute Abfrage schreibt Weg, dies zu tun. Mittagssitzungen?

kevinsky
quelle
1
Wenn ein DBA mitten in einem lang laufenden SQL-Programm an seinem Schreibtisch / Cube vorbeischaut, kann dies dazu beitragen, die Lunch & Learn-Sitzung zu fokussieren. Eine kurze Diskussion könnte dieser Person helfen, etwas zu lernen (z. B. "Sie wissen, Sie sollten die Partitionsschlüssel wirklich zu Ihrer WHERE-Klausel hinzufügen"). Es könnte dem DBA auch helfen, etwas zu lernen (z. B. dass diese Tabelle diesen Index wirklich benötigt)
Michael Kutz