it-swarm.com.de

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

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 von Gigabyte RAM] von unseren Servern entfernen und Ausführungspläne im Bereich von Megabyte haben im SQL-Cache gespeichert.

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.

7
R. Ferraz

Das 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

6
James Jenkins

Sie können Ansichten der benötigten Daten erstellen und eine Rolle erstellen, die nur die Auswahl zulässt.

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?

2
kevinsky