Die Serversicherheit hängt hauptsächlich davon ab, wie richtig Sie Zugriffsberechtigungen für Objekte konfigurieren können. Die Bereitstellung übermäßiger Berechtigungen für einen Benutzer kann viele Probleme verursachen. Nein, ein Benutzer wird Ihre Fehler nicht verwenden. Stattdessen wird jeder Hacker oder ich dies tun. In diesem Fall können Sie Ihre Tabellen mit Daten oder die gesamte Datenbank vergessen.
Aus irgendeinem Grund ist die Sicherheit der Datenbank ein Schutz von außen, beispielsweise einem Hacker. Dies kommt jedoch sehr selten vor. Ich bin Programmierer in einem großen Unternehmen und ein Administrator denkt nicht einmal daran, die Serverports zu schützen, wo alles offen ist. Es gibt eine Reihe von Datenbanken, Programmen und sogar einen FTP-Server auf einem einzigen Server und er wurde in den letzten 5 Jahren nie gehackt. Glücklicherweise konnte ich den Administrator davon überzeugen, den WEB-Server auf einer separaten Hardware bereitzustellen. Andernfalls, wenn jemand die IP-Adresse unseres Hauptservers wüsste, wäre jeder Faulpelz in der Lage, sie zu hacken. Weder die Datenbank noch Windows wurden seit mehreren Jahren gepatcht.
Aufgrund einer falschen Sicherheitsrichtlinie treten jedoch täglich interne Probleme auf. Alle Benutzer melden sich mit Administratorrechten an und können alles erstellen, was sie wollen. Dies ist ein echtes Problem, da die übermäßigen Berechtigungen es Slackern ermöglichen, ihren vollständigen Analphabetismus zu zeigen. Daher berücksichtigen wir die Sicherheit unabhängig davon, woher die Bedrohung kommt – von einem Hacker oder von einem Benutzer.
In diesem Artikel werden wir alle notwendigen Grundlagen des Sicherheitsschutzes sowohl vor Hackern als auch vor Benutzern betrachten. Ich habe MS SQL Server als Beispiel gewählt, da er alles enthält, was in anderen Datenbanken (Oracle, MySQL usw.) verfügbar ist, und über zusätzliche Sicherheitsverwaltungsfunktionen verfügt. Jemand könnte denken, dass dies MS steiler macht. Manchmal können jedoch zusätzliche Funktionen übertrieben sein und Probleme verursachen.
Serverrollen
In Windows und anderen Betriebssystemen gibt es Gruppen und Benutzer zum Verwalten von Berechtigungen. Wir können Benutzer zu einer Gruppe zusammenfassen und allen auf einmal Rechte gewähren, was viel einfacher ist, als jedem Benutzer einzeln Rechte zuzuweisen. Für diese Zwecke gibt es in Datenbanken das Konzept „Rolle“.
Angenommen, 100 Benutzer sollen die Berechtigung haben, Daten aus einer bestimmten Tabelle zu lesen. Jedem Benutzer diese Berechtigung zu erteilen, ist mühsam. Wesentlich einfacher ist es, eine Rolle mit Leseberechtigung anzulegen und ihr dann alle benötigten Benutzer hinzuzufügen. Das Ergebnis ähnelt dem Gruppieren.
In SQL Server gibt es zwei Arten von Rollen:Server und Datenbank. Serverrollen sind vordefiniert und können nicht geändert werden.
Öffnen Sie den Zweig Sicherheit/Serverrolle in Enterprise Manager, sodass Sie im rechten Teil des Fensters eine Liste der verfügbaren Rollen sehen können. Die Beschreibung definiert, was der Benutzer mit der entsprechenden Rolle machen kann.
Serverrollen in MS SQL Server und das Rollenmanager-Fenster
Um einen vorhandenen Benutzer zu einer Rolle hinzuzufügen, doppelklicken Sie auf die Rollenzeile. In dem erscheinenden Fenster können Sie der Rolle Benutzer hinzufügen oder sie löschen. Die Registerkarte „Berechtigung“ beschreibt im Detail, was jeder Benutzer tun kann.
Benutzer
Um Benutzer zu verwalten, öffnen Sie den Zweig Sicherheit/Anmeldungen in Enterprise Manager. Im rechten Teil sehen Sie eine Liste aller Serverbenutzer. Standardmäßig wird der Zugriff Domänenadministratoren und integrierten Anmeldekonten wie sa.
gewährtUm einen neuen Benutzer hinzuzufügen, klicken Sie mit der rechten Maustaste auf eine beliebige Stelle im leeren rechten Teil des Fensters und wählen Sie im angezeigten Menü Neue Anmeldung aus. Wählen Sie ganz oben im Fenster einen Benutzernamen aus. Wenn Sie eine vorhandene Domäne oder einen Computerbenutzer auswählen müssen, klicken Sie auf die Schaltfläche (…) rechts neben dem Eingabefeld und Sie sehen das Benutzersuchfeld in der Domäne.
Neuen Benutzer hinzufügen
Unten können Sie die Art der Authentifizierung auswählen – Windows oder SQL Server. Wenn Sie Windows auswählen, müssen Sie kein Kennwort angeben, da der Server es vom System abruft. Sie können jedoch zwischen Zugriff gewähren (Zugriff erlauben) und Zugriff verweigern (Verbieten) umschalten. Im letzteren Fall wird der Benutzer in der Datenbank registriert, aber er kann sich nicht verbinden – es ist verboten.
Wenn Sie die SQL-Server-Authentifizierung auswählen, müssen Sie ein Kennwort festlegen, da es in diesem Fall in den Systemtabellen des Datenbankservers gespeichert wird. Bitte beachten Sie, dass Sie selbst dann, wenn in den Servereinstellungen nur die Windows-Authentifizierung angegeben ist, SQL-Servereinträge erstellen können, sich mit diesen Einträgen jedoch nicht am System anmelden können.
Auf der Registerkarte Serverrollen können Sie angeben, welche Serverrolle einem Benutzer gewährt wird. Daher können Sie bereits in der Erstellungsphase Benutzer zu den erforderlichen Rollen hinzufügen.
Benutzerzugriff auf Datenbanken
Geben Sie auf der Registerkarte Datenbankzugriff die Datenbanken an, mit denen der Benutzer arbeiten kann. Dabei ist das Fenster zweigeteilt:In der oberen Hälfte können Sie die Datenbank auswählen, auf die der Zugriff erlaubt ist, und in der unteren Liste können Sie die Datenbankrolle auswählen. Diese Rolle in der Datenbank definiert die Benutzerberechtigungen. Einem Benutzer können mehrere Rollen zugewiesen werden.
Erstellen Sie ein Konto qq, das Zugriff auf die Northwind-Datenbank hat. Dies ist eine Standard-Testdatenbank, die beim Bereitstellen des Servers erstellt wird.
Speichern Sie die Änderungen.
Öffnen Sie nun den Zweig Datenbanken/Northwind/Benutzer und sehen Sie sich die Liste der Benutzer an, die auf die ausgewählte Datenbank zugreifen dürfen. Bitte beachten Sie, dass es hier das qq-Konto gibt. Es gibt kein Konto in anderen Datenbanken, da der Zugriff darauf für unseren neuen Benutzer verboten ist.
Datenbankrollen
Jede Datenbank kann ihre eigenen Rollen haben, die die Zugriffsberechtigungen auf Objekte definieren. Viele Administratoren kümmern sich nicht gerne um diese Berechtigungen. Daher installieren sie den eingebauten Standard public, der fast alles zulässt. Wenn die Berechtigungen für die öffentliche Rolle fehlen, fügen Sie einfach einen Benutzer zur Serverrolle Systemadministrator hinzu. In diesem Fall wird die Datenbank angreifbar.
Jeder Benutzer sollte mit seinen eigenen und erforderlichen Berechtigungen ausgestattet werden. Was nicht erlaubt ist, muss verboten werden. Rollen, die bereits auf dem Server vorhanden sind, dürfen nicht verwendet werden, da ihre Berechtigungen für alle offen sind. Es wird sogar empfohlen, sie alle zu löschen, insbesondere die öffentliche.
Eine Rolle erstellen
Um eine neue Datenbankrolle zu erstellen, klicken Sie mit der rechten Maustaste auf den Zweig Datenbanken/Datenbankname/Rollen. Wählen Sie im angezeigten Menü Neue Datenbankrolle aus. Das Fenster Datenbankrolleneigenschaften – Neue Rolle wird geöffnet. Geben Sie im oberen Teil des Fensters den Rollennamen ein.
Wir wollen zum Beispiel eine Rolle für Buchhalter schaffen. Geben Sie dazu Buh in das Feld Name ein.
Datenbankrolle erstellen
Wählen Sie unten einen Rollentyp aus, z. B. einen Standard-Standardtyp. In der Mitte des Fensters befindet sich eine Liste der Benutzer, die der Rolle hinzugefügt werden. Bisher ist die Liste leer. Wenn wir jedoch auf Hinzufügen klicken, fügen wir Benutzer beispielsweise dem zuvor erstellten qq-Konto hinzu. In der Phase der Rollenerstellung ist nichts weiter zu tun. Speichern Sie die Änderungen, indem Sie auf OK klicken.
Zugriffsberechtigungen
Jetzt werden wir sehen, wie wir Berechtigungen festlegen können. Doppelklicken Sie auf die erstellte Buh-Rolle, um das Fenster zum Bearbeiten zu öffnen. Bitte beachten Sie, dass die Berechtigungsschaltfläche jetzt verfügbar ist. Erst wenn die Rolle in der Datenbank registriert ist, können wir ihre Rechte ändern. Klicken Sie auf diese Schaltfläche, um das Fenster Eigenschaften der Datenbankrolle zu öffnen.
Zugriffsberechtigungen für Rollen festlegen
Oben im Fenster befindet sich eine Liste mit Datenbankrollen, sodass Sie schnell zwischen ihnen wechseln können. Jetzt ist die Buh-Rolle ausgewählt. In der Mitte des Fensters befindet sich ein großes Raster mit den folgenden Spalten:
- Objekt – Namen von Objekten;
- Eigentümer – ein Eigentümer eines Objekts;
- SELECT – Erlaubnis, Daten anzuzeigen oder die SELECT-Anweisung auszuführen. Es ist nur für Tabellen und Ansichten verfügbar;
- INSERT – Erlaubnis, Daten hinzuzufügen oder die INSERT-Anweisung auszuführen. Es ist nur für Tabellen und Ansichten verfügbar;
- UPDATE – Erlaubnis, Daten zu ändern oder die UPDATE-Anweisung auszuführen. Es ist nur für Tabellen und Ansichten verfügbar;
- DELETE-Berechtigung zum Löschen von Daten oder zum Ausführen der DELETE-Anweisung. Es ist nur für Tabellen und Ansichten verfügbar;
- EXEC – Erlaubnis, gespeicherte Prozeduren und Funktionen auszuführen. Es ist nur für gespeicherte Prozeduren und Funktionen verfügbar;
- DRI (deklarative referentielle Integrität). Es ist nur für Tabellen, Ansichten und Funktionen verfügbar.
Es gibt keine Berechtigungen für die neue Rolle. Um eine Tabelle, z. B. Kategorien, anzeigen zu können, aktivieren Sie das Kontrollkästchen am Schnittpunkt der Kategorien-Zeile und der SELECT-Spalte. Sie sehen ein grünes Häkchen in dem Kästchen, was eine Erlaubnis bedeutet. Der zweite Klick verändert das Häkchen zum roten Kreuz und bedeutet Verbot. Dies kann erforderlich sein, wenn Sie dem Benutzer eine Berechtigung erteilen und ihn einer anderen Rolle hinzufügen, in der der Zugriff auf die ausgewählte Aktion erlaubt ist. Der dritte Klick entfernt alle Berechtigungen für die Aktion und lässt das Feld leer. Das bedeutet, dass es keinen Zugriff gibt; Sie kann jedoch delegiert werden, wenn der Benutzer einer anderen Rolle mit den Berechtigungen für das Objekt hinzugefügt wird oder Berechtigungen explizit angegeben werden.
Wenn Sie eine Zeile mit dem Objekt der Tabelle oder Ansicht auswählen, wird die Schaltfläche Spalten am unteren Rand des Fensters verfügbar. Angenommen, Sie haben die Tabelle ausgewählt und auf diese Schaltfläche geklickt. Es öffnet sich das Fenster, in dem Sie Berechtigungen für einzelne Tabellenspalten setzen können.
Spaltenberechtigungen festlegen
Dies ist in der Tat eine großartige Möglichkeit, da einige Spalten, die für die Datenbankintegrität verantwortlich sind, nicht von Benutzern oder Hackern geändert werden dürfen. Es ist besser, die UPDATE- oder SELECT-Operationen (wenn möglich) für diese Spalten zu verbieten.
Individualismus
Rollen sind bequem zu verwenden, wenn ähnliche Benutzer kombiniert werden müssen. Beispielsweise müssen zahlreiche Buchhalter Zugriff auf Finanztabellen erhalten. Jedem Buchhalter Berechtigungen zu erteilen ist zeitaufwändig. Es ist viel einfacher, eine Rolle für den Buchhalter zu erstellen, ihm Berechtigungen zu erteilen und dann alle Buchhaltungskonten zu dieser Rolle hinzuzufügen.
Es gibt jedoch Fälle, in denen Berechtigungen für einen Benutzer eindeutig sein sollten oder zusätzlich zu den von der Rolle gewährten Berechtigungen zusätzliche Berechtigungen erteilt werden müssen. Beispielsweise muss einer der Buchhalter Zugriff auf Tabellen der Personalabteilung haben. In diesem Fall ist es besser, dem Buchhalter direkt Berechtigungen hinzuzufügen, als eine neue Rolle zu erstellen.
Wir haben die Rollen zuerst erkundet, um uns an sie zu gewöhnen. In den meisten Fällen gibt es ein separates Konto für Buchhalter, ein separates Konto für Ökonomen usw. In diesem Fall verbinden sich die meisten Personen mit einem Konto mit dem Server. So zu kontrollieren, wer was tut, ist unmöglich. Es ist besser, bei Bedarf individuelle Berechtigungen zu verwenden, während jeder Benutzer sein eigenes Konto haben muss.
Berechtigungen für Tabellen
Sehen wir uns an, wie wir Berechtigungen für bestimmte Objekte erteilen können, beispielsweise für Tabellen.
Wählen Sie im Objektbaum den Zweig Datenbanken/Northwind/Tabellen. Im rechten Teil öffnet sich eine Liste aller Tabellen. Klicken Sie mit der rechten Maustaste auf eine beliebige Tabelle und wählen Sie Alle Aufgaben/Berechtigungen verwalten. Das Fenster „Berechtigungseigenschaften“ wird geöffnet, das dem Fenster „Datenbankrolleneigenschaften“ mit der Liste der Benutzer anstelle der Liste der Objekte ähnelt. Das Objekt ist eine Tabelle, auf die wir geklickt haben, und ihr Name wird im Dropdown-Menü des Fensters aufgelistet. Jetzt müssen wir Berechtigungen für dieses Objekt für verschiedene Benutzer festlegen.
Berechtigungen für eine Tabelle festlegen
Die Liste der Berechtigungen lautet wie folgt:anzeigen, aktualisieren, hinzufügen, löschen, ausführen und verwalten. Wenn Sie auf die Schaltfläche Spalten klicken, öffnet sich das Fenster zum Festlegen von Berechtigungen für das Objekt auf der Ebene der Tabellenfelder für einen bestimmten Benutzer.
Aufrufe
Wir haben zwei Tische. Einer von ihnen speichert die Liste der Mitarbeiter, während eine andere Tabelle Informationen über die Anzahl der geleisteten Arbeitsstunden pro Monat und die erhaltenen Löhne (offizielle und verdeckte Löhne) enthält.
Angenommen, ein Steuerbeamter kommt zu Ihnen und bittet Sie, die Löhne der Arbeiter zu zeigen. Außerdem fragen sie, ob Sie alle Steuern bezahlt haben. Welche Aktionen müssen Sie auf Ihrer Seite durchführen?
Aus der dritten Reihe kam der erste Vorschlag – einen neuen Benutzer anzulegen, der Tabellen inklusive Mitarbeiter- und Gehaltsliste lesen darf. Außerdem sollten Sie nicht vergessen, die Spalte mit dem versteckten Lohn zu schließen. Eigentlich ist die Lösung richtig, aber absolut wirkungslos.
Die beste Option besteht darin, eine Ansicht zu erstellen, eine SQL-Abfrage, die Daten auswählt. In der Datenbank sieht es wie eine Tabelle aus. Sie können SQL-Daten mithilfe von Abfragen auswählen und Berechtigungen erteilen. Es stellt sich heraus, dass die Abfrage gegen die Abfrage ausgeführt wird.
Führen Sie zum Erstellen einer Ansicht die folgende Abfrage aus:
CREATE VIEW salary AS SELECT fields for a tax official FROM Employees, Wages WHERE joins
Jetzt gibt es ein neues Wage-Objekt im Zweig Databases/Northwind/Views. Wenn Sie mit der rechten Maustaste darauf klicken und Alle Aufgaben/Berechtigungen verwalten auswählen, öffnet sich das Fenster zum Erteilen von Berechtigungen. Legen Sie eine Berechtigung für den Finanzbeamten fest und speichern Sie diese. Um den Inhalt der Ansicht zu überprüfen, führen Sie die Abfrage aus:
SELECT * FROM salary
Wie Sie sehen können, gibt es einen Zugriff wie auf eine einfache Tabelle. Der Steuerbeamte wird auch denken, dass er tatsächliche Daten sieht. Tatsächlich enthält diese Abfrage jedoch nur die Daten, die wir benötigen.
Im wirklichen Leben lässt sich der Finanzbeamte nicht so leicht täuschen, weil er nicht dumm ist. Dieses Beispiel zeigt jedoch, dass die Ansicht eine perfekte Sicherheitsmethode sein kann. Wir können die Daten anzeigen, die Benutzer benötigen, und sonst nichts. Gleichzeitig verfügen wir über alle Tools zum Verwalten von Berechtigungen für die Ansicht, ohne die Zugriffsberechtigungen für die Tabellen zu beeinträchtigen.
Daher können verschiedene Ansichten derselben Tabellen unterschiedliche Daten anzeigen. Wenn Sie eine zusätzliche Spalte anzeigen möchten, fügen Sie die Ansichten zur Abfrage hinzu. In diesem Fall müssen die Berechtigungen nicht geändert werden.
Systemansichten
In jeder Datenbank können vom Server automatisch erstellte Systemansichten vorhanden sein. Ich empfehle nicht, ihnen eine Berechtigung zu erteilen, da sie einige zusätzliche Informationen anzeigen können, die einem Hacker helfen können, Berechtigungen festzulegen oder einfach Daten zu zerstören. Die Systemansichten beginnen mit dem Präfix sys und System wird in der Spalte Typ der Liste angegeben.
Verfahren und Funktionen
Moderne Datenbankserver unterstützen gespeicherte Prozeduren und Funktionen. Dies ist ein PL/SQL- oder Transact-SQL-Code, abhängig von der Datenbank, die auf dem Datenbankserver ausgeführt wird. Mit diesen Prozeduren können wir beliebige Operationen auf dem Server ausführen oder einfach Daten auswählen, wie in der Ansicht. Wir können Berechtigungen für jede Prozedur festlegen.
Bei der Überprüfung der Rollen haben wir bereits die Prozeduren in der Liste der Objekte gesehen, für die Sie Berechtigungen festlegen können, und in diesen Zeilen ist nur die Spalte EXEC verfügbar, da die Prozeduren nur ausgeführt werden können.
Gespeicherte Prozeduren und Funktionen werden in einer bestimmten Datenbank gespeichert. Um Prozeduren der Northwind-Datenbank anzuzeigen, wählen Sie den Zweig Databases/Northwind/Stored Procedures. Es gibt viele Systemprozeduren, deren Namen mit dem Präfix dt_ beginnen und System in der Spalte Typ angegeben ist. Es wird empfohlen, den Zugang zu diesen Verfahren nach Möglichkeit nicht zu gewähren. Sie können Funktionen im Zweig Datenbanken/Northwind/Benutzerdefinierte Funktion sehen.
Um Berechtigungen für Prozeduren und Funktionen zu ändern, klicken Sie mit der rechten Maustaste auf den Namen und wählen Sie im Menü Alle Aufgaben/Berechtigungen verwalten. In dem erscheinenden Fenster können Sie nur die EXEC-Spalte für Prozeduren und die EXEC- und DRI-Spalten für Funktionen ändern.
Berechtigungsrichtlinie
Einige Administratoren legen Berechtigungen basierend auf der vorhandenen Rolle fest, z. B. öffentlich. Dies trifft nicht zu, da es in dieser Rolle möglicherweise Berechtigungen gibt, die Benutzer nicht benötigen. Versuchen Sie daher, eine ganz neue Berechtigung festzulegen.
Was mich betrifft, erstelle ich immer eine neue Rolle und erteile einen Mindestsatz an Berechtigungen. Wenn Benutzer nach mehr Berechtigungen fragen und diese tatsächlich erforderlich sind, füge ich weitere Berechtigungen hinzu. Wenn Sie standardmäßig alles zulassen, gibt es keine Garantie dafür, dass in Zukunft unnötige und gefährliche Rechte gelöscht werden.
Ein weiteres Problem beim Festlegen weniger Berechtigungen ist eine Gewohnheit. Benutzer können sich daran gewöhnen, dass ihnen viele Berechtigungen erteilt werden, und dann wird der Bann einen schwerwiegenden Skandal auslösen. Niemand mag es, wenn seine Rechte verletzt werden.
Tabellen/Datenbanken
Datenbanken speichern ihre Einstellungen und verborgenen Eigenschaften in Systemtabellen und Datenbanken. Sie unterscheiden sich nicht von anderen Datenbankobjekten und Berechtigungen können für sie festgelegt werden. Erlauben Sie Benutzern auf keinen Fall den Zugriff auf diese Tabellen ohne besonderen Bedarf.
In SQL Server werden wichtige Systemdaten in den Datenbanken master und msdb gespeichert. Daher sind diese Datenbanken zu schützen. In Oracle existiert jede Datenbank als separates Objekt und Systemtabellen werden zusammen mit denen der Benutzer gespeichert.
Fast alle Datenbankserver bieten an, Testdatenbanken zu installieren, die zum Erlernen oder Testen des Systems verwendet werden können. Wenn Sie sie haben, löschen Sie sie, da auf diese Datenbanken ein öffentlicher Zugriff eingestellt ist. Wenn ein Hacker Namen oder Eigenschaften eines existierenden Objekts im System kennt, wird seine Aufgabe erheblich vereinfacht.
Wenn Sie sich mit einer Testdatenbank verbinden, können Sie einige Befehle auf dem Server ausführen und das Betriebssystem oder eine funktionierende Datenbank beschädigen. Es sollten keine zusätzlichen Sachen im System sein. Darüber hinaus haben solche Tabellen/Datenbanken selbst für einen Gast ziemlich hohe Berechtigungen.
Zusammenfassung
Obwohl wir MS SQL Server als Beispiel verwendet haben, existieren die Konzepte von Berechtigungen, Rollen und Authentifizierung in allen Datenbanken.
Nachdem Sie alle Regeln kennen, die wir berücksichtigt haben, brauchen Sie nur die Besonderheiten ihrer Verwendung in Ihrer Datenbank zu untersuchen.