SQL Server: Sicherheit für Entwickler

Rechte und deren Vergabe

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
Lernen Sie hier, wie Sie Rechte auf Schemata verteilen können, um diese übersichtlich zuordnen zu können.
12:15

Transkript

Rechte auf Ebene der Datenbank vergeben, die werden entsprechend durchgeerbt bis hin zu den einzelnen Objekten. Das macht man in der Praxis relativ selten, weil ich möchte nicht die ganze Datenbank in irgendeiner Form quasi freigeben, dass ich überall darauf lesen kann, sondern es macht mehr Sinn, wenn ich beispielsweise hingehen und die Tabellen, die Prozeduren und Sichten und was auch immer ich haben mag, in einzelne Schemata zu verteilen und auf diese Schemata Berechtigungen zu vergeben. Sie können sich so ein Schema quasi als Gruppe für Objekte vorstellen auf diesen Gruppen können Sie dann entsprechende Berechtigungen vergeben. So, wenn Sie sich also Schemata als Container oder als Gruppe von Objekten vorstellen, wie gesagt, das nur als Denkhilfe, dann können Sie relativ einfach hingehen und hier unten einzelne Schemata anlegen. Sie sehen, es gibt schon eine ganze Reihe von Schemata. Ich kann ein neues hinzufügen. Ich kann das mit dem Schema owner hier leer lassen. In dem Moment wird er gleich dbo einsetzen beziehungsweise das tun, weil ich selber als Mitglied der Db-Owner-Rolle unterwegs bin. Im Moment nicht Buchung, sondern Buchhaltung natürlich. Muss ja auch einen Sinn machen. So, es taucht hier unten auf, ich kann jetzt hier hingehen und Rechte vergeben. Ich könnte zum Beispiel den armen Jens noch mal hervorziehen und ihm das Verbot geben, an diesem Schema überhaupt etwas zu lesen. Das Problem, was ich jetzt habe, ich möchte möglicherweise eine bestehende Tabelle in dieses Schema verschieben und das kann ich aber leider nicht über die Oberfläche machen. Ich kann das nur bei neuen Tabellen machen. Wenn ich hier im Entwurf über das SQL Server Management Studio gehe, ich kann also sagen neue Tabelle. Und wenn ich dann auf F4 drücke, dann kommen die Eigenschaften raus. Und hier kann ich das Schema, bevor ich die Tabelle speichere, festlegen. Und die Liste, die ich hier habe, umfasst auch mein Buchhaltungsschema. Ja, also das geht mit neuen Tabellen, ich breche das mal ab, weil ich das nicht mehr brauche. Und das geht leider nicht für bestehende Tabellen, da muss ich mich ein bisschen meiner T-SQL-Kenntnis bemächtigen. Ich kann Folgendes machen: Ich kann mit diesem kleinen Skript eine Tabelle von einem zu einem anderen Schema transferieren. Ich müsste damit erst einmal in die Datenbank wechseln. Das geht ohne Weiteres. Ich könnte das Schema hier noch mal anlegen. Das mache ich nicht und das würde auch zum Fehler führen, weil ich es ja gerade schon über die Oberfläche angelegt habe. Und ich kann dann sagen ALTER SCHEMA, dann den Namen des Neuen, des Zielschemas und dann TRANSFER und der vollständige Name des Objektes. Und dann kann ich hier auf der Seite aktualisieren und Sie sehen, der Name hat sich hier auch essenziell geändert. Und wenn ich da wieder runtergehen zu meinem User Jens, sehen Sie, es ist immer noch nichts dadrin. Insofern der kommt heute einfach nicht mehr dazu, irgendwie Daten lesen zu dürfen. Wir nähern uns also langsam etwas, was wirklich interessant ist. Wir haben auf der einen Seite Rollen und Benutzer zusammenzufassen, wir haben Schemata, um Objekte zusammenzufassen. Das mit dem Datenbanken klammere ich mal aus, das ist etwas zu große Klammer. Das heißt, ich habe auf beiden Seiten Mengen oder Gruppen von Objekten oder Usern und kann quasi da hingehen und einzelnen Rollen Rechte auf Schemata vergeben. Und das hat den Vorteil, dass ich sehr übersichtlich Berechtigung vergeben kann. Ich zeige Ihnen aber trotzdem noch mal, was Sie hier in den einzelnen Eigenschaften für eine Tabelle zum Beispiel machen können, unter anderem um Sie davon abzuhalten, das in der Tat wirklich zu tun. Ich nehme unseren User noch einmal. Wenn Sie Zum Beispiel die Select-Berechtigung auswählen, es geht bei Select und es geht bei Update, dann wird hier eine weitere Schaltfläche freigeschaltet und Sie können in der Tat Berechtigung auf Spalten-Ebene vergeben. Bitte tun Sie das nicht. Es gibt 2 Gründe, das nicht zu tun. Erstens es kostet den SQL Server Performance, er muss wirklich für jede einzelne Spalte prüfen, ob Sie die Rechte darauf haben. Die Anwendung muss auch vorhängend damit umgehen können und zweitens, wenn Sie irgendetwas suchen, um unübersichtliche, schlecht zu handhabende oder schlicht überhaupt nicht mehr zu administrierende Security-Einstellungen zu suchen, hier haben Sie sie gefunden. Das heißt, Sie können jetzt wirklich hingehen und für jede einzelne Spalte noch mal die Rechte vergeben oder auch das Verbot aussprechen. Und ich garantiere Ihnen, das werden Sie wahrscheinlich innerhalb kürzester Zeit, wenn Sie das auf ein halbes Dutzend Tabellen gemacht haben, irgendwann nicht mehr wirklich im Griff haben, wer worauf welche Rechte hat und vor allen Dingen auch nicht mehr, auf welche Spalte. Also das sollten Sie auf keinen Fall tun, bitte, bitte machen Sie das nicht. So, also schnell raus hier und ich gehe dann mal auf unser gerade erstelltes Schema, gehe auf die Properties, auf die Permissions. Und Sie sehen, entsprechend der Benutzer hat hier das Verbot bekommen und Sie sehen des Weiteren, es gibt so etwas wie Execute, Create sequence und solche Dinge, also die ich zum Beispiel gar nicht nur speziell für Tabellen oder speziell für eine Art von Objekten benötige die Rechte, sondern das ist quasi die Obermenge aller Rechte der unterschiedlichen Objekte, die sich in einem Schema befinden können. Und das müssen Sie in dem Moment so ein bisschen im Hinterkopf behalten: Ein Schema ist mehr, als nur ein Container für Tabellen, sondern auch für Prozeduren. Ich wiederhole das einfach noch mal, weil es schlicht und ergreifend wichtig ist, dass in einem Schema auch sehr viele andere Objekte liegen können und Sie deswegen auch hier unterschiedliche Rechte haben. So, und dann zeige ich Ihnen das Ganze mal von T-SQL-Seite aus. Für die Demo mit dem T-SQL habe ich zwischenzeitlich die Datenbank von gerade gelöscht und auch das Loginn des Users Jens, damit ich hier Ihnen zeigen kann, wie man alles per T-SQL anlegen kann. Ich erzeuge zunächst die Datenbank und wechsle in deren Kontext, dann kann ich ein Login anlegen, ich gebe dem Passwort 123. Die Default-Datenbank soll master sein, das ist in der Regel auch der Standard für neue Logins. Default-Datenbank wird immer dann verwendet, wenn Sie sich beispielsweise mit dem SQL Server über eine Anwendung verbinden und in deren Connection-String kein Initial-Catalog, also keine anfängliche Datenbank in irgendeiner Form auswählen, dann nimmt er die Master-Datenbank. Man sollte allerdings aus Best-Practice-Gründen durchaus immer die Master-Datenbank nehmen, weil es kann sein, dass Sie in Probleme geraten, wenn die Datenbank, die Sie hier angeben, später irgendwann nicht mehr vorhanden ist. Insofern ist Master immer eine gute Wahl. Des Weiteren gebe ich an, dass ich sowohl die EXPIRATION, als auch die POLICIES ausschalten möchte. Ich möchte einfach einen Login anlegen und nicht mit irgendwelchen Einstellungen für Strong Passwords und Ähnliches behelligt werden. Damit habe ich das Login angelegt, dann in der Datenbank lege ich den User an und dann kann ich entsprechend Rechte vergeben, zum Beispiel CREATE TABLE, CREATE PROCEDURE. Ich kann es revoken, wenn ich möchte, das heißt, Ihren NC wieder, ja und damit darf er dann doch keine Tabelle anlegen, Pech gehabt. Kann selbst aber, ist eine andere Verbindung, mit CREATE TABLE eine neue Tabelle anlegen und auch ein paar Daten einfügen, GP. Dann kann ich zum Beispiel den User Mitglied der db_datareader-Rolle machen. Ich kann eine eigene Rolle anlegen, Sie sehen, es ist eigentlich alles relativ straightforward, kann dann dieser Rolle unterschiedliche Rechte geben. Ich kann auch direkt die Rechte vergeben, das ist hier nicht besonders überraschend. Ich kann Verbote aussprechen und ich kann vor allen Dingen hier, das ist die Syntax für die Berechtigung auf Spalten-Ebene. Benutzen Sie es nicht, ich zeige Ihnen aber trotzdem, wie der Teufel aussieht. Und Sie können hier auf einzelne Spalten Berechtigungen vergeben, zum Beispiel Select-Berechtigungen auf die ID-Spalte und Update-Berechtigungen auf die ID-Spalte und so weiter und so fort. Das kann man hier ohne Weiteres machen. Dann kann ich das testweise mal ausführen, was ich jetzt bis soweit konfiguriert habe. Ich möchte hier in den Sicherheitskontext des Users wechseln und könnte zum Beispiel einmal ausprobieren, ob das funktioniert und wie es aussieht. Und zwischenzeitlich in der Tat habe ich wirklich das Recht, darauf zuzugreifen. Ich könnte das Recht mir auch entziehen, hier irgendwo war eine Revoke, nein, nicht CREATE TABLE, sondern, wo war es denn gewesen, schreibe ich sie mir selber, REVOKE SELECT ON. Hier unten steht es mit einem Deny, für das aus. Versuche noch mal mein Glück als Jens. Sie sehen, es geht immer noch, ganz einfach deswegen, weil Jens Mitglied der Datareader-Rolle ist. Also das ist Mad As Design, was hier passiert, das heißt, ich kann, wenn ich mir das noch mal in die GUI angucke, hier in die Datenbank gehen, in die Security, in die Rollen, in die Datenbank-Rollen, kann mir die Datareader-Rolle vorknüpfen. Und ich sehe in der Tat, Jens ist Mitglied. Das heißt, ein einfaches Revoke reicht nicht, ich muss wirklich schon hingehen und ein Verbot aussprechen. Dann kann ich das Ganze noch mal ausführen und Sie sehen, in dem Fall kriege ich eine Fehlermeldung, weil die SELECT permission für diesen User nicht vergeben wurde. Sie sehen, das Ganze ist auch mit T-SQL machbar. Noch mal ein kleiner Hinweis: Alles, was das SQL Server Management Studium tut, wird letztendlich in T-SQL umgebaut und an den Server geschickt. Und damit haben wir gesehen, was mit Rechten möglich ist, wie Sie Rechte vergeben, wie Sie positive, als auch negative Rechte vergeben, also Verbote, wie Rechte vererbt werden. Sie haben gesehen, dass es eine ziemlich gute Idee sein kann, auf Schemata Berechtigung zu vergeben und die einzelnen Objekte in Schemata zu organisieren und damit quasi Teile der Datenbank relativ elegant zu administrieren. Sie haben gesehen, dass Sie auch Dinge tun können, die Sie vielleicht nicht tun sollten, unter anderem Rechte auf einzelne Objekte vergeben oder sogar Rechte auf einzelne Spalten zu vergeben. Ich habe mir hier in den Videos gespart, alle Rechte explizit aufzulisten, weil es wirklich sehr, sehr viele sind, da würde ich Sie höflicherweise auf die Books Online des SQL Servers oder auf die MSDN verweisen, sonst würde ich Sie wahrscheinlich mit meiner Stimme nur in Schlaf und Trance reden und das möchte ich an der Stelle auch nicht. Insofern habe ich mich hier auf das Vorgehen beziehungsweise die Effekte und die Vererbung, also die wichtigen Aspekte, die Sie kennen sollten, beschränkt. Aber, halt, eins wäre vielleicht doch noch ganz interessant: Wie liste ich denn nun auf, welche Rechte wer in der Datenbank hat? Ist eine Wissenschaft für sich. Ich habe ihn Ihnen hier mal ein kleines Beispiel zu den Skripten dazugelegt, ListPermissions. Und das zeigt Ihnen im Wesentlichen, wer welche Rechte in der Datenbank hat. Und Sie sehen, selbst unsere kleine Testdatenbank hat schon, na ja, durchaus eine sehr erquickende Anzahl von Berechtigungen. Und Sie können dieses Skript nutzen, um einfach mal sich einen Überblick zu verschaffen, wer worauf welche Berechtigung bekommen hat. Das macht mehr Sinn, als durch die Oberfläche klicken zu müssen, das macht nämlich nicht so besonders viel Spaß. Es gibt draußen im Internet einige Ansätze, wie das passieren kann. Das ist ein Beispiel, wie es aus der MSDN stammt, zumindestens leicht angepasst, und deswegen habe ich hier Ihnen das mal dazugelegt, da können Sie sich so ein bisschen einen kleinen Überblick verschaffen an der Stelle.

SQL Server: Sicherheit für Entwickler

Lernen Sie, wie sich das Thema Sicherheit im Entickleralltag mit Microsofts Datenbankserver umsetzen lässt.

2 Std. 31 min (25 Videos)
Derzeit sind keine Feedbacks vorhanden...
Hersteller:
Exklusiv für Abo-Kunden
Erscheinungsdatum:15.01.2016

Dieser Online-Kurs ist als Download und als Streaming-Video verfügbar. Die gute Nachricht: Sie müssen sich nicht entscheiden - sobald Sie das Training erwerben, erhalten Sie Zugang zu beiden Optionen!

Der Download ermöglicht Ihnen die Offline-Nutzung des Trainings und bietet die Vorteile einer benutzerfreundlichen Abspielumgebung. Wenn Sie an verschiedenen Computern arbeiten, oder nicht den ganzen Kurs auf einmal herunterladen möchten, loggen Sie sich auf dieser Seite ein, um alle Videos des Trainings als Streaming-Video anzusehen.

Wir hoffen, dass Sie viel Freude und Erfolg mit diesem Video-Training haben werden. Falls Sie irgendwelche Fragen haben, zögern Sie nicht uns zu kontaktieren!