{"id":55001452,"date":"2023-10-01T00:00:00","date_gmt":"2023-10-08T12:41:12","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=1452"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"SQL_ServerSecurity__Teil_8_Datenbankrollen","status":"publish","type":"post","link":"https:\/\/access-im-unternehmen.de\/SQL_ServerSecurity__Teil_8_Datenbankrollen\/","title":{"rendered":"SQL Server-Security &#8211; Teil 8: Datenbankrollen"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/vg02.met.vgwort.de\/na\/acafa568791947d1b817225301012a6d\" width=\"1\" height=\"1\" alt=\"\"><\/p>\n<p>Bernd Jungbluth, Horn (info@berndjungbluth.de)<\/p>\n<p><b>Berechtigungskonzepte sind mit einer Vielzahl von Fachbegriffen verbunden. Separation of Duties, Principle of Least Privilege, Role Based Access Control, Discretionary Access Control etc. pp. Sie behandeln die Vergabe von Zugriffsrechten auf unterschiedlichen Sicherheitsniveaus. Im Kern jedoch dient jede dieser Methoden der Vertraulichkeit und Integrit&auml;t der Daten. Die Anwender d&uuml;rfen nur auf die Ressourcen zugreifen, die sie zum Erf&uuml;llen ihrer Aufgaben ben&ouml;tigen. Dabei gilt es &Uuml;berschneidungen von Zust&auml;ndigkeiten und somit den Missbrauch von Daten zu vermeiden. SQL Server unterst&uuml;tzt zur Umsetzung dieser Anforderungen gleich mehrere Konzepte. <\/b><\/p>\n<p>In den bisherigen Beitr&auml;gen dieser Reihe haben Sie einige Varianten m&ouml;glicher Berechtigungskonzepte kennengelernt. Das aktuelle Berechtigungskonzept der Beispielumgebung basiert auf der Windows-Authentifizierung und drei Datenbankrollen. Die Anwender melden sich mit ihren Windows-Benutzerkonten am SQL Server an. Wobei im SQL Server als Anmeldungen nicht die Benutzerkonten der Anwender hinterlegt sind, sondern die der Windows-Gruppen <b>Personal <\/b>und <b>Vertrieb<\/b>. So authentifiziert sich Frau Bienlein als Mitglied der Windows-Gruppe <b>Vertrieb <\/b>&uuml;ber die gleichnamige Anmeldung am SQL Server. &Auml;hnlich ist es beim Anwender <b>Stromberg<\/b>. Er ist Mitglied der Windows-Gruppe <b>Personal <\/b>und f&uuml;r diese gibt es im SQL Server die Anmeldung <b>Personal<\/b>. <\/p>\n<p>Der eigentliche Datenzugriff ist in der Datenbank geregelt. Zu jeder Anmeldung existiert dort ein entsprechender Benutzer. Die beiden Benutzer <b>Personal <\/b>und <b>Vertrieb <\/b>sind Mitglieder der Datenbankrollen <b>db_datareader<\/b>, <b>db_datawriter <\/b>und <b>edb_execute<\/b>. Durch diese Zuordnung d&uuml;rfen die Benutzer und somit letztendlich die Mitglieder der Windows-Gruppen die Daten aller Tabellen lesen, &auml;ndern, erg&auml;nzen und l&ouml;schen sowie alle gespeicherten Prozeduren ausf&uuml;hren. Lediglich den Vertriebsmitarbeitern ist der Zugriff auf die Daten der Personalabteilung nicht gestattet. Das wird mit einer erweiterten Rechtevergabe sichergestellt. Diese verweigert dem Benutzer <b>Vertrieb <\/b>den Zugriff auf die Tabellen <b>Bewerber<\/b>, <b>Mitarbeiter <\/b>und <b>Stellen <\/b>sowie der gespeicherten Prozedur <b>pSelectGeburtstagsliste<\/b>.<\/p>\n<p>Dieses Berechtigungskonzept bietet bereits ein recht hohes Sicherheitsniveau. Dennoch ist es nicht detailliert genug. Die Anwender der Windows-Gruppe <b>Vertrieb <\/b>haben zwar keinen Zugriff auf die Personaldaten, auf alle anderen Daten k&ouml;nnen sie jedoch zugreifen. Um diese Sicherheitsl&uuml;cke zu schlie&szlig;en, bedarf es einer dedizierten Vergabe der Zugriffsrechte. Ein solch detailliertes Berechtigungskonzept ben&ouml;tigt man, wenn die Datenbank Informationen f&uuml;r verschiedene Zwecke speichert. Die Beispieldatenbank <b>WaWi_SQL <\/b>enth&auml;lt neben den Daten des Vertriebs und der Personalabteilung die Daten des Einkaufs. Die Zugriffsrechte zu diesen Daten sollen aus Gr&uuml;nden der Datensicherheit und des Datenschutzes getrennt werden. <\/p>\n<h2>Datensicherheit und Datenschutz<\/h2>\n<p>Wie wichtig eine Trennung aus Gr&uuml;nden der Datensicherheit ist, haben Sie in den letzten Beitr&auml;gen anhand der Aktionen von Frau Bienlein gesehen. Aktuell hat sie Zugriff auf die Daten des Einkaufs und kann Lieferanten mitsamt Eingangsrechnungen und Wareneing&auml;ngen anlegen. Der monatliche Zahlungslauf der Buchhaltung &uuml;berweist dann die Betr&auml;ge der nicht realen Eingangsrechnungen an das Bankkonto des fiktiven Lieferanten, also an Frau Bienlein. Das neue Berechtigungskonzept soll Datenmissbrauch dieser Art verhindern.<\/p>\n<p>Eine detaillierte Rechtevergabe ist ebenso aus Gr&uuml;nden des Datenschutzes erforderlich. Aktuell haben die Mitarbeiter der Personalabteilung vollen Zugriff auf alle Daten der Datenbank. Hierunter fallen die Daten der Kunden und deren Ansprechpartner. Dieser Datenzugriff ist nicht datenschutzkonform. Die Daten der Kunden und Ansprechpartner werden zum Zweck der Vertragserf&uuml;llung und Kundenbindung in der Datenbank gespeichert. Ein Zugriff der Personalabteilung l&auml;sst sich mit diesem Zweck nicht vereinbaren.<\/p>\n<p>Somit wird die Zweckbindung als einer der Grunds&auml;tze zur Verarbeitung von personenbezogenen Daten mit dem aktuellen Berechtigungskonzept nicht erf&uuml;llt.<\/p>\n<p>Datensicherheit und Datenschutz sind zwei Aspekte zur Bewertung des Sicherheitsniveaus. Beide fordern die Vertraulichkeit und Integrit&auml;t der Daten. Aber was genau verbirgt sich hinter dieser Forderung?<\/p>\n<h2>Vertraulichkeit und Integrit&auml;t der Daten<\/h2>\n<p>Das Bundesamt f&uuml;r Sicherheit in der Informationstechnik (BSI) betrachtet die Vertraulichkeit und Integrit&auml;t der Daten zusammen mit deren Verf&uuml;gbarkeit als die &#8222;Schutzziele oder auch Grundwerte der Informationssicherheit&#8220;. <\/p>\n<p>Vertraulichkeit beschreibt das BSI als den &#8222;Schutz vor unbefugter Preisgabe von Informationen&#8220; oder etwas konkreter mit &#8222;Vertrauliche Daten und Informationen d&uuml;rfen ausschlie&szlig;lich Befugten in der zul&auml;ssigen Weise zug&auml;nglich sein.&#8220;. <\/p>\n<p>Integrit&auml;t &#8222;bezeichnet die Sicherstellung der Korrektheit (Unversehrtheit) von Daten und der korrekten Funktionsweise von Systemen&#8220;. Daten verlieren ihre Integrit&auml;t, wenn &#8222;diese unerlaubt ver&auml;ndert&#8220; wurden.<\/p>\n<p>Die hier aufgef&uuml;hrten Definitionen stammen aus dem Glossar des IT Grundschutz Kompendiums. Ein relevantes Werk zum Thema IT-Sicherheit.<\/p>\n<p>Eine Ma&szlig;nahme zur Gew&auml;hrleistung der Vertraulichkeit und Integrit&auml;t der Daten ist ein Berechtigungskonzept. Wobei dessen Detaillierungsgrad von Ihren Sicherheitsanforderungen abh&auml;ngt. Der Aufwand in einem Bioladen wird geringer sein als in einem Krankenhaus. Das Sicherheitsniveau Ihres Unternehmens stellt also die Grundlage des Berechtigungskonzepts dar. Zur Umsetzung beginnt man mit einer Bestandsaufnahme.<\/p>\n<h2>Ein detailliertes Berechtigungskonzept<\/h2>\n<p>Ziel der Bestandsaufnahme ist eine Aufstellung der im Unternehmen anfallenden Aufgaben sowie deren Aufgabentr&auml;ger. Sie m&uuml;ssen also herausfinden, wer im Unternehmen welche Aufgaben erledigt. Die ersten Fragen lauten daher: Wer macht hier eigentlich was? Und warum? Auf der Suche nach der Antwort erleben Sie m&ouml;glicherweise die eine oder andere &Uuml;berraschung. <\/p>\n<p>Sie werden feststellen, dass Personen Aufgaben erledigen, von denen Sie das nicht erwartet h&auml;tten. Und Sie werden sehen, dass manche Aufgabe doppelt und dreifach von Personen in unterschiedlichen Abteilungen bearbeitet wird. Wohingegen sich um einige Aufgaben niemand k&uuml;mmert. Sie werden erleben, wie sich Personen an Aufgaben klammern und wie andere wiederum die Aufgaben so schnell wie m&ouml;glich loswerden m&ouml;chten. Die menschliche Komponente beim Erstellen eines Berechtigungskonzepts sollten Sie nicht untersch&auml;tzen.<\/p>\n<p>Das klingt jetzt nicht so erfreulich f&uuml;r Sie? Dann betrachten Sie es mal von einer anderen Seite. Eine &Uuml;bersicht der T&auml;tigkeiten Ihrer Kollegen bietet einige Vorteile. Vielleicht erkennen Sie Datenzugriffe, die es aus Gr&uuml;nden der Datensicherheit oder des Datenschutzes gar nicht geben d&uuml;rfte. M&ouml;glicherweise entdecken Sie einiges an Verbesserungspotential in der Aufgabenverteilung. Eine Neustrukturierung der Aufgaben wiederum kann Ihnen Einsparm&ouml;glichkeiten aufzeigen. Sie brauchen vielleicht nicht auf allen Rechnern zwingend eine Access-Lizenz und eventuell ist eine Lizenzierung des SQL Servers nach Client Access Licence g&uuml;nstiger als eine Lizenzierung pro Prozessor.<\/p>\n<p>Bei der Bestandsaufnahme sollten Sie neben den menschlichen Aufgabentr&auml;gern ebenso die maschinellen Aufgabentr&auml;ger ber&uuml;cksichtigen. Im Hinblick auf ein Berechtigungskonzept f&uuml;r Datenbanken spielen hierbei die Applikationen eine wichtige Rolle. Welche Applikationen werden zur Bew&auml;ltigung welcher Aufgaben eingesetzt? Welche Datenbanken geh&ouml;ren zu den Applikationen? Und nat&uuml;rlich stellt sich letztendlich die Frage, welche Anwender mit diesen Applikationen arbeiten.<\/p>\n<p>Was die Anwender betrifft, ist f&uuml;r Sie als Datenbankadministrator bereits ein Teil der Arbeit getan. Deren Windows-Benutzerkonten sind in den meisten F&auml;llen in Windows-Gruppen zusammengefasst. Der IT-Systemadministrator hat sich bei der Gruppenbildung bereits Gedanken &uuml;ber die Gruppenzugeh&ouml;rigkeit der Anwender gemacht. Nicht selten werden in diesen Gruppen die Abteilungen des Unternehmens abgebildet. Eine weitere Art der Gruppenbildung basiert auf Arbeitsabl&auml;ufen und Prozessen, insbesondere wenn hierbei mehrere Abteilungen involviert sind.<\/p>\n<p>Des Weiteren gibt es Gruppen zur Funktionstrennung, um Interessenskonflikte beziehungsweise &Uuml;berschneidungen von Zust&auml;ndigkeiten zu vermeiden. Wie auch immer, Sie als Datenbankadministrator sollten zun&auml;chst pr&uuml;fen, ob Sie die Windows-Gruppen ohne weiteres &uuml;bernehmen k&ouml;nnen. Sind die Gruppierungen nicht detailliert genug, erstellen Sie zusammen mit Ihrem IT-Systemadministrator weitere Gruppen.<\/p>\n<p>Im SQL Server legen Sie zu den einzelnen Windows-Gruppen die Anmeldungen an und ordnen diese der Datenbank zu. Sie kennen diese Vorgehensweise bereits. Durch die Zuordnungen werden in der Datenbank die Benutzer zu den Anmeldungen erstellt. Dort erfolgt dann durch die Mitgliedschaft der Benutzer in den einzelnen Datenbankrollen die eigentliche Berechtigungsvergabe. <\/p>\n<p>Eine Datenbankrolle enth&auml;lt die Zugriffsrechte an den Tabellen, die die Daten f&uuml;r die Aufgaben speichern und an der Gesch&auml;ftslogik, die in den gespeicherten Prozeduren definiert ist. So bestimmen Sie letztendlich, an welchen Tabellen die Mitglieder der Datenbankrolle eines, mehrere oder gar alle der Rechte <b>SELECT<\/b>, <b>INSERT<\/b>, <b>UPDATE <\/b>und <b>DELETE <\/b>besitzen. Ebenso definieren Sie in der Datenbankrolle welche gespeicherten Prozeduren per <b>EXECUTE <\/b>ausgef&uuml;hrt werden d&uuml;rfen. Wie Sie vom aktuellen Berechtigungskonzept her wissen, k&ouml;nnen Sie auf diese Art nicht nur Rechte vergeben, sondern auch explizit verweigern. <\/p>\n<p>Dieses Rollenprinzip ist als Role Based Access Control (RBAC) bekannt. Nat&uuml;rlich ist eine Vergabe der Rechte ebenso direkt am Benutzer selbst m&ouml;glich. Im aktuellen Berechtigungskonzept ist dies bei dem Benutzer <b>Vertrieb <\/b>der Fall. Ihm ist der Zugriff auf die Tabellen und gespeicherten Prozeduren der Personalabteilung explizit verweigert. Discretionary Access Control (DAC) lautet die Bezeichnung f&uuml;r diese direkte Art der Rechtevergabe. In den meisten F&auml;llen ist sie jedoch nicht empfehlenswert. Angenommen, die Au&szlig;endienstmitarbeiter sollen die gleichen Zugriffsrechte wie die Vertriebsmitarbeiter erhalten. Dazu legen Sie f&uuml;r die Windows-Gruppe <b>ADM <\/b>eine Anmeldung im SQL Server an und ordnen diese der Datenbank <b>WaWi_SQL <\/b>zu. Bei einer Rechtevergabe pro Benutzer m&uuml;ssten Sie die Rechte des Benutzers <b>ADM <\/b>an die des Benutzers <b>Vertrieb <\/b>anpassen. Jede &Auml;nderung der Zugriffsrechte w&auml;re dann bei beiden Benutzern zu pflegen. Ist die Rechtevergabe jedoch in einer Datenbankrolle definiert, nehmen Sie zus&auml;tzlich zum Benutzer <b>Vertrieb <\/b>den neuen Benutzer <b>ADM <\/b>in die Datenbankrolle auf. Weitere &Auml;nderungen der Zugriffsrechte finden ausschlie&szlig;lich in der Datenbankrolle statt und stehen direkt f&uuml;r die dort zugeordneten Benutzer zur Verf&uuml;gung, im Beispiel f&uuml;r die Vertriebsmitarbeiter und die Au&szlig;endienstmitarbeiter. Am besten denken Sie immer in Datenbankrollen. Das erleichtert Ihnen die Pflege der Rechtevergabe. <\/p>\n<p>Apropos erleichtern. Der wohl wichtigste Leitspruch in der Security lautet KISS &#8211; Keep It Simple, Stupid. Halten Sie Ihr Berechtigungskonzept so einfach und &uuml;bersichtlich wie m&ouml;glich. Je komplizierter es ist, desto eher wird im Falle eines fehlenden Zugriffsrechts die Rechtevergabe schnell mal erweitert. Hauptsache, der Anwender kann arbeiten. Die Nachjustierung im Sinne einer Korrektur der Zugriffsrechte erfolgt aus Zeitmangel eher selten. Wodurch die komplette Arbeit zur Rechtevergabe f&uuml;r die Katz ist.<\/p>\n<p>Die Zugriffsberechtigungen nach Role Based Access Control (RBAC) und Discretionary Access Control (DAC) beziehen sich auf die Datenbankobjekte. Zugriffsrechte auf einzelne Datens&auml;tze sind hier nicht enthalten. Diese Art der Rechtevergabe f&auml;llt unter den Begriff Mandatory Access Control (MAC). Hier basieren die Zugriffsrechte auf Regeln. Regeln, die beispielsweise den Vertriebsmitarbeitern den Zugriff auf die Kundendaten ihrer Zust&auml;ndigkeiten begrenzen. So kann ein Mitarbeiter nur seine Kunden sehen und nicht die seiner Kollegen. In SQL Server l&auml;sst sich ein derartiger Datenzugriff mittels Row Level Security (RLS) realisieren. <\/p>\n<h2>Der Werkzeugkasten<\/h2>\n<p>Das Berechtigungskonzept zur Datenbank <b>WaWi_SQL <\/b>soll dem Rollenprinzip entsprechen. Dazu fassen Sie einzelne Datenbankobjekte in Datenbankrollen zusammen und legen dort deren Zugriffsrechte fest. Hierbei orientieren Sie sich an den Aufgaben. Welche Datenbankobjekte werden zum Erf&uuml;llen der Aufgaben ben&ouml;tigt? Welche Rechte an den einzelnen Datenbankobjekten sind dazu erforderlich? Bildlich gesprochen nehmen Sie mit den Datenbankobjekten das ben&ouml;tigte Werkzeug und legen es in den Werkzeugkasten, in die Datenbankrolle. Welche Person letztendlich den Werkzeugkasten in die Hand nimmt und sich an die Aufgaben macht, ist f&uuml;r das Zusammenstellen des Werkzeugs irrelevant. <\/p>\n<p>Wie kommt der Werkzeugkasten zur Person? Durch die Zuordnung des Benutzers zur Datenbankrolle. Wobei der Benutzer hier eher einer Stellenbeschreibung &auml;hnelt. Wer diese Stelle besetzt, ergibt sich durch die Verkn&uuml;pfung des Benutzers zur Anmeldung, welche wiederum auf eine Windows-Gruppe verweist. Somit haben alle Mitglieder der Windows-Gruppe Zugriff auf den Werkzeugkasten, sprich auf die Ressourcen, die sie zur Bew&auml;ltigung ihrer Aufgaben ben&ouml;tigen. Nicht mehr und nicht weniger. Diese Einschr&auml;nkung wird als Principle Of Least Privilege (PoLP) bezeichnet. <\/p>\n<p>An dieser Stelle zeigt sich wieder einmal die St&auml;rke der mehrstufigen Sicherheitsarchitektur des SQL Servers. Die zur Erf&uuml;llung der Aufgaben erforderlichen Zugriffsrechte sind innerhalb der Datenbank definiert. W&auml;hrend die Anmeldungen der f&uuml;r die Aufgaben zust&auml;ndigen Personen au&szlig;erhalb der Datenbanken verwaltet werden. Verweisen diese Anmeldungen auf Windows-Gruppen, findet deren Definition und Verwaltung nicht einmal im SQL Server statt. Eine klare Trennung von Aufgaben und Personen.<\/p>\n<p>Eine solche Trennung bietet einige Vorteile, zum Beispiel im Fall einer Urlaubsvertretung. F&uuml;r die Rechtevergabe reicht es aus, dass der IT-Systemadministrator das Windows-Benutzerkonto der Urlaubsvertretung in die entsprechende Windows-Gruppe aufnimmt. Dadurch erh&auml;lt der Anwender alle erforderlichen Zugriffsrechte an den Ressourcen, die er zum Bew&auml;ltigen der vor&uuml;bergehenden Aufgaben ben&ouml;tigt, inklusive der Rechte f&uuml;r die Datenzugriffe in den Datenbanken. Ein Nachjustieren der Zugriffsrechte innerhalb der Datenbanken ist in der Regel nicht erforderlich.<\/p>\n<p>Der wohl wichtigste Aspekt bei der Zuordnung der Personen zu den Aufgaben ist das Prinzip der Funktionstrennung. Es gilt, Interessenskonflikte sowie die M&ouml;glichkeit krimineller Handlungen zu vermeiden. Dieses als Separation of Duties (SoD) oder Segregation of Duties bekannte Prinzip fordert, dass mehrere zusammenh&auml;ngende Teilaufgaben nicht von ein und derselben Person durchgef&uuml;hrt werden. So sollte ein und dieselbe Person nicht f&uuml;r die Umsetzung einer Aufgabe und gleichzeitig f&uuml;r deren Abschluss beziehungsweise Kontrolle verantwortlich sein. Zum Beispiel f&uuml;r das Anlegen von Lieferanten und das Erfassen von Bestellungen und Wareneing&auml;ngen.<\/p>\n<p>Nach dem Prinzip der Funktionstrennung w&auml;re es somit in der Beispielumgebung erforderlich, die Zugriffsrechte zu den Daten der Lieferanten von denen der Bestellungen und Wareneing&auml;nge zu trennen. Ohne diese Trennung sind die Mitarbeiter wie zuletzt Frau Bienlein in der Lage, einen fiktiven Lieferanten mitsamt Bestellungen anzulegen und den zugeh&ouml;rigen Wareneingang zu buchen. Vermeiden Sie unbedingt derartige &Uuml;berschneidungen von Zust&auml;ndigkeiten und somit den Missbrauch von Daten. Verteilen Sie die Zugriffsrechte in mehrere Datenbankrollen und ordnen Sie diesen unterschiedlichen Benutzer zu. <\/p>\n<p>Sie sehen, ein Berechtigungskonzept kann schnell vielschichtig werden. Hinzu kommt, dass in einer &uuml;ber Jahre gewachsenen Datenbank-Applikation die Definition der Datenbankrollen gar mal nicht so einfach ist. Sie sto&szlig;en mit hoher Wahrscheinlichkeit auf Datenbankobjekte, die f&uuml;r mehrere Aufgaben erforderlich sind. In diesen F&auml;llen sind Sie bei der Rechtevergabe bitte nicht zu gro&szlig;z&uuml;gig. Folgen Sie weiterhin dem Principle Of Least Privilege und erteilen Sie den Anwendern nur die Rechte, die sie f&uuml;r ihre t&auml;gliche Arbeit ben&ouml;tigen. Vergeben Sie zu viele Rechte, erm&ouml;glichen Sie unerlaubte Zugriffe und den Missbrauch der Daten. Vergeben Sie zu wenig Rechte, k&ouml;nnen die Mitarbeiter ihre Aufgaben nicht wahrnehmen. Die Folge ist eine Fehlermeldung und die L&ouml;sung zu diesem Fehler meist eine zu hohe Rechtevergabe wie die Zuordnung des Benutzers zur Datenbankrolle <b>db_owner <\/b>oder gar der Anmeldung zur Serverrolle <b>sysadmin<\/b>. <\/p>\n<h2>Bestandsaufnahme<\/h2>\n<p>Genug der Theorie und Fachbegriffe. Wie gehen Sie am besten an die Bestandsaufnahme heran? Insbesondere im Hinblick auf das Berechtigungskonzept einer Datenbank? Schauen Sie sich den Sinn und Zweck der Applikationen zur Datenbank an. Welche Aufgaben werden mit diesen Applikationen erf&uuml;llt? In der Beispielapplikation sind es die des Vertriebs, des Einkaufs, des Personalwesens und der Buchhaltung. Diese vier Abteilungen sind eine gute Basis f&uuml;r die Definition der Windows-Gruppen und der Datenbankrollen. <\/p>\n<p>Jeder Mitarbeiter dieser Abteilungen besitzt ein eigenes Windows-Benutzerkonto. Diese sind in Windows-Gruppen zusammengefasst. Frau Bienlein geh&ouml;rt zur Windows-Gruppe <b>Vertrieb<\/b>, Herr Stromberg zur Windows-Gruppe <b>Personal<\/b>, Herr Eberhofer zur Windows-Gruppe <b>Einkauf <\/b>und Frau Kling zur Windows-Gruppe <b>Buchhaltung<\/b>.<\/p>\n<p>Im SQL Server gibt es zu jeder dieser Windows-Gruppen eine Anmeldung. Die Anmeldungen sind der Datenbank <b>WaWi_SQL <\/b>zugeordnet, wodurch es dort zu jeder Anmeldung und somit indirekt zu jeder Windows-Gruppe einen Benutzer gibt. Das aktuelle Berechtigungskonzept basiert auf einer pauschalen Rechtevergabe per Systemdatenbankrollen und einer eigenen allgemeing&uuml;ltigen Datenbankrolle zur Ausf&uuml;hrung von gespeicherten Prozeduren. Das werden Sie nun &auml;ndern. Die Datenzugriffe sollen ausschlie&szlig;lich &uuml;ber eigene Datenbankrollen mit dedizierten Rechten erfolgen.<\/p>\n<p>Als ersten Schritt entfernen Sie die bestehende Rechtevergabe. Beginnen Sie mit dem Benutzer <b>Personal<\/b>. &Ouml;ffnen Sie das SQL Server Management Studio mit den Rechten eines Datenbankadministrators und navigieren Sie im Objekt-Explorer &uuml;ber den Eintrag <b>Datenbanken| WaWi_SQL|Sicherheit <\/b>zum Ordner <b>Benutzer<\/b>. Wie Sie in Bild 2. sehen, setzt sich der Benutzername aus der Bezeichnung der Dom&auml;ne und der Windows-Gruppe zusammen. Wobei in Ihrer Umgebung nat&uuml;rlich die Bezeichnung Ihrer Dom&auml;ne beziehungsweise Ihres Rechners enthalten ist. Der Einfachheit halber wird im folgenden Text auf die Benennung der Dom&auml;ne verzichtet und ein Benutzer lediglich mit dem Namen der Windows-Gruppe beschrieben.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2023_05\/Abb. 8.01.png\" alt=\"Die Benutzer in der Datenbank\" width=\"274,5588\" height=\"302,6899\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 1: Die Benutzer in der Datenbank<\/span><\/b><\/p>\n<p>Per Doppelklick auf den Benutzer <b>Personal <\/b>&ouml;ffnen Sie dessen Eigenschaften-Dialog. Auf der Seite <b>Mitgliedschaft <\/b>entfernen Sie die H&auml;kchen zu den Datenbankrollen <b>db_datareader<\/b>, <b>db_datawriter <\/b>und <b>edb_execute<\/b>. Mit einem Klick auf <b>OK <\/b>entziehen Sie dem Benutzer jegliche Zugriffsrechte.<\/p>\n<p>Dem Benutzer <b>Vertrieb <\/b>nehmen Sie die Rechte auf &auml;hnliche Weise. &Ouml;ffnen Sie dessen <b>Eigenschaften<\/b>-Dialog und beenden Sie wie eben die Mitgliedschaft des Benutzers zu den Datenbankrollen <b>db_datareader<\/b>, <b>db_datawriter <\/b>und <b>edb_execute<\/b>. Jetzt ist noch die gesonderte Rechtevergabe des Benutzers aufzul&ouml;sen. Dazu gehen Sie zur Seite <b>Sicherungsf&auml;hige Elemente<\/b>. Markieren Sie als erstes den Eintrag zur Tabelle <b>Bewerber <\/b>und entfernen Sie im unteren Bereich in der Spalte <b>Verweigern <\/b>die H&auml;kchen in den Zeilen <b>Aktualisieren<\/b>, <b>Ausw&auml;hlen<\/b>, <b>Einf&uuml;gen <\/b>und <b>L&ouml;schen <\/b>(siehe Bild 1). Wiederholen Sie den Vorgang f&uuml;r die Tabellen <b>Mitarbeiter <\/b>und <b>Stellen<\/b>. Danach markieren Sie die gespeicherte Prozedur <b>pSelectGeburtstagsliste <\/b>und deaktivieren die Rechtevergabe <b>Verweigern <\/b>zum Recht <b>Ausf&uuml;hren<\/b>. Best&auml;tigen Sie die &Auml;nderungen mit einem Klick auf <b>OK<\/b>. Der Benutzer <b>Vertrieb <\/b>besitzt nun ebenfalls keinerlei Zugriffsrechte mehr. Um die Benutzer <b>Einkauf <\/b>und <b>Buchhaltung <\/b>m&uuml;ssen Sie sich nicht k&uuml;mmern. Diese Benutzer haben aktuell noch keine Rechte. <\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2023_05\/Abb. 8.02.png\" alt=\"Entfernen des Rechts Verweigern\" width=\"674,559\" height=\"611,0135\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 2: Entfernen des Rechts Verweigern<\/span><\/b><\/p>\n<p>Nun geht es an das Erstellen der neuen Datenbankrollen. Den Datenbankrollen mit den Datenbankobjekten und Zugriffsrechten, die die Anwender zum Erf&uuml;llen ihrer Aufgaben ben&ouml;tigen. Den Inhalt dieser Datenbankrollen gilt es zu ermitteln.<\/p>\n<p>In der Beispielumgebung ist die Access-Applikation <b>WaWi v2 <\/b>die einzige Applikation zur Datenbank. Somit findet hier die Bestandsaufnahme f&uuml;r das Berechtigungskonzept statt. Nach einem Start der Beispielapplikation zeigt Ihnen das Start-Formular die Schaltfl&auml;chen mit den Funktionen f&uuml;r die Abteilungen <b>Vertrieb<\/b>, <b>Einkauf <\/b>und <b>Personal <\/b>(siehe Bild 3). Auf den ersten Blick l&auml;sst dies auf drei Datenbankrollen schlie&szlig;en. Aber ist es so einfach? Reichen drei Datenbankrollen f&uuml;r eine gute Funktionstrennung und somit zur Vermeidung eines Datenmissbrauchs? Sie kennen die Antwort bereits. Solange Mitarbeiter die Daten der Lieferanten und die der Bestellungen mitsamt den Wareneing&auml;ngen verwalten k&ouml;nnen, ist die M&ouml;glichkeit eines Datenmissbrauchs gegeben. Dieser l&auml;sst sich durch eine zus&auml;tzliche Aufteilung der Aufgaben in eine weitere Datenbankrolle vermeiden. <\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2023_05\/Abb. 8.03.png\" alt=\"Das Start-Formular der Beispielapplikation\" width=\"574,559\" height=\"223,5556\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 3: Das Start-Formular der Beispielapplikation<\/span><\/b><\/p>\n<p>Unabh&auml;ngig von den Missbrauchsm&ouml;glichkeiten steht noch eine Erweiterung der Zugriffsrechte an. Die Mitarbeiter haben sich bereit erkl&auml;rt, dass jeder im Unternehmen die Geburtstagsliste einsehen darf. Bisher ist dies nur den Mitarbeitern im Personal erlaubt. <\/p>\n<p>Dann werden es wohl mehr als drei Datenbankrollen. In den n&auml;chsten Schritten legen Sie die einzelnen Datenbankrollen an, bestimmen pro Datenbankrolle die Datenbankobjekte und definieren die erforderlichen Zugriffsrechte. Oder bei dem Beispiel von eben zu bleiben: Sie &ouml;ffnen den Werkzeugkasten einer Abteilung und legen das ben&ouml;tigte Werkzeug hinein. Doch vorher brauchen Sie den Werkzeugkasten.<\/p>\n<h2>Datenbankrolle Personalwesen<\/h2>\n<p>Ran ans Werk. Beginnen Sie mit der Datenbankrolle f&uuml;r die Personalabteilung. Dazu navigieren Sie im SQL Server Management Studio in der Datenbank <b>WaWi_SQL <\/b>&uuml;ber <b>Sicherheit|Rollen <\/b>zum Eintrag <b>Datenbankrollen<\/b>. Klicken Sie mit der rechten Maustaste auf den Eintrag und w&auml;hlen Sie den Befehl <b>Neue Datenbankrolle<\/b>.<\/p>\n<p>Im folgenden Dialog geben Sie als erstes die Bezeichnung <b>Personalwesen <\/b>in das Feld <b>Rollenname <\/b>ein. Achten Sie bei der Namensvergabe darauf, dass nicht bereits ein Benutzer mit dem Namen existiert. Datenbankrollen und Benutzer sind im SQL Server beides Prinzipale. Sie k&ouml;nnen einen Namen entweder f&uuml;r eine Datenbankrolle oder f&uuml;r einen Benutzer vergeben. Eine doppelte Vergabe wird mit einer Fehlermeldung quittiert. So gesehen k&ouml;nnten Sie ebenso den Rollennamen <b>Personal <\/b>verwenden. Dieser Name w&auml;re noch frei, da die Bezeichnungen der Benutzer den Dom&auml;nennamen enthalten. Allerdings wird der Einfachheit halber in diesem Text der Benutzer ohne Dom&auml;nenname beschrieben. Um nun Missverst&auml;ndnisse mit dieser verk&uuml;rzten Schreibweise und einer gleichlautenden Datenbankrolle zu vermeiden, erh&auml;lt die Datenbankrolle die Bezeichnung <b>Personalwesen<\/b>.<\/p>\n<p>Bei dem Besitzer der Datenbankrolle folgen Sie dem Grundsatz KISS. Halten Sie es einfach und geben Sie das K&uuml;rzel <b>dbo <\/b>ein. <b>dbo <\/b>steht f&uuml;r <b>database owner <\/b>und somit ist der Besitzer der Datenbankrolle identisch mit dem der Datenbank. Es ist ebenso m&ouml;glich, als Besitzer einen anderen Benutzer einzutragen. Dies kommt jedoch selbst in komplexeren Berechtigungskonzepten eher selten vor. <\/p>\n<p>Anschlie&szlig;end klicken Sie auf die Schaltfl&auml;che <b>Hinzuf&uuml;gen <\/b>und w&auml;hlen im folgenden Dialog &uuml;ber <b>Durchsuchen <\/b>den Benutzer <b>Personal <\/b>aus (siehe Bild 4). Ein Klick auf <b>OK <\/b>&uuml;bernimmt Ihre Auswahl in die Vorauswahl, ein weiterer Klick auf <b>OK <\/b>in den Dialog zur Datenbankrolle. Jetzt gerade eben haben Sie die Anwender definiert, die mit der Datenbankrolle oder um beim Vergleich zu bleiben mit dem Werkzeugkasten <b>Personalwesen <\/b>arbeiten d&uuml;rfen. <\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2023_05\/Abb. 8.04.png\" alt=\"Ausw&auml;hlen des Benutzers Personal\" width=\"649,559\" height=\"588,896\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 4: Ausw&auml;hlen des Benutzers Personal<\/span><\/b><\/p>\n<p>Fehlt noch das Werkzeug selbst, sprich die Datenbankobjekte mitsamt den Zugriffsrechten. Diese legen Sie in der Seite <b>Sicherungsf&auml;hige Elemente <\/b>fest. Doch welche Objekte ben&ouml;tigen die Mitarbeiter der Personalabteilung? Das zeigt die Bestandsaufnahme in der Beispielapplikation. Das Start-Formular enth&auml;lt auf der rechten Seite die Schaltfl&auml;chen f&uuml;r die Personalabteilung. Hier&uuml;ber lassen sich die Daten der Mitarbeiter und Bewerber sowie neuer Stellenausschreibungen verwalten. Die Datenpflege erfolgt &uuml;ber Access-Formulare. Diese wiederum sind an Datenquellen gebunden. Genau diese Datenquellen bieten die Grundlage zur Rechtevergabe. <\/p>\n<p>Beginnen Sie die Analyse mit den Mitarbeiterdaten. Dazu &ouml;ffnen Sie mit der Schaltfl&auml;che <b>Mitarbeiter <\/b>das Formular zur Mitarbeiterverwaltung. Im Formular wechseln Sie in die Entwurfsansicht und aktivieren das Eigenschaftenblatt. Die Datenquelle des Formulars finden Sie in der Eigenschaft <b>Datensatzquelle <\/b>der Registerkarte <b>Daten<\/b>. Dort sehen Sie den Eintrag <b>Mitarbeiter <\/b>(siehe Bild 5).Das kann nun eine lokale Tabelle, eine eingebundene Tabelle, eine Access-Abfrage oder eine Pass Through-Abfrage sein. Was sich genau dahinter verbirgt, verr&auml;t Ihnen der Navigationsbereich. Eine Suche im Navigationsbereich zeigt Ihnen den Eintrag <b>Mitarbeiter <\/b>in der Rubrik <b>Tabellen<\/b>.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2023_05\/Abb. 8.05.png\" alt=\"Die Datenquelle Mitarbeiter\" width=\"649,559\" height=\"553,5605\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 5: Die Datenquelle Mitarbeiter<\/span><\/b><\/p>\n<p>Anhand des Symbols ist es als eingebundene Tabelle zu erkennen (siehe Bild 6). Oder ist es eine eingebundene Sicht? Eine Antwort auf diese Frage werden Sie in Access nicht finden. Access behandelt eine eingebundene Sicht wie eine Tabelle. Diese Frage l&auml;sst sich nur im SQL Server Management Studio beantworten. Dort ist das Datenbankobjekt <b>Mitarbeiter <\/b>entweder bei den Tabellen oder bei den Sichten zu finden. Zum Gl&uuml;ck m&uuml;ssen Sie das Objekt nicht m&uuml;hsam in den Ordnern des Objekts-Explorers suchen. Der Dialog der Datenbankrolle bietet Ihnen eine Suche &uuml;ber mehrere Objekttypen.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2023_05\/Abb. 8.06.png\" alt=\"Die eingebundene Tabelle Mitarbeiter\" width=\"349,5589\" height=\"221,9043\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 6: Die eingebundene Tabelle Mitarbeiter<\/span><\/b><\/p>\n<p>Gehen Sie also zur&uuml;ck zum Dialog <b>Datenbankrolle &#8211; Neu <\/b>und wechseln Sie zur Registerkarte <b>Sicherungsf&auml;hige Elemente<\/b>. Hier klicken Sie auf <b>Suchen <\/b>und &uuml;bernehmen in dem folgenden Dialog die vorgew&auml;hlte Option <b>Bestimmte Objekte<\/b>. Es &ouml;ffnet sich ein weiterer Dialog. Ein Klick auf die Schaltfl&auml;che <b>Objekttypen <\/b>bringt Sie zur n&auml;chsten Auswahlm&ouml;glichkeit. Dort aktivieren Sie die beiden Eintr&auml;ge <b>Tabellen und Sichten <\/b>und best&auml;tigen diese mit <b>OK<\/b>. Zur&uuml;ck im Dialog <b>Objekte ausw&auml;hlen <\/b>geben Sie in das Eingabefeld den Wert <b>Mitarbeiter <\/b>ein und klicken auf <b>Namen &uuml;berpr&uuml;fen<\/b>. Sie erhalten einen weiteren Auswahldialog, der die Tabelle <b>Mitarbeiter <\/b>enth&auml;lt (siehe Bild 7). Aktivieren Sie den Eintrag und &uuml;bernehmen Sie die Auswahl mit <b>OK<\/b>. Den Dialog <b>Objekte ausw&auml;hlen <\/b>best&auml;tigen Sie ebenfalls mit <b>OK<\/b>.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2023_05\/Abb. 8.07.png\" alt=\"Ausw&auml;hlen der Tabelle Mitarbeiter\" width=\"499,5589\" height=\"334,692\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 7: Ausw&auml;hlen der Tabelle Mitarbeiter<\/span><\/b><\/p>\n<p>Zur&uuml;ck im Dialog zur Datenbankrolle sehen Sie nun die Tabelle <b>Mitarbeiter <\/b>in der oberen Auflistung. Die Zugriffsrechte zur Tabelle definieren Sie im unteren Bereich. Die Beispielapplikation erlaubt das Lesen, Anlegen, &Auml;ndern und L&ouml;schen der Mitarbeiterdaten. Zur Vergabe dieser Rechte aktivieren Sie als erstes in der Zeile <b>Ausw&auml;hlen <\/b>die Spalte <b>Erteilen<\/b>. Hier&uuml;ber wird das Recht <b>SELECT <\/b>zum Lesen der Daten dieser Tabelle vergeben. Auf die gleiche Weise aktivieren Sie mit einem Klick in <b>Erteilen <\/b>bei den Zeilen <b>Einf&uuml;gen <\/b>und <b>L&ouml;schen <\/b>die Rechte <b>INSERT <\/b>und <b>DELETE<\/b>. Seien Sie vorsichtig bei der Vergabe des Rechts zum &Auml;ndern der Daten. Dieses Recht wird gerne in der Zeile <b>&Auml;ndern <\/b>vergeben. Allerdings steht <b>&Auml;ndern <\/b>in diesem Fall f&uuml;r den Befehl <b>ALTER<\/b>, also das Recht, die Struktur der Tabelle zu &auml;ndern beziehungsweise diese zu l&ouml;schen. Zur Vergabe des Rechts <b>UPDATE <\/b>m&uuml;ssen Sie die Option <b>Erteilen <\/b>in der Zeile <b>Aktualisieren <\/b>aktivieren.<\/p>\n<p>So weit so gut. Das waren allerdings nur die Zugriffsrechte zu einer Schaltfl&auml;che der Beispielapplikation. Allein f&uuml;r die Personalabteilung gibt es dort noch drei weitere. Was im Vergleich zu vielen Access-Applikationen eher lachhaft ist. Zu jeder dieser Schaltfl&auml;chen ist nun die Datenquelle zu ermitteln und im Dialog zur Datenbankrolle die entsprechenden Zugriffsrechte zu vergeben. Bei dem Klickaufwand wird das mit dem Dialog eine m&uuml;hsame und zeitaufwendige Angelegenheit. <\/p>\n<p>Sie haben die letzten Beitr&auml;ge dieser Reihe gelesen? Dann wissen Sie was jetzt kommt. Klicken Sie im Dialog zur Datenbankrolle auf die Schaltfl&auml;che <b>Skript <\/b>(siehe Bild 8). Dieser Klick &ouml;ffnet im SQL Server Management Studio eine neue Registerkarte und f&uuml;llt diese mit T-SQL-Anweisungen.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2023_05\/Abb. 8.08.png\" alt=\"Erstellen des Rechte-Skripts\" width=\"474,5589\" height=\"139,643\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 8: Erstellen des Rechte-Skripts<\/span><\/b><\/p>\n<p>Mit diesen Anweisungen legen Sie sp&auml;ter die Datenbankrolle mitsamt den Mitgliedern und den eben vergebenen Rechten zur Tabelle <b>Mitarbeiter <\/b>an. Dieses Skript ist die Basis f&uuml;r die gesamte weitere Rechtevergabe.<\/p>\n<p>Daher speichern Sie zun&auml;chst das Skript unter <b>Rechtevergabe WaWi_SQL <\/b>und beenden dann den Dialog zur Datenbankrolle mit <b>Abbrechen<\/b>. Jetzt r&auml;umen Sie das Skript ein wenig auf. Fassen Sie die einzelnen Zeilen zur Rechtevergabe der Tabelle <b>Mitarbeiter <\/b>in einer Zeile zusammen und verschieben Sie die Aufnahme des Benutzers in die Datenbankrolle an das Ende des Skripts:<\/p>\n<pre>USE WaWi_SQL;\r\nGO\r\nCREATE ROLE Personalwesen AUTHORIZATION dbo;\r\nGRANT SELECT, INSERT, UPDATE, DELETE ON dbo.Mitarbeiter TO Personalwesen;\r\nALTER ROLE Personalwesen ADD MEMBER [BJSEMINARE\\Personal];\r\nGO<\/pre>\n<p>Der neue Aufbau des Skripts folgt im Gegensatz zum Dialog eher der anfangs beschriebenen Vorgehensweise. Die T-SQL-Anweisung <b>CREATE ROLE <\/b>erstellt die Datenbankrolle, also den Werkzeugkasten. Das Werkzeug selbst wird mit der Anweisung <b>GRANT <\/b>in den Werkzeugkasten gelegt, sprich die Tabelle <b>Mitarbeiter <\/b>mitsamt den Zugriffsrechen <b>SELECT<\/b>, <b>INSERT<\/b>, <b>UPDATE <\/b>und <b>DELETE <\/b>der Datenbankrolle zugeordnet. Zum Abschluss erlaubt die Anweisung <b>ALTER ROLE <\/b>einer oder mehreren Personen die Erlaubnis mit dem Werkzeugkasten zu arbeiten, in diesem Fall durch die Zuordnung des Benutzers <b>Personal <\/b>zur Datenbankrolle <b>Personalwesen<\/b>.<\/p>\n<p>Das Skript werden Sie nun nach und nach mit den T-SQL-Anweisungen f&uuml;r die weiteren Datenbankrollen und deren Zugriffsrechte erweitern. Am Ende erhalten Sie die gesamte Rechtevergabe der Datenbank in einer &uuml;bersichtlichen und lesbaren Form. Erg&auml;nzt mit aussagekr&auml;ftigen Kommentaren ergibt sich daraus gleichzeitig die Dokumentation Ihres Berechtigungskonzepts (siehe Bild 9). <\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2023_05\/Abb. 8.09.png\" alt=\"Die erste Version des Rechte-Skripts\" width=\"574,559\" height=\"428,1884\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 9: Die erste Version des Rechte-Skripts<\/span><\/b><\/p>\n<p>Nicht nur das. Jedes Mal, wenn Sie das Skript starten, werden die kompletten Zugriffsrechte der Datenbank erneut vergeben. So stellen Sie mit jeder Skriptausf&uuml;hrung sicher, dass die Vorgaben Ihres Berechtigungskonzepts erf&uuml;llt sind.<\/p>\n<p>Allerdings liefert die T-SQL-Anweisung <b>CREATE ROLE <\/b>derzeit noch einen Fehler, sollte die angegebene Datenbankrolle bereits existieren. Aus diesem Grund erg&auml;nzen Sie die T-SQL-Anweisung <b>CREATE ROLE <\/b>mit der folgenden <b>IF<\/b>-Anweisung. <\/p>\n<pre>IF (SELECT DATABASE_PRINCIPAL_ID(''Personalwesen'')) IS NULL\r\nBEGIN\r\n&nbsp;&nbsp;&nbsp;&nbsp;CREATE ROLE Personalwesen AUTHORIZATION dbo;\r\nEND<\/pre>\n<p>Jetzt wird die Datenbankrolle nur angelegt, wenn die Funktion <b>DATABASE_PRINCIPAL_ID <\/b>keinen Wert zur&uuml;ckgibt. Wobei diese Pr&uuml;fung etwas unscharf ist, liefert die Funktion doch die interne <b>ID <\/b>eines Prinzipals. Wie eben erw&auml;hnt, geh&ouml;ren hierzu neben den Datenbankrollen auch die Benutzer. Sollte es also einen Benutzer namens <b>Personalwesen <\/b>geben, ist das Ergebnis ungleich <b>NULL <\/b>und die Datenbankrolle wird nicht erstellt.<\/p>\n<p>Vielmehr erh&auml;lt der Benutzer die Rechte zur Tabelle <b>Mitarbeiter <\/b>und die Anweisung <b>ALTER ROLE <\/b>erzeugt einen Fehler. Da in diesem Beispiel viel Wert auf die korrekte Benennung der Benutzer und Datenbankrollen gelegt wurde, soll an dieser Stelle die einfache Pr&uuml;fung ausreichen. Schauen Sie mal in die Beispieldateien zu diesem Beitrag. Dort finden Sie in dem Skript <b>WaWi_SQL &#8211; Berechtigungskonzept <\/b>eine ausf&uuml;hrlichere Version. <\/p>\n<p>[<\/p>\n<p>Die Anweisungen <b>GRANT <\/b>und <b>ALTER <\/b>ROLE ben&ouml;tigen keine vorherigen Pr&uuml;fungen. Diese Aktionen lassen sich jederzeit wiederholen, selbst wenn die Rechte bereits erteilt und die Benutzer schon der Datenbankrolle zugeordnet sind. <\/p>\n<p>Zur&uuml;ck zu den Zugriffsrechten f&uuml;r die Personalabteilung. Die weiteren ben&ouml;tigten Datenbankobjekte ermitteln Sie wieder in der Beispielapplikation. Hier gibt es noch die Schaltfl&auml;chen <b>Bewerber <\/b>und <b>Stellen<\/b>. Den Weg zu den Datenquellen der zugeh&ouml;rigen Formulare kennen Sie bereits. Um es kurz zu machen: Dahinter verbergen sich die Tabellen <b>Bewerber <\/b>und <b>Stellen<\/b>. Die Mitarbeiter der Personalabteilung d&uuml;rfen den Inhalt dieser beiden Tabellen lesen und &auml;ndern. Um diese Zugriffsrechte zu vergeben, kopieren Sie im Skript die folgende Zeile:<\/p>\n<pre>GRANT SELECT, INSERT, UPDATE, DELETE ON dbo.Mitarbeiter TO Personalwesen;<\/pre>\n<p>F&uuml;gen Sie die Kopie unter der Originalzeile zweimal ein und &auml;ndern Sie in der ersten neuen Zeile den Tabellennamen in Bewerber und in der zweiten in Stellen. Aktuell besteht die Rechtevergabe innerhalb der Datenbankrolle aus diesen Zeilen:<\/p>\n<pre>GRANT SELECT, INSERT, UPDATE, DELETE ON dbo.Mitarbeiter TO Personalwesen;\r\nGRANT SELECT, INSERT, UPDATE, DELETE ON dbo.Bewerber TO Personalwesen;\r\nGRANT SELECT, INSERT, UPDATE, DELETE ON dbo.Stellen TO Personalwesen;<\/pre>\n<p>Ein Blick in die Beispielapplikation zeigt auf der Seite der Personalabteilung noch die Schaltfl&auml;che zur Geburtstagsliste. Wie bereits erw&auml;hnt, sollen die Daten dieser Liste in Zukunft f&uuml;r alle Mitarbeiter zug&auml;nglich sein. Nun k&ouml;nnten Sie das zugeh&ouml;rige Datenbankobjekt inklusive der Rechtevergabe einfach in die Datenbankrolle <b>Personalwesen <\/b>und sp&auml;ter in alle weiteren Datenbankrollen aufnehmen. Das aber w&auml;re zum einen un&uuml;bersichtlich und zum anderen erh&ouml;ht es den Aufwand zuk&uuml;nftiger &Auml;nderungen. Allgemeing&uuml;ltige Zugriffsrechte fassen Sie am besten in einer eigenen Datenbankrolle zusammen. Es gibt mehrere Ans&auml;tze f&uuml;r derartige Rechtevergaben &#8211; und eine gern &uuml;bersehene Sicherheitsl&uuml;cke. Doch dazu sp&auml;ter mehr.<\/p>\n<p>Abgesehen von den Rechten zur Geburtstagsliste enth&auml;lt das Skript alle Anweisungen zur Rechtevergabe f&uuml;r die Personalabteilung. Mit einem Klick auf <b>Ausf&uuml;hren <\/b>legen Sie die Datenbankrolle mitsamt den definierten Zugriffsrechten und dem Mitglied <b>Personal <\/b>an. <\/p>\n<p>Wie eben beschrieben, k&ouml;nnen Sie diese Rechtevergabe jederzeit wiederholen. Testen Sie es einmal und klicken Sie nochmal auf <b>Ausf&uuml;hren<\/b>. Die Zugriffsrechte werden erneut vergeben und das Skript fehlerfrei beendet.<\/p>\n<p>Das Ergebnis der neuen Rechtevergabe k&ouml;nnen Sie sich im Dialog zur Datenbankrolle anschauen. Doch vorher klicken Sie im Objekt-Explorer mit der rechten Maustaste auf den Eintrag <b>Datenbankrollen <\/b>und w&auml;hlen in dessen Kontextmen&uuml; den Eintrag <b>Aktualisieren<\/b>. Erst jetzt sehen Sie in dem Ordner ihre neue Datenbankrolle namens <b>Personalwesen<\/b>. Mit einem Doppelklick auf die Datenbankrolle &ouml;ffnen Sie den <b>Eigenschaften<\/b>-Dialog. Dieser zeigt Ihnen im unteren Bereich der Startseite die Mitglieder der Datenbankrolle, in diesem Fall den Benutzer <b>Personal<\/b>. In der Seite <b>Sicherungsf&auml;hige Elemente <\/b>sehen Sie die drei Tabellen und nach Markieren der einzelnen Tabellen im unteren Bereich die jeweils erteilten Zugriffsrechte. Soweit zur Kontrolle der Rechte. Sie k&ouml;nnen den Dialog wieder schlie&szlig;en.<\/p>\n<p>Im alten Berechtigungskonzept war der Benutzer <b>Personal <\/b>den drei Datenbankrollen <b>db_datareader<\/b>, <b>db_datawriter <\/b>und <b>edb_execute <\/b>zugeordnet. Nach der neuen Rechtevergabe d&uuml;rfte es nur noch die Zuordnung zur Datenbankrolle <b>Personalwesen <\/b>geben. Um dies zu pr&uuml;fen, &ouml;ffnen Sie den Dialog zum Benutzer <b>Personal <\/b>und wechseln dort zur Seite <b>Mitgliedschaft<\/b>. Voila, es ist einzig und allein die Datenbankrolle <b>Personalwesen <\/b>aktiviert (siehe Bild 10).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2023_05\/Abb. 8.10.png\" alt=\"Datenbankrollen des Benutzers Personal\" width=\"649,559\" height=\"588,3685\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 10: Datenbankrollen des Benutzers Personal<\/span><\/b><\/p>\n<p>Zur Kontrolle neu vergebener Zugriffsrechte sind die Dialoge durchaus brauchbar. Zum Erteilen beziehungsweise zur Analyse der Rechte ist das Skript jedoch weitaus besser geeignet. Bitte &auml;ndern Sie die Rechtevergabe nicht in den Dialogen. Eine einzige &Auml;nderung an dieser Stelle und ihr Skript verliert seinen Wert. &Auml;ndern beziehungsweise erweitern Sie die Zugriffsrechte nur &uuml;ber das Skript.<\/p>\n<p>Kontrolle ist gut, ein Test ist besser. Warum nicht direkt mit der Beispielapplikation <b>WaWi v2<\/b>? Starten Sie diese mit den Rechten des Anwenders <b>Stromberg<\/b>. Dazu klicken Sie mit der rechten Maustaste und gedr&uuml;ckter <b>Umschalt<\/b>-Taste auf das Access-Symbol in Ihrer Taskleiste und w&auml;hlen <b>Als anderer Benutzer ausf&uuml;hren<\/b>. In dem folgenden Dialog geben Sie die Anmeldedaten des Benutzerkontos <b>Stromberg <\/b>ein. Sollten Sie diese Anmeldung das erste Mal nutzen, best&auml;tigen Sie in Access die Hinweise zu den Lizenzbedingungen und den Datenschutzeinstelllungen. Anschlie&szlig;end &ouml;ffnen Sie die Access-Applikation <b>WaWi v2 <\/b>und aktivieren bei Bedarf die vertrauensw&uuml;rdigen Inhalte.<\/p>\n<p>Leider zeigt die Beispielapplikation anstelle des gew&uuml;nschten Start-Formulars eine Fehlermeldung (siehe Bild 11). Es fehlt das Recht <b>EXECUTE<\/b> f&uuml;r die gespeicherte Prozedur <b>pSelectAnmeldung<\/b>. Diese ermittelt beim Start der Applikation die Identit&auml;t des angemeldeten Anwenders und bindet anhand der gew&auml;hrten Zugriffsrechte nur die erlaubten Tabellen ein. Da war wohl die Bestandsaufnahme nicht vollst&auml;ndig. Es hilft alles nichts. Sie m&uuml;ssen Ihre Rechtevergabe erweitern. Dank des Skripts ist das aber kein gro&szlig;er Aufwand.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2023_05\/Abb. 8.11.png\" alt=\"Fehlermeldung beim Start der Applikation \" width=\"499,5589\" height=\"229,8855\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 11: Fehlermeldung beim Start der Applikation <\/span><\/b><\/p>\n<p>Wechseln Sie zur&uuml;ck zu Ihrem Skript im SQL Server Management Studio und gehen Sie zu dieser Zeile:<\/p>\n<pre>GRANT SELECT, INSERT, UPDATE, DELETE ON dbo.Stellen TO Personalwesen;<\/pre>\n<p>Direkt darunter f&uuml;gen Sie eine neue Zeile mit der folgenden T-SQL-Anweisung ein:<\/p>\n<pre>GRANT EXECUTE ON dbo.pSelectAnmeldung TO Personalwesen;<\/pre>\n<p>Speichern Sie das Skript und f&uuml;hren Sie es erneut aus. Die Zugriffsrechte wurden nun um das <b>EXECUTE<\/b>-Recht erweitert. Zum Beweis starten Sie die Beispielapplikation wieder mit den Rechten des Anwenders <b>Stromberg<\/b>. Dieses Mal erhalten Sie das Start-Formular mit den aktivierten Schaltfl&auml;chen zur Personalabteilung (siehe Bild 12). Mit einem Klick auf die jeweiligen Schaltfl&auml;chen testen Sie die aktuelle Rechtevergabe. Jede der Schaltfl&auml;chen zeigt Ihnen im zugeh&ouml;rigen Formular die gew&uuml;nschten Daten. Entsprechend der erteilten Zugriffsrechte k&ouml;nnen Sie die Daten lesen, &auml;ndern, erg&auml;nzen und l&ouml;schen. <\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2023_05\/Abb. 8.12.png\" alt=\"Start-Formular der Personalabteilung\" width=\"499,5589\" height=\"194,3738\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 12: Start-Formular der Personalabteilung<\/span><\/b><\/p>\n<p>Lediglich die Schaltfl&auml;che <b>Geburtstagsliste <\/b>liefert eine Fehlermeldung. Das war zu erwarten. Dieser Datenzugriff ist in der Datenbankrolle <b>Personalwesen <\/b>nicht definiert und somit dem Anwender <b>Stromberg <\/b>nicht gestattet. <\/p>\n<p>Wie sieht es mit den anderen Datenzugriffen aus? Bisher durften die Mitarbeiter der Personalabteilung auf alle Daten zugreifen. Dies soll durch die dedizierte Vergabe der Rechte nicht mehr m&ouml;glich sein. Um dies zu testen, erweitern Sie im Navigationsbereich die Rubrik <b>Tabellen<\/b>. Dort sehen Sie nur die Tabellen <b>Bewerber<\/b>, <b>Mitarbeiter <\/b>und <b>Stellen<\/b>.<\/p>\n<p>Das entspricht dem Berechtigungskonzept, denn die Tabellen mit den Daten des Vertriebs oder des Einkaufs wurden aufgrund fehlender Zugriffsrechte nicht eingebunden. Als n&auml;chsten Test &ouml;ffnen Sie die Pass Through-Abfrage <b>ptSelectAnsprechpartnerZuMitarbeiter<\/b>. Sie erhalten eine Fehlermeldung &#8211; und das ist auch gut so, entspricht es doch den Anforderungen Ihres Berechtigungskonzepts und nebenbei denen des Datenschutzes.<\/p>\n<h2>Datenbankrolle Vertriebswesen<\/h2>\n<p>Auf zum n&auml;chsten Werkzeugkasten, zur Datenbankrolle mit den Zugriffsrechten der Vertriebsmitarbeiter. Es beginnt erneut mit der Bestandsaufnahme in der Beispielapplikation. Dort gibt es f&uuml;r den Vertrieb die vier Schaltfl&auml;chen <b>Auftr&auml;ge<\/b>, <b>Artikel<\/b>, <b>Kunden <\/b>und <b>Ansprechpartner<\/b>. <\/p>\n<p>Die Datenquelle des Formulars <b>Auftr&auml;ge <\/b>ist schnell ermittelt. Es handelt sich um die gleichnamige eingebundene Tabelle. Bei den anderen Formularen ist es etwas aufwendiger. Das Formular <b>Artikel <\/b>enth&auml;lt in der Eigenschaft <b>Datensatzquelle <\/b>keinen Eintrag. Die Datenermittlung erfolgt in diesem Fall per ADO. Um sich den Datenzugriff genauer anzuschauen, aktivieren Sie in den Eigenschaften des Formulars die Registerkarte <b>Ereignis <\/b>und wechseln &uuml;ber die Eigenschaft <b>Beim &Ouml;ffnen <\/b>zur entsprechenden VBA-Routine.<\/p>\n<p>Hier sehen Sie, dass die Daten per ADO-Recordset aus der Tabelle <b>Artikel <\/b>der SQL Server-Datenbank gelesen werden. Der Cursortype <b>adOpenStatic <\/b>verr&auml;t Ihnen, dass Sie die Daten lesen und &auml;ndern sowie Datens&auml;tze l&ouml;schen und neue hinzuf&uuml;gen d&uuml;rfen (siehe Bild 13).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2023_05\/Abb. 8.13.png\" alt=\"Datenermittlung per ADO\" width=\"574,559\" height=\"329,2115\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 13: Datenermittlung per ADO<\/span><\/b><\/p>\n<p>Im Formular <b>Kunden <\/b>erfolgt die Datenermittlung ebenfalls im Ereignis <b>Beim &Ouml;ffnen<\/b>. Allerdings wird hier ein DAO-Recordset verwendet. Dieses basiert auf der eingebundenen Tabelle <b>Kunden <\/b>und stellt die Daten mittels der Option <b>dbOpenDynaset <\/b>f&uuml;r einen lesenden wie schreibenden Zugriff bereit. <\/p>\n<p>Das Formular <b>Ansprechpartner <\/b>hingegen enth&auml;lt wieder einen Eintrag in der Eigenschaft <b>Datensatzquelle<\/b>. Dieser verweist auf die Pass Through-Abfrage <b>ptSelectAnsprechpartnerZuMitarbeiter<\/b>. Ein Blick in die Pass Through-Abfrage zeigt den Aufruf der gespeicherten Prozedur <b>pSelectAnsprechpartnerZuMitarbeiter<\/b>.<\/p>\n<p>Somit ben&ouml;tigen Sie f&uuml;r den Werkzeugkasten die Tabellen <b>Auftr&auml;ge<\/b>, <b>Artikel <\/b>und <b>Kunden <\/b>mit den Rechten <b>SELECT<\/b>, <b>INSERT<\/b>, <b>UPDATE <\/b>und <b>DELETE <\/b>sowie die gespeicherte Prozedur <b>pSelectAnsprechpartnerZuMitarbeiter <\/b>mit dem Recht <b>EXECUTE<\/b>. Diese Zugriffsrechte erteilen Sie wieder per Skript. <\/p>\n<p>&Ouml;ffnen Sie Ihr Skript <b>Rechtevergabe WaWi_SQL <\/b>und kopieren Sie den kompletten Block zur Datenbankrolle <b>Personalwesen<\/b>. Danach gehen Sie ans Ende des Skripts, f&uuml;gen erst ein paar Leerzeilen und dann den Text der Zwischenablage ein. Nun passen Sie die neuen Zeilen an die Rechtevergabe des Vertriebs an. <\/p>\n<p>Es beginnt mit den Zeilen zum Anlegen der Datenbankrolle. Hier &auml;ndern Sie den Begriff <b>Personalwesen <\/b>in <b>Vertriebswesen<\/b>.<\/p>\n<pre>IF (SELECT DATABASE_PRINCIPAL_ID(''Vertriebswesen'')) IS NULL\r\nBEGIN\r\n     CREATE ROLE Vertriebswesen AUTHORIZATION dbo;\r\nEND<\/pre>\n<p>Die n&auml;chsten Zeilen legen die Zugriffsrechte an den Tabellen fest. Dort ersetzen Sie zum einen wieder den Begriff <b>Personalwesen <\/b>in <b>Vertriebswesen <\/b>und &uuml;berschreiben die Tabellen <b>Bewerber<\/b>, <b>Mitarbeiter <\/b>und <b>Stellen <\/b>mit <b>Artikel<\/b>, <b>Auftraege <\/b>und <b>Kunden<\/b>.<\/p>\n<pre>GRANT SELECT, INSERT, UPDATE, DELETE ON dbo.Artikel TO Vertriebswesen;\r\nGRANT SELECT, INSERT, UPDATE, DELETE ON dbo.Auftraege TO Vertriebswesen;\r\nGRANT SELECT, INSERT, UPDATE, DELETE ON dbo.Kunden TO Vertriebswesen; <\/pre>\n<p>Es folgt die Zeile zur Rechtevergabe der gespeicherten Prozedur <b>pSelectAnmeldung<\/b>, in der Sie wieder den Begriff <b>Personalwesen <\/b>mit <b>Vertriebswesen <\/b>&uuml;berschreiben. <\/p>\n<pre>GRANT EXECUTE ON dbo.pSelectAnmeldung TO Vertriebswesen;<\/pre>\n<p>Anschlie&szlig;end kopieren Sie die Zeile und f&uuml;gen sie direkt als n&auml;chste Zeile ein. Hier &auml;ndern Sie den Namen der gespeicherten Prozedur in <b>pSelectAnsprechpartnerZuMitarbeiter<\/b>.<\/p>\n<pre>GRANT EXECUTE ON dbo.pSelectAnsprechpartnerZuMitarbeiter TO Vertriebswesen;<\/pre>\n<p>Mit der neuen Zeile ist der Werkzeugkasten mit dem notwendigen Werkzeug bef&uuml;llt oder um es etwas technischer auszudr&uuml;cken, die Datenbankrolle <b>Vertriebswesen <\/b>enth&auml;lt die erforderlichen Datenbankobjekte mitsamt den Zugriffsrechten. <\/p>\n<p>Fehlt noch die Zuordnung der Datenbankrolle zum Benutzer. Den zugeh&ouml;rigen T-SQL-Befehl sehen Sie in der letzten Zeile. Wieder einmal tauschen Sie den Begriff <b>Personalwesen <\/b>mit <b>Vertriebswesen <\/b>und &auml;ndern dann den Benutzernamen in <b>Vertrieb<\/b>.<\/p>\n<pre>ALTER ROLE Vertriebswesen ADD MEMBER [BJSEMINARE\\Vertrieb];<\/pre>\n<p>Abschlie&szlig;end passen Sie die Dokumentation der neuen Zeilen an, speichern das Skript und f&uuml;hren es mit der Taste <b>F5 <\/b>aus. Das war es schon. Die Zugriffsrechte sind vergeben und gleichzeitig im Skript dokumentiert. <\/p>\n<p>Bei einer gr&ouml;&szlig;eren Access-Applikation wird der Analyseaufwand wie die Pflege des Skripts nat&uuml;rlich etwas aufwendiger sein. M&ouml;glicherweise sagt Ihnen die Vorgehensweise per Copy\/Paste nicht so zu und eventuell halten Sie es sogar f&uuml;r unprofessionell. Das mag sein und es ist ein durchaus berechtigter Einwand. Im Endeffekt aber liefert Ihnen das Skript eine bessere &Uuml;bersicht und gleichzeitig eine Dokumentation Ihrer Rechtevergabe. Ein immenser Vorteil, den Ihnen der Dialog zur Datenbankrolle nicht bietet. <\/p>\n<p>Den Dialog k&ouml;nnen Sie weiterhin gerne zur Kontrolle nutzen. Vorab m&uuml;ssen Sie wieder den Inhalt des Ordners <b>Datenbankrollen <\/b>neu laden. Dazu w&auml;hlen Sie in dessen Kontextmen&uuml; den Eintrag <b>Aktualisieren<\/b>. Danach &ouml;ffnen Sie den Dialog mit einem Doppelklick auf die Datenbankrolle <b>Vertriebswesen<\/b>. In der ersten Seite sehen Sie unter <b>Mitglieder <\/b>den Benutzer <b>Vertrieb <\/b>und auf der Seite <b>Sicherungsf&auml;hige Elemente <\/b>die drei Tabellen sowie die zwei gespeicherten Prozeduren mit den erteilten Rechten. <\/p>\n<p>Nach der erfolgreichen Kontrolle folgt der Test der neuen Zugriffsrechte mit der Beispielapplikation. Dieses Mal starten Sie die Access-Applikation mit den Rechten des Anwenders <b>Bienlein<\/b>. Im <b>Start<\/b>-Formular klicken Sie nacheinander auf die Schaltfl&auml;chen des Vertriebs. Entsprechend der Berechtigungsvergabe k&ouml;nnen Sie die Daten der Auftr&auml;ge, Artikel und Kunden lesen, &auml;ndern, l&ouml;schen und erg&auml;nzen.<\/p>\n<p>Die Daten der Ansprechpartner hingegen sind nur lesbar. Die Datenermittlung basiert auf einer Pass Through-Abfrage und dieses Access-Objekt liefert die Daten immer schreibgesch&uuml;tzt. Ein Klick auf die Schaltfl&auml;che <b>Geburtstagsliste <\/b>zeigt Ihnen korrekterweise wieder die Fehlermeldung mit dem Hinweis auf das nicht erteilte <b>EXECUTE<\/b>-Recht. Bleibt noch der Test der nicht gew&auml;hrten Zugriffsrechte. Dazu erweitern Sie den Navigationsbereich. Dort sehen Sie wie erwartet nur die Tabellen f&uuml;r den Vertrieb. Alles in allem ein zufriedenstellendes Testergebnis.<\/p>\n<h2>Datenbankrolle Bestellwesen<\/h2>\n<p>Mit den Mitarbeitern des Einkaufs gibt es neue Anwender f&uuml;r die Beispielapplikation. Diese arbeiten mit den Schaltfl&auml;chen <b>Bestellungen<\/b>, <b>Produkte<\/b>, <b>Lieferanten <\/b>und <b>Wareneingang<\/b>. Die Formulare hinter den ersten drei Schaltfl&auml;chen beinhalten als Datenherkunft die eingebundenen Tabellen <b>Bestellungen<\/b>, <b>Produkte <\/b>und <b>Lieferanten<\/b>. Etwas komplexer ist es beim Formular <b>Wareneingang<\/b>, welches auf der gleichnamigen Access-Abfrage basiert. Diese bereitet die Daten der eingebundenen Tabellen <b>Bestellungen <\/b>und <b>Lieferanten <\/b>auf. Letztendlich erfolgt der Datenzugriff im Einkauf also ausschlie&szlig;lich &uuml;ber eingebundene Tabellen.<\/p>\n<p>Die Zugriffsrechte vergeben Sie wie eben bei der Datenbankrolle <b>Vertriebswesen<\/b>. Wieder kopieren Sie den kompletten Block zur Datenbankrolle <b>Personalwesen <\/b>und f&uuml;gen diesen am Ende des Skripts ein. In den neuen Zeilen ersetzen Sie den Begriff <b>Personalwesen <\/b>mit <b>Bestellwesen<\/b>, passen die Tabellennamen an die Tabellen des Einkaufs an und &uuml;berschreiben den Benutzer <b>Personal <\/b>mit <b>Einkauf<\/b>. Als Ergebnis sollten die T-SQL-Anweisungen zur Datenbankrolle <b>Bestellwesen <\/b>wie folgt aussehen:<\/p>\n<pre>IF (SELECT DATABASE_PRINCIPAL_ID(''Bestellwesen'')) IS NULL\r\nBEGIN\r\n     CREATE ROLE Bestellwesen AUTHORIZATION dbo;\r\nEND\r\nGRANT SELECT, INSERT, UPDATE, DELETE ON dbo.Bestellungen TO Bestellwesen;\r\nGRANT SELECT, INSERT, UPDATE, DELETE ON dbo.Lieferanten TO Bestellwesen;\r\nGRANT SELECT, INSERT, UPDATE, DELETE ON dbo.Produkte TO Bestellwesen;\r\nGRANT EXECUTE ON dbo.pSelectAnmeldung TO Bestellwesen;\r\nALTER ROLE Bestellwesen ADD MEMBER [BJSEMINARE\\Einkauf];<\/pre>\n<p>Nachdem Sie die Zeilen zur neuen Rechtevergabe ausf&uuml;hrlich dokumentiert haben, speichern Sie das Skript und f&uuml;hren es per <b>F5 <\/b>aus. Anschlie&szlig;end aktualisieren Sie in gewohnter Weise den Ordner <b>Datenbankrollen <\/b>und &ouml;ffnen den Eigenschaften-Dialog zur neuen Datenbankrolle <b>Bestellwesen<\/b>. Hier sehen Sie den zugeordneten Benutzer <b>Einkauf <\/b>und in der Seite <b>Sicherungsf&auml;hige Elemente <\/b>die Tabellen und die gespeicherte Prozedur mit den eben erteilten Zugriffsrechten (siehe Bild 14).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2023_05\/Abb. 8.14.png\" alt=\"Rechte der Datenbankrolle Bestellwesen\" width=\"649,559\" height=\"588,3685\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 14: Rechte der Datenbankrolle Bestellwesen<\/span><\/b><\/p>\n<p>Zum Test der erweiterten Rechtevergabe starten Sie die Beispielapplikation mit den Rechten des Anwenders <b>Eberhofer<\/b>. Jetzt bietet Ihnen das <b>Start<\/b>-Formular die Schaltfl&auml;chen <b>Bestellungen<\/b>, <b>Produkte<\/b>, <b>Lieferanten<\/b>, <b>Wareneingang <\/b>und <b>Geburtstagsliste<\/b>. Jede dieser Schaltfl&auml;chen erlaubt Ihnen in den zugeh&ouml;rigen Formularen den lesenden und schreibenden Datenzugriff. Bis auf die Schaltfl&auml;che <b>Geburtstagsliste<\/b>, die Ihnen die bereits erwartbare Fehlermeldung liefert. Die nicht gew&auml;hrten Rechte testen Sie in diesem Fall wieder mit der Pass Through-Abfrage <b>ptSelectAnsprechpartnerZuMitarbeiter<\/b>. Der Zugriff auf die Daten der Ansprechpartner der Kunden ist den Mitarbeitern im Einkauf nicht gestattet, weshalb Sie berechtigterweise eine Fehlermeldung erhalten.<\/p>\n<p>Das sieht doch gut aus. Aber handelt es sich um eine wirklich gute Rechtevergabe? Entspricht diese den Vorgaben der Funktionstrennung oder bietet das aktuelle Berechtigungskonzept etwa noch die M&ouml;glichkeit eines Datenmissbrauchs? Denken Sie an den Fall Bienlein. Durch die neuen Zugriffsrechte ist es Frau Bienlein zwar nicht mehr m&ouml;glich, auf die Daten der Lieferanten und auf die der Wareneing&auml;nge zuzugreifen. Doch was ist mit den Mitarbeitern im Einkauf? Denen steht nichts im Wege, fiktive Lieferanten anzulegen und fingierte Bestellungen inklusive Wareneing&auml;nge zu erfassen. Um dies zu vermeiden, sollten Sie die Rechtevergabe nochmals &uuml;berdenken und dabei die Zust&auml;ndigkeiten genauer ber&uuml;cksichtigen.<\/p>\n<h2>Funktionstrennung<\/h2>\n<p>Nat&uuml;rlich kann man &uuml;ber die Zust&auml;ndigkeiten des Einkaufs diskutieren. Betriebswirtschaftlich betrachtet geh&ouml;rt das Buchen von Wareneing&auml;ngen nicht unbedingt zu den Aufgaben des Einkaufs. Nur gibt es in dem kleinen Beispielunternehmen einfach nicht gen&uuml;gend Personal und so &uuml;bernimmt der Einkauf halt eben auch die Buchung der Wareneing&auml;nge. Die Verwaltung der Lieferanten liegt jedoch in der Obhut der Buchhaltung. Nur dort werden neue Lieferanten erfasst und freigegeben sowie bei Bedarf die Daten der bestehenden ge&auml;ndert. F&uuml;r die Mitarbeiter im Einkauf reicht der lesende Zugriff auf die Lieferantendaten vollkommen aus. Aus diesem Grund sind die Funktionen zum Buchen der Wareneing&auml;nge von denen zur Verwaltung der Lieferanten zu trennen.<\/p>\n<p>Diese neue Betrachtung erfordert eine Anpassung der bisherigen Rechtevergabe. Der Datenbankrolle <b>Bestellwesen <\/b>sind f&uuml;r die Tabelle <b>Lieferanten <\/b>die Rechte <b>INSERT<\/b>, <b>UPDATE <\/b>und <b>DELETE <\/b>zu entziehen. Dazu gehen Sie im Skript zur Rechtevergabe der Tabelle Lieferanten und kopieren die folgende Zeile:<\/p>\n<pre>GRANT SELECT, INSERT, UPDATE, DELETE ON dbo.Lieferanten TO Bestellwesen;<\/pre>\n<p>Die Kopie f&uuml;gen Sie direkt unterhalb der Zeile ein. In der Ursprungszeile l&ouml;schen Sie die Eintr&auml;ge <b>INSERT<\/b>, <b>UPDATE <\/b>und <b>DELETE<\/b>. &Uuml;brig bleibt in dieser <b>GRANT<\/b>-Anweisung nur das Recht <b>SELECT<\/b>. <\/p>\n<pre>GRANT SELECT ON dbo.Lieferanten TO Bestellwesen;<\/pre>\n<p>Mit der neu eingef&uuml;gten Zeile entziehen Sie die bereits erteilten Rechte <b>INSERT<\/b>, <b>UPDATE <\/b>und <b>DELETE<\/b>. &Auml;ndern Sie dazu die T-SQL-Anweisung <b>GRANT <\/b>in <b>REVOKE<\/b>. Anschlie&szlig;end entfernen Sie in der Auflistung den Eintrag <b>SELECT<\/b>:<\/p>\n<pre>REVOKE INSERT, UPDATE, DELETE ON dbo.Lieferanten TO Bestellwesen;<\/pre>\n<p>Warum nun zwei SQL-Anweisungen f&uuml;r eine Rechtevergabe? Letztendlich braucht es doch nur die <b>GRANT<\/b>-Anweisung f&uuml;r das <b>SELECT <\/b>zur Tabelle <b>Lieferanten<\/b>. Die bereits erteilten Rechte <b>INSERT<\/b>, <b>UPDATE <\/b>und <b>DELETE <\/b>k&ouml;nnte man doch einmalig per Dialog entziehen. Im Grunde genommen w&auml;re das auch vollkommen ausreichend. <\/p>\n<p>Auf der anderen Seite zeigen die beiden Zeilen wieder einmal die Vorteile des Skripts. Mit der <b>REVOKE<\/b>-Anweisung stellen Sie sicher, dass die neu erkannte Anforderung an die Rechtevergabe mit jeder Ausf&uuml;hrung des Skripts umgesetzt wird. Angenommen, ein Kollege erteilt per Dialog der Datenbankrolle <b>Bestellwesen <\/b>die Rechte <b>INSERT<\/b>, <b>UPDATE <\/b>und <b>DELETE <\/b>an der Tabelle <b>Lieferanten<\/b>. Sp&auml;testens mit der n&auml;chsten Ausf&uuml;hrung des Skripts wird diese fehlerhafte Rechtevergabe gem&auml;&szlig; den Vorgaben korrigiert. <b>REVOKE <\/b>l&auml;sst sich wie <b>GRANT <\/b>mehrmals ausf&uuml;hren und das unabh&auml;ngig davon, ob das Recht erteilt ist oder nicht. <\/p>\n<p>Erg&auml;nzen Sie die beiden Zeilen mit einer aussagekr&auml;ftigen Dokumentation. Je besser Sie den Grund der ge&auml;nderten Rechtevergabe beschreiben, umso einfacher k&ouml;nnen Sie die &Auml;nderung zu einem sp&auml;teren Zeitpunkt nachvollziehen. <\/p>\n<p>Mit dem aktuellen Stand des Berechtigungskonzepts darf keiner der Anwender die Daten der Lieferanten verwalten. Dazu ist eine weitere Datenbankrolle mit entsprechenden Rechten f&uuml;r die Mitarbeiter der Buchhaltung erforderlich. Das ist nun nichts Neues mehr f&uuml;r Sie. Um die Sache abzuk&uuml;rzen, kopieren Sie den Inhalt des Beispielskripts <b>Rechtevergabe Buchhaltung <\/b>und &uuml;bernehmen Sie diesen an das Ende Ihres Skripts. Sie m&uuml;ssen lediglich in der letzten Zeile die Dom&auml;ne <b>BJSEMINARE <\/b>mit dem Namen Ihrer Dom&auml;ne &uuml;berschreiben. Mit den neuen Zeilen ist das Skript zur Rechtevergabe bereit zur Ausf&uuml;hrung. Speichern Sie das Skript und f&uuml;hren Sie es wieder einmal mit <b>F5 <\/b>aus. <\/p>\n<p>[50097]<\/p>\n<p>Danach starten Sie die Beispielapplikation mit der Anmeldung <b>Eberhofer<\/b> und klicken im <b>Start<\/b>-Formular auf die Schaltfl&auml;che <b>Lieferanten<\/b>. Zum Test der neuen Zugriffsrechte &auml;ndern Sie einen beliebigen Wert und wechseln zum n&auml;chsten Datensatz. Als Anwender <b>Eberhofer <\/b>d&uuml;rfen Sie die Daten der Lieferanten nur noch lesen, weshalb Ihre Daten&auml;nderung mit der Fehlermeldung aus Bild 15 quittiert wird. <\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2023_05\/Abb. 8.15.png\" alt=\"Fehlende UPDATE-Rechte f&uuml;r den Einkauf\" width=\"700\" height=\"88,69109\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 15: Fehlende UPDATE-Rechte f&uuml;r den Einkauf<\/span><\/b><\/p>\n<p>Wareneing&auml;nge d&uuml;rfen Sie weiterhin buchen. Die Daten des Formulars <b>Wareneingang <\/b>liefert die gleichnamige Access-Abfrage. Diese enth&auml;lt neben der Tabelle <b>Lieferanten <\/b>noch die Tabelle <b>Bestellungen <\/b>mit den Informationen zu den Wareneing&auml;ngen. Obwohl Sie die Daten der Bestellungen &uuml;ber die Access-Abfrage &auml;ndern k&ouml;nnen, gilt dies nicht f&uuml;r die Daten der Lieferanten. Versuchen Sie mal im Formular <b>Wareneing&auml;nge <\/b>einen der Firmennamen zu &auml;ndern. Sie erhalten wieder die gleiche Fehlermeldung.<\/p>\n<p>[51156]<\/p>\n<p>Der schreibende Zugriff auf die Lieferantendaten ist den Mitarbeitern der Buchhaltung vorbehalten. Das k&ouml;nnen Sie ebenfalls testen. Starten Sie dazu die Beispielapplikation als Anwender <b>Kling<\/b>. Im <b>Start<\/b>-Formular sind jetzt nur die Schaltfl&auml;chen <b>Lieferanten <\/b>und <b>Geburtstagsliste <\/b>aktiv. Ein Klick auf die Schaltfl&auml;che <b>Lieferanten <\/b>&ouml;ffnet das zugeh&ouml;rige Formular. Dort &auml;ndern Sie die Telefonnummer eines Lieferanten Ihrer Wahl und wechseln den Datensatz. Die Daten&auml;nderung wird ohne Weiteres &uuml;bernommen. Schlie&szlig;lich d&uuml;rfen Sie als Mitglied der Windows-Gruppe <b>Buchhaltung <\/b>die Daten der Lieferanten lesen und &auml;ndern. <\/p>\n<p>[51644]<\/p>\n<h2>Die Datenbankrolle public<\/h2>\n<p>[52255]<\/p>\n<p>Das Berechtigungskonzept ist fast vollst&auml;ndig. Es fehlt noch die Freigabe der Geburtstagsliste. Ein Blick in die Beispielapplikation zeigt als Datengrundlage des Formulars <b>Geburtstagsliste <\/b>eine Pass Through-Abfrage mit dem Aufruf der gespeicherten Prozedur <b>pSelectGeburtstagsliste<\/b>. Da alle Anwender die Daten dieser Liste sehen d&uuml;rfen, ist jedem Benutzer der Datenbank das Ausf&uuml;hren dieser gespeicherten Prozedur zu erlauben. Nun k&ouml;nnten Sie wie bei der gespeicherten Prozedur <b>pSelectAnmeldung <\/b>das entsprechende <b>EXECUTE<\/b>-Recht in jede Ihrer Datenbankrollen aufnehmen. Viel besser ist jedoch die bereits erw&auml;hnte zentrale Rechtevergabe, sprich ein <b>EXECUTE<\/b>-Recht zu dieser gespeicherten Prozedur in einer Datenbankrolle. <\/p>\n<p>[52281]<\/p>\n<p>SQL Server bietet zur Definition solch allgemeing&uuml;ltiger Rechte die Systemdatenbankrolle <b>public <\/b>an. In dieser Datenbankrolle ist jeder Benutzer standardm&auml;&szlig;ig Mitglied. Diese Mitgliedschaft ist fix und l&auml;sst sich nicht aufheben. Somit gelten die in der Datenbankrolle <b>public <\/b>erteilten Zugriffsrechte f&uuml;r alle Benutzer der Datenbank. Das bietet sich doch f&uuml;r die <b>EXECUTE<\/b>-Rechte der beiden gespeicherten Prozeduren <b>pSelectGeburtstagsliste <\/b>und <b>pSelectAnmeldung <\/b>geradezu an.<\/p>\n<p>[53000]<\/p>\n<p>Zur Rechtevergabe wechseln Sie im Objekt-Explorer zur Datenbankrolle <b>public <\/b>der Datenbank <b>WaWi_SQL <\/b>und &ouml;ffnen per Doppelklick den zugeh&ouml;rigen Dialog. Die Seite <b>Allgemein <\/b>zeigt im Bereich <b>Mitglieder <\/b>dieser Rolle keine Benutzer. Lassen Sie sich davon nicht verwirren. Wie gesagt ist jeder Benutzer Mitglied dieser Datenbankrolle. Microsoft scheint eine Auflistung aller Benutzer an dieser Stelle f&uuml;r &uuml;berfl&uuml;ssig zu halten, obwohl es durchaus aussagekr&auml;ftiger w&auml;re. Da Sie sich um die Verwaltung der Mitglieder keine Gedanken machen m&uuml;ssen, gehen Sie direkt zur Seite <b>Sicherungsf&auml;hige Elemente<\/b>. Hier sehen Sie bereits erteilte <b>SELECT<\/b>-Rechte an einigen Systemobjekten. Diese erg&auml;nzen Sie nun mit den Rechten zur gespeicherten Prozedur <b>pSelectGeburtstagsliste<\/b>. Dazu klicken Sie auf <b>Suchen<\/b>, w&auml;hlen als Auswahlkriterium <b>Alle Objekte des Typs <\/b>und aktivieren im Dialog <b>Objekttypen ausw&auml;hlen <\/b>den Eintrag <b>Gespeicherte Prozeduren<\/b>. Nach Best&auml;tigen der Auswahl mit <b>OK <\/b>sehen Sie im Dialog zur Datenbankrolle im oberen Bereich alle gespeicherten Prozeduren.<\/p>\n<p>[53470]<\/p>\n<p>Dort markieren Sie die gespeicherte Prozedur <b>pSelectGeburtstagsliste <\/b>und aktivieren im unteren Bereich in der Zeile <b>Ausf&uuml;hren <\/b>die Option <b>Erteilen<\/b>. Mit einem Klick auf <b>OK <\/b>speichern Sie die Rechtevergabe. Sie haben richtig gelesen. In diesem Fall nehmen Sie die Rechtevergabe nicht in das Skript auf, sondern best&auml;tigen den Dialog mit <b>OK<\/b>. Warum in diesem Fall per Dialog? Weil es nicht bei dieser Art der Rechtevergabe bleiben wird. Das ist auch der Grund, warum Sie die Zugriffsrechte f&uuml;r die gespeicherte Prozedur <b>pSelectAnmeldedaten <\/b>erst einmal ignorieren.<\/p>\n<p>[54512]<\/p>\n<p>F&uuml;r den Test der neuen Zugriffsrechte starten Sie die Beispielapplikation als Anwender <b>Eberhofer<\/b>. Nach einem Klick auf die Schaltfl&auml;che <b>Geburtstagsliste <\/b>sehen Sie die Geburtstage aller Mitarbeiter. Weitere Tests mit den Anmeldungen <b>Bienlein<\/b>, <b>Stromberg <\/b>und <b>Kling <\/b>liefern Ihnen das gleiche Ergebnis.<\/p>\n<p>[55070]<\/p>\n<p>Alle diese Anwender geh&ouml;ren zu Windows-Gruppen, zu denen im SQL Server entsprechende Anmeldungen existieren. Zu jeder dieser Anmeldungen gibt es in der Datenbank <b>WaWi_SQL <\/b>einen Benutzer. Alle Benutzer der Datenbank sind standardm&auml;&szlig;ig der Datenbankrolle <b>public <\/b>zugeordnet und diese besitzt das Recht <b>EXECUTE <\/b>f&uuml;r die gespeicherte Prozedur <b>pSelectGeburtstagsliste<\/b>. <\/p>\n<p>[55368]<\/p>\n<p>Wohlgemerkt, alle Benutzer der Datenbank! Das gilt genauso f&uuml;r G&auml;ste. SQL Server bietet f&uuml;r Gastzugriffe den Benutzer <b>guest <\/b>(siehe Bild 16). Dieser Benutzer erlaubt jeder Anmeldung im SQL Server den Zutritt zur Datenbank. Eine explizite Zuordnung der Anmeldung zur Datenbank ist in diesem Fall nicht erforderlich. Innerhalb der Datenbank darf ein Gast mit den Rechten der Datenbankrolle <b>public <\/b>auf die Daten zugreifen. <\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2023_05\/Abb. 8.16.png\" alt=\"Das Gast-Konto der Datenbank\" width=\"249,5589\" height=\"197,0201\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 16: Das Gast-Konto der Datenbank<\/span><\/b><\/p>\n<p>Sie sind bestimmt ein guter Gastgeber und freuen sich &uuml;ber G&auml;ste. Dennoch lassen Sie nicht jeden einfach ungefragt in Ihre Wohnung. Wie im echten Leben sollte auch beim SQL Server der Zugang eines Gasts erlaubt sein. Daher ist das Gastkonto einer Datenbank standardm&auml;&szlig;ig deaktiviert. Sie m&uuml;ssen den Gastzugang explizit freigeben. Doch das ist nicht so einfach. Weder der Dialog zum Benutzer <b>guest<\/b> noch dessen Kontextmen&uuml; bietet hierzu eine M&ouml;glichkeit. Der Benutzer <b>guest <\/b>l&auml;sst sich nur per T-SQL aktivieren. Dazu &ouml;ffnen Sie &uuml;ber das Kontextmen&uuml; der Datenbank <b>WaWi_SQL <\/b>eine neue Abfrage und f&uuml;hren diese T-SQL-Anweisung aus:<\/p>\n<p>[56151]<\/p>\n<pre>GRANT CONNECT TO guest;<\/pre>\n<p>[56776]<\/p>\n<p>Anschlie&szlig;end w&auml;hlen Sie im Kontextmen&uuml; des Ordners <b>Benutzer <\/b>den Eintrag <b>Aktualisieren<\/b>. Worauf Sie den Eintrag <b>guest <\/b>nun als aktiven Benutzer sehen. <\/p>\n<p>[56800]<\/p>\n<p>F&uuml;r einen Test des Gastzugangs legen Sie mit der folgenden T-SQL-Anweisung die Anmeldung <b>TestPublic <\/b>an. <\/p>\n<p>[56949]<\/p>\n<pre>CREATE LOGIN TestPublic WITH PASSWORD=N''SicherIn2023!''; <\/pre>\n<p>[57054]<\/p>\n<p>Die <b>CREATE LOGIN<\/b>-Anweisung erstellt lediglich die Anmeldung. Es findet keine Zuordnung zur Datenbank <b>WaWi_SQL <\/b>statt, weshalb es dort auch keinen entsprechenden Benutzer zur Anmeldung gibt. Dennoch k&ouml;nnen Sie mit der Anmeldung <b>TestPublic <\/b>auf die Daten der Geburtstagsliste zugreifen. <\/p>\n<p>[57111]<\/p>\n<p>Diesen Datenzugriff testen Sie direkt im SQL Server Management Studio. Melden Sie sich &uuml;ber die Schaltfl&auml;che <b>Verbinden <\/b>mit der Anmeldung <b>TestPublic <\/b>an. Dabei verwenden Sie die Authentifizierungsmethode SQL Server-Authentifizierung (siehe Bild 17). <\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2023_05\/Abb. 8.17.png\" alt=\"Neue Verbindung mit der Anmeldung TestPublic\" width=\"649,559\" height=\"375,8022\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 17: Neue Verbindung mit der Anmeldung TestPublic<\/span><\/b><\/p>\n<p>Nach Best&auml;tigen des Anmeldedialogs sehen Sie im Objekt-Explorer f&uuml;r die neue Verbindung einen eigenen Zweig (siehe Bild 18). Erweitern Sie dort den Eintrag <b>Datenbanken <\/b>und w&auml;hlen Sie im Kontextmen&uuml; der Datenbank <b>WaWi_SQL <\/b>den Eintrag <b>Neue Abfrage<\/b>. Sie erhalten eine neue Registerkarte basierend auf der Anmeldung <b>TestPublic<\/b>. Hier f&uuml;hren Sie nun die gespeicherte Prozedur <b>pSelectGeburtstagsliste <\/b>aus:<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2023_05\/Abb. 8.18.png\" alt=\"Zugriff mit der Anmeldung TestPublic\" width=\"349,5589\" height=\"477,582\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 18: Zugriff mit der Anmeldung TestPublic<\/span><\/b><\/p>\n<pre>EXEC dbo.pSelectGeburtstagsliste;<\/pre>\n<p>[58043]<\/p>\n<p>Als Ergebnis sehen Sie die Geburtstage der Mitarbeiter (siehe Bild 19). Und das ohne einen Benutzer zur Anmeldung <b>TestPublic<\/b>. Der Datenzugriff erfolgt durch den aktiven Benutzer <b>guest<\/b>. Diesem ist durch die Rechtevergabe der Datenbankrolle <b>public <\/b>das Ausf&uuml;hren der gespeicherten Prozedur erlaubt. <\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2023_05\/Abb. 8.19.png\" alt=\"Datenzugriff &uuml;ber Datenbankrolle public\" width=\"649,559\" height=\"389,1501\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 19: Datenzugriff &uuml;ber Datenbankrolle public<\/span><\/b><\/p>\n<p>Zur Erinnerung: Nicht nur die Anmeldung <b>TestPublic <\/b>besitzt diese Zugriffsrechte, sondern jede Anmeldung in Ihrem SQL Server. Das allein ist schon un&uuml;bersichtlich genug. Und es wird noch undurchsichtiger, basieren die Anmeldungen in der Regel doch auf Windows-Gruppen. Wie hei&szlig;t es so sch&ouml;n? Rate mal, wer zum Essen kommt. Sie k&ouml;nnen sich auf eine Schar G&auml;ste einrichten. <\/p>\n<p>[58374]<\/p>\n<p>Erkennen Sie die Dimension dieser Sicherheitsl&uuml;cke? Sie als Datenbankadministrator haben keinen &Uuml;berblick, wer mit den Rechten der Datenbankrolle <b>public<\/b> auf die Daten der Datenbank zugreift. <\/p>\n<p>[58746]<\/p>\n<p>Sie stufen einen allgemeinen Zugang auf eine Geburtstagsliste als vertretbar ein? Das diskutieren Sie mal mit Ihrem Datenschutzbeauftragten. Jeder Anwender mit einer direkten oder indirekten Anmeldung kann diese Daten lesen. Zum Beispiel externe Mitarbeiter, die in einer weiteren Datenbank ihre Arbeitszeiten erfassen. Grunds&auml;tzlich w&auml;ren diese ebenso in der Lage, die Geburtstage der Mitarbeiter zu sehen. Das entspr&auml;che nicht den Anforderungen des Datenschutzes und m&ouml;glicherweise auch nicht dem Wunsch des einen oder anderen Mitarbeiters.<\/p>\n<p>[58938]<\/p>\n<p>Allein durch die Leserechte der Datenbankrolle <b>public <\/b>ist die Vertraulichkeit der Daten nicht mehr gegeben. Erh&auml;lt die Datenbankrolle zudem noch Schreibrechte, l&auml;sst sich auch die Integrit&auml;t der Daten nicht mehr gew&auml;hrleisten. Dies soll ein weiteres Beispiel verdeutlichen.<\/p>\n<p>[59481]<\/p>\n<p>Der Einfachheit halber wurde der Benutzer <b>guest <\/b>in der Datenbank zur Zeiterfassung der externen Mitarbeiter aktiviert. In dieser Datenbank besitzt die Datenbankrolle <b>public <\/b>die vollen Lese- und Schreibrechte zu den Tabellen mit den Arbeitszeiten. Durch diese Rechtevergabe kann jeder Anwender mit einer g&uuml;ltigen Anmeldung im SQL Server, ob nun direkt &uuml;ber sein Windows-Benutzerkonto oder indirekt &uuml;ber eine oder mehrere Windows-Gruppen, die Daten dieser Tabellen zu seinen Gunsten manipulieren. <\/p>\n<p>[59755]<\/p>\n<p>Es gibt eine einfache Vorgabe zur Datenbankrolle <b>public<\/b>. Ignorieren! Selbst Microsoft spricht diese Empfehlung aus. Das Benutzerkonto <b>guest <\/b>lassen Sie deaktiviert. Weigern Sie sich es zu aktivieren. Es muss schon sehr gute Gr&uuml;nde daf&uuml;r geben.<\/p>\n<p>[60251]<\/p>\n<p>Diese Empfehlungen gelten ebenso f&uuml;r die Datenbank <b>WaWi_SQL<\/b>. Weshalb Sie den Gastzugang jetzt wieder schlie&szlig;en. Gehen Sie im Objekt-Explorer zu dem Zweig mit Ihrer administrativen Anmeldung, markieren Sie dort die Datenbank <b>WaWi_SQL <\/b>und &ouml;ffnen Sie &uuml;ber das Kontextmen&uuml; eine neue Abfrage. In der Registerkarte f&uuml;hren Sie diese T-SQL-Anweisung aus:<\/p>\n<p>[60494]<\/p>\n<pre>REVOKE CONNECT TO guest;<\/pre>\n<p>[60841]<\/p>\n<p>Anschlie&szlig;end entziehen Sie der Datenbankrolle <b>public <\/b>die Zugriffsrechte. &Ouml;ffnen Sie den Dialog zur Datenbankrolle und wechseln Sie dort zur Seite <b>Sicherungsf&auml;hige Elemente<\/b>. Hier markieren Sie die gespeicherte Prozedur <b>pSelectGeburtstagsliste <\/b>und entfernen im unteren Bereich das erteilte Recht <b>Ausf&uuml;hren<\/b>. Die &Auml;nderung &uuml;bernehmen Sie mit einem Klick auf <b>OK<\/b>.<\/p>\n<p>[60866]<\/p>\n<p>Bleibt noch die Anmeldung <b>TestPublic<\/b>. Der Ordnung halber sollten Sie diese wieder l&ouml;schen. Vorher aber trennen Sie noch die aktiven Verbindungen. Dazu schlie&szlig;en Sie die Registerkarte, mit der Sie die gespeicherte Prozedur <b>pSelectGeburtstagsliste <\/b>ausgef&uuml;hrt haben. Danach markieren Sie im Objekt-Explorer den Zweig mit der Anmeldung <b>TestPublic <\/b>und w&auml;hlen im Kontextmen&uuml; den Eintrag <b>Trennen <\/b>(siehe Bild 20).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2023_05\/Abb. 8.20.png\" alt=\"Trennen der TestPublic-Verbindung \" width=\"424,5589\" height=\"80,2396\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 20: Trennen der TestPublic-Verbindung <\/span><\/b><\/p>\n<p>Obwohl augenscheinlich keine aktive Verbindung mehr besteht, l&auml;sst sich die Anmeldung noch nicht l&ouml;schen. SQL Server h&auml;lt die Verbindung noch einige Zeit offen. Warten Sie ein paar Minuten und entfernen Sie die Anmeldung dann mit dieser T-SQL-Anweisung:<\/p>\n<p>[61629]<\/p>\n<pre>DROP LOGIN TestPublic;<\/pre>\n<p>[61883]<\/p>\n<p>So weit so gut. Die Sicherheitsl&uuml;cke ist geschlossen. Der Gastzugang zur Datenbank <b>WaWi_SQL <\/b>ist deaktiviert und die Datenbankrolle <b>public <\/b>besitzt keine Zugriffsrechte mehr. Womit allerdings die eigentliche Anforderung wieder offen w&auml;re. Wie legen Sie in einer Datenbank allgemeing&uuml;ltige Zugriffsrechte fest? Die Antwort ist so einfach wie naheliegend. Mit einer eigenen Datenbankrolle. <\/p>\n<p>[61906]<\/p>\n<h2>Eine Datenbankrolle f&uuml;r alle<\/h2>\n<p>[62293]<\/p>\n<p>Zum Erstellen der neuen Datenbankrolle nutzen Sie nat&uuml;rlich wieder das Skript. Erneut kopieren Sie die Zeilen zur Rechtevergabe der Datenbankrolle <b>Personalwesen <\/b>und f&uuml;gen diese ans Ende des Skripts ein. <\/p>\n<p>[62322]<\/p>\n<p>Als erstes l&ouml;schen Sie in den neuen Zeilen die <b>GRANT<\/b>-Anweisungen mit den Zugriffsrechten zu den Tabellen. Danach ersetzen Sie den Begriff <b>Personalwesen <\/b>mit der Bezeichnung der neuen Datenbankrolle. Diese m&uuml;ssten Sie vorher noch festlegen. Sie sollte den Inhalt und somit die allgemeing&uuml;ltige Rechtevergabe widerspiegeln. Wie w&auml;re es mit der Bezeichnung <b>Allgemein<\/b>? Einverstanden? Dann ersetzen Sie in den neuen Zeilen den Begriff Personalwesen mit <b>Allgemein<\/b>.<\/p>\n<p>[62526]<\/p>\n<p>Aktuell besteht die Rechtevergabe der neuen Datenbankrolle lediglich aus der <b>GRANT<\/b>-Anweisung zur gespeicherten Prozedur <b>pSelectAnmeldung<\/b>. Diese ist ebenfalls f&uuml;r alle Benutzer erforderlich und geh&ouml;rt exakt in diese Datenbankrolle. F&uuml;r die Freigabe der Geburtstagsliste erstellen Sie eine Kopie dieser Zeile und platzieren sie direkt unter der Originalzeile. In der neuen Zeile ersetzen Sie den Namen der gespeicherten Prozedur mit <b>pSelectGeburtstagsliste<\/b>. <\/p>\n<p>[62984]<\/p>\n<p>Zum Schluss kopieren Sie die <b>ALTER ROLE<\/b>-Anweisung und f&uuml;gen diese dreimal ein. Bei der ersten Kopie tauschen Sie den Benutzer <b>Personal <\/b>mit dem Benutzer <b>Vertrieb<\/b>, bei der zweiten mit dem Benutzer <b>Einkauf <\/b>und bei der dritten mit dem Benutzer <b>Buchhaltung<\/b>. Die angepassten T-SQL-Anweisungen sehen nun so aus:<\/p>\n<p>[63441]<\/p>\n<pre>IF (SELECT DATABASE_PRINCIPAL_ID(''Allgemein'')) IS NULL<\/pre>\n<p>[63746]<\/p>\n<pre>BEGIN<\/pre>\n<p>[63801]<\/p>\n<pre>     CREATE ROLE Allgemein AUTHORIZATION dbo;<\/pre>\n<p>[63807]<\/p>\n<pre>END<\/pre>\n<p>[63852][63856]<\/p>\n<pre>GRANT EXECUTE ON dbo.pSelectAnmeldung TO Allgemein;<\/pre>\n<p>[63857]<\/p>\n<pre>GRANT EXECUTE ON dbo.pSelectGeburtstagsliste TO Allgemein;<\/pre>\n<p>[63909][63968]<\/p>\n<pre>ALTER ROLE Allgemein ADD MEMBER [BJSEMINARE\\Personal];<\/pre>\n<p>[63969]<\/p>\n<pre>ALTER ROLE Allgemein ADD MEMBER [BJSEMINARE\\Vertrieb];<\/pre>\n<p>[64024]<\/p>\n<pre>ALTER ROLE Allgemein ADD MEMBER [BJSEMINARE\\Einkauf];<\/pre>\n<p>[64079]<\/p>\n<pre>ALTER ROLE Allgemein ADD MEMBER [BJSEMINARE\\Buchhaltung];<\/pre>\n<p>[64133]<\/p>\n<p>Die Rechtevergabe zur Datenbankrolle <b>Allgemein <\/b>ist soweit komplett. Allerdings erh&auml;lt die gespeicherte Prozedur <b>pSelectAnmeldung <\/b>das <b>EXECUTE<\/b>-Recht an mehreren Stellen im Skript. Die entsprechende <b>GRANT<\/b>-Anweisung findet sich in der neuen wie in allen anderen Datenbankrollen. F&uuml;r die Skriptausf&uuml;hrung stellt dies kein Problem dar. F&uuml;r die Lesbarkeit und somit f&uuml;r die Pflege des Skripts allerdings schon. Denken Sie an den Grundsatz KISS. Halten Sie die Rechtevergabe so einfach und klar wir m&ouml;glich. <\/p>\n<p>[64191]<\/p>\n<p>Nun k&ouml;nnten Sie die urspr&uuml;nglichen Zeilen in den einzelnen Datenbankrollen einfach l&ouml;schen. Eine bessere Variante ist jedoch, den Datenbankrollen per <b>REVOKE <\/b>das Recht zur Ausf&uuml;hrung der gespeicherten Prozedur zu entziehen. Den Vorteil von <b>REVOKE <\/b>kennen Sie bereits. Hiermit stellen Sie sicher, dass manuelle &Auml;nderungen dieser Rechte per Dialog bei der n&auml;chsten Skriptausf&uuml;hrung wieder korrigiert werden. Dazu kommt, dass Sie anhand einer guten Dokumentation den Grund f&uuml;r diese Rechtevergabe jederzeit nachvollziehen k&ouml;nnen. <\/p>\n<p>[64692]<\/p>\n<p>F&uuml;r die anstehenden &Auml;nderungen nutzen Sie eine der Grundfunktionen eines Editors. Mit <b>Strg + F <\/b>&ouml;ffnen Sie die Suche und tragen dort den Suchbegriff <b>pSelectAnmeldung <\/b>ein. Starten Sie die Suche mit einem Klick auf den Pfeil (siehe Bild 21). Der erste Treffer ist die Rechtevergabe in der Datenbankrolle <b>Personalwesen<\/b>. <\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2023_05\/Abb. 8.21.png\" alt=\"Suchen im Rechte-Skript\" width=\"700\" height=\"323,0769\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 21: Suchen im Rechte-Skript<\/span><\/b><\/p>\n<pre>GRANT EXECUTE ON dbo.pSelectAnmeldung TO Personalwesen;<\/pre>\n<p>[65535]<\/p>\n<p>Hier &uuml;berschreiben Sie die T-SQL-Anweisung <b>GRANT <\/b>mit <b>REVOKE<\/b>. <\/p>\n<p>[65591]<\/p>\n<pre>REVOKE EXECUTE ON dbo.pSelectAnmeldung TO Personalwesen;<\/pre>\n<p>[65653]<\/p>\n<p>Dokumentieren Sie die &Auml;nderung, bevor Sie mit der Suche zum n&auml;chsten Ergebnis gehen. Diese f&uuml;hrt Sie zur Datenbankrolle <b>Vertriebswesen<\/b>. Hier &auml;ndern Sie ebenfalls die T-SQL-Anweisung <b>GRANT <\/b>in <b>REVOKE<\/b>. Die n&auml;chsten Suchergebnisse bringen Sie zu den Zeilen der Datenbankrollen Bestellwesen und Buchhaltung, in denen Sie wieder <b>GRANT <\/b>mit <b>REVOKE <\/b>ersetzen. Das letzte Suchergebnis ist die Rechtevergabe zur Datenbankrolle Allgemein. Diese bleibt unver&auml;ndert. Das war es schon. Die &Uuml;berarbeitung des Skripts ist abgeschlossen.<\/p>\n<p>[65710]<\/p>\n<p>Zugegeben, das waren jetzt &uuml;berschaubare Anpassungen des Berechtigungskonzepts. Die vier Zeilen h&auml;tten Sie auch ohne die Suchfunktion gefunden. Das Beispiel zeigt aber einen weiteren Vorteil der Rechtevergabe per Skript. Angenommen, ein Anwender informiert Sie &uuml;ber eine Fehlermeldung. Diese weist auf das fehlende Zugriffsrecht <b>SELECT <\/b>f&uuml;r die Tabelle Arbeitszeiten hin. In diesem Fall &ouml;ffnen Sie Ihr Skript, dr&uuml;cken <b>STRG + F<\/b> und suchen nach dem Begriff <b>Arbeitszeiten<\/b>. Die Suche f&uuml;hrt Sie zu jedem Eintrag, der in irgendeiner Form etwas mit dem Suchbegriff zu tun hat. Auf diese Weise pr&uuml;fen Sie nach und nach die Rechtevergabe. Anhand Ihrer guten Dokumentation k&ouml;nnen Sie die erteilten beziehungsweise entzogenen Zugriffsrechte einfach nachvollziehen und erkennen schnell die Ursache f&uuml;r die Fehlermeldung. Sei es ein tats&auml;chlich fehlendes Zugriffsrecht oder der Anwender darf aus gutem Grund nicht auf die Daten der Tabelle zugreifen.<\/p>\n<p>[66229]<\/p>\n<p>&Auml;hnlich dem Entziehen von Rechten per <b>REVOKE <\/b>verfahren Sie mit Anpassungen der Mitgliedschaften einer Datenbankrolle. Beispielsweise k&ouml;nnten Sie den Benutzer <b>Buchhaltung<\/b> aus der Datenbankrolle <b>Allgemein <\/b>mit dieser Anweisung entfernen.<\/p>\n<p>[67166]<\/p>\n<pre>ALTER ROLE Allgemein DROP MEMBER [BJSEMINARE\\Buchhaltung];<\/pre>\n<p>[67401]<\/p>\n<p>Aus <b>ADD MEMBER <\/b>wird <b>DROP MEMBER<\/b>. Diese Anweisung l&auml;sst sich wie die anderen problemlos ausf&uuml;hren, selbst wenn der Benutzer nicht zur Datenbankrolle geh&ouml;rt. Wieder einmal genie&szlig;en Sie den Vorteil des Skripts. Mit jeder Skriptausf&uuml;hrung stellen Sie sicher, dass die Zugriffsrechte den Vorgaben Ihres Berechtigungskonzepts entsprechen. In diesem Fall, dass der Benutzer kein Mitglied der Datenbankrolle ist.<\/p>\n<p>[67460]<\/p>\n<p>Das Skript zur Rechtevergabe ist fertig. Ein letztes Mal speichern Sie die &Auml;nderungen und f&uuml;hren das Skript mit <b>F5 <\/b>aus. Die neue Datenbankrolle und deren Zugriffsrechte k&ouml;nnen Sie sich wieder im Dialog anschauen. Dazu aktualisieren Sie wie gewohnt den Ordner <b>Datenbankrollen <\/b>und &ouml;ffnen anschlie&szlig;end den Dialog zur Datenbankrolle <b>Allgemein<\/b>. Auf der ersten Seite sehen Sie im unteren Bereich als Mitglieder die Benutzer <b>Buchhaltung<\/b>, <b>Einkauf<\/b>, <b>Personal <\/b>und <b>Vertrieb <\/b>(siehe Bild 22).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2023_05\/Abb. 8.22.png\" alt=\"Mitglieder der Datenbankrolle Allgemein\" width=\"649,559\" height=\"588,3685\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 22: Mitglieder der Datenbankrolle Allgemein<\/span><\/b><\/p>\n<p>Die Seite <b>Sicherungsf&auml;hige Elemente <\/b>listet die beiden gespeicherten Prozeduren auf, zu denen im unteren Teil das Recht <b>EXECUTE <\/b>erteilt ist. <\/p>\n<p>[68344]<\/p>\n<p>Soweit die Kontrolle der erteilten Rechte. Wie sieht es mit den entzogenen Zugriffsrechten der gespeicherten Prozedur <b>pSelectAnmeldung <\/b>aus? Zur Stichprobe &ouml;ffnen Sie den Dialog der Datenbankrolle <b>Personalwesen<\/b>. Dieser enth&auml;lt in der Seite <b>Sicherungsf&auml;hige Elemente <\/b>lediglich die Rechtevergabe zu den Tabellen. Das Recht zum Ausf&uuml;hren der gespeicherten Prozedur <b>pSelectAnmeldung <\/b>ist nicht definiert. Somit best&auml;tigt die Stichprobe die T-SQL-Anweisungen des Skripts. <\/p>\n<p>[68485]<\/p>\n<p>Der finale Test des Berechtigungskonzepts findet wieder mit der Beispielapplikation statt. Starten Sie die Applikation nach und nach mit den Rechten der Anwender <b>Bienlein<\/b>, <b>Stromberg<\/b>, <b>Eberhofer <\/b>und <b>Kling<\/b>. Unabh&auml;ngig der verwendeten Anmeldung zeigt Ihnen die Beispielapplikation das <b>Start<\/b>-Formular. Das allein best&auml;tigt schon die korrekte Rechtevergabe zur gespeicherten Prozedur <b>pSelectAnmeldung<\/b>. Ohne diese k&ouml;nnte der Anwender nicht identifiziert und die Tabellen mit den erlaubten Zugriffsrechten nicht eingebunden werden.<\/p>\n<p>[68951]<\/p>\n<p>Je verwendeter Anmeldung greifen Sie auf die unterschiedlichen Daten zu. Als Anwender <b>Bienlein <\/b>steht Ihnen der Vollzugriff auf die Tabellen <b>Auftr&auml;ge<\/b>, <b>Artikel <\/b>und <b>Kunden <\/b>zur Verf&uuml;gung, als <b>Stromberg <\/b>f&uuml;r die Tabellen <b>Mitarbeiter<\/b>, <b>Bewerber <\/b>und <b>Stellen<\/b>. Der Anwender <b>Eberhofer <\/b>kann auf die Tabellen <b>Bestellungen <\/b>und <b>Produkte <\/b>lesend und schreibend zugreifen. Die Daten der Tabelle <b>Lieferanten <\/b>hingegen darf er nur lesen. Das &Auml;ndern dieser Daten ist dem Anwender <b>Kling <\/b>vorbehalten. Den Inhalt der Geburtstagsliste d&uuml;rfen alle Anwender sehen.<\/p>\n<p>[69475]<\/p>\n<p>Der Test best&auml;tigt das aktuelle Berechtigungskonzept. Es basiert auf f&uuml;nf Datenbankrollen f&uuml;r die Mitarbeiter aus vier Abteilungen. Die zur Bew&auml;ltigung der Aufgaben ben&ouml;tigten Datenbankobjekte und Zugriffsrechte sind pro Abteilung in eigenen Datenbankrollen definiert. Zu jeder Abteilung existiert in der Datenbank ein Benutzer.<\/p>\n<p>[70011]<\/p>\n<p>Entsprechend den Aufgaben sind die Benutzer einer der Datenbankrollen <b>Personalwesen<\/b>, <b>Vertriebswesen<\/b>, <b>Bestellwesen <\/b>oder <b>Buchhaltung <\/b>sowie zus&auml;tzlich der Datenbankrolle <b>Allgemein <\/b>zugeordnet.<\/p>\n<p>[70340]<\/p>\n<p>Die Windows-Benutzerkonten der Anwender sind im Betriebssystem zu Windows-Gruppen zusammengefasst. Jede Gruppe enth&auml;lt die Mitarbeiter einer Abteilung. Zu jeder Windows-Gruppe gibt es im SQL Server eine Anmeldung, die wiederum fest mit einem der Benutzer in der Datenbank verbunden ist. Somit stellt der Benutzer einer Datenbank letztendlich die Schnittstelle der Aufgaben zu den Aufgabentr&auml;gern dar. &Uuml;ber ihn erh&auml;lt jedes Mitglied der Windows-Gruppen die erforderlichen Zugriffsrechte f&uuml;r seine Aufgaben.<\/p>\n<p>[70529]<\/p>\n<p>Zur Vermeidung von Interessenskonflikten wurden die Zust&auml;ndigkeiten der Personen &uuml;berpr&uuml;ft und als Folge einzelne Aufgaben auf mehrere Personenkreise verteilt. So ist das Verwalten der Lieferantendaten nach dem neuen Berechtigungskonzept ausschlie&szlig;lich der Buchhaltung erlaubt. Den anderen Mitarbeitern sind m&ouml;gliche Manipulationen der Daten mit eigens angelegten Lieferanten nicht mehr m&ouml;glich.<\/p>\n<p>[71035]<\/p>\n<p>Alles in allem ein recht rundes Berechtigungskonzept, das dem Prinzip der Funktionstrennung und dem Principle Of Least Privilege folgt &#8211; und das mit &uuml;berschaubarem Aufwand.<\/p>\n<p>[71431]<\/p>\n<h2>Der Fall Bienlein<\/h2>\n<p>[71604]<\/p>\n<p>Lustlos &ouml;ffnet Frau Bienlein die neue Applikation <b>Kundenbefragung<\/b>. Was hatte sie sich gegen diese Aufgabe gewehrt. Aber ihr Vorgesetzter Herr Hoppenstett blieb eisern. Er m&ouml;chte, dass sie alle Kunden anruft, die in den letzten zwei Jahren nichts bestellt haben. Sie soll nach den Gr&uuml;nden fragen und vor allem das Interesse der Kunden wiedergewinnen. Das Ergebnis dieser Gespr&auml;che erwartet er am Ende jeden Quartals. <\/p>\n<p>[71622]<\/p>\n<p>Kundengespr&auml;che. Frau Bienlein ist nicht gerade f&uuml;r eine nette und freundliche Art der Kommunikation bekannt. Aber was soll&#8220;s. Missmutig klickt sie auf die Schaltfl&auml;che <b>Befragung <\/b>&#8211; und l&auml;chelt erfreut. Denn anstelle der Kundenliste sieht sie eine Fehlermeldung. Ihr fehlt das Recht <b>SELECT <\/b>f&uuml;r das Objekt <b>Kundenbefragungen <\/b>(siehe Bild 23). Beruhigt best&auml;tigt Frau Bienlein die Fehlermeldung mit <b>OK <\/b>und schlie&szlig;t die Applikation. F&uuml;r sie ist das Thema erst einmal erledigt. Schlie&szlig;lich kann sie ohne Zugriffsrechte keine Kunden anrufen. Bei Bedarf wird sich schon jemand melden. Dann ist es immer noch fr&uuml;h genug, auf die fehlenden Rechte hinzuweisen.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2023_05\/Abb. 8.23.png\" alt=\"Fehlendes SELECT-Recht f&uuml;r Frau Bienlein\" width=\"524,559\" height=\"214,0378\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 23: Fehlendes SELECT-Recht f&uuml;r Frau Bienlein<\/span><\/b><\/p>\n<p>Am Ende des Quartals steht Herr Hoppenstett vor ihrem Schreibtisch und fragt nach den Ergebnissen der Kundenbefragung. Frau Bienlein erkl&auml;rt ihm, dass sie die Aufgabe aufgrund fehlender Rechte nicht erledigen konnte und zeigt ihm die Fehlermeldung. Ver&auml;rgert greift Herr Hoppenstett zum Telefon und ruft in der IT-Abteilung an. Er fordert die umgehende Rechtefreigabe f&uuml;r Frau Bienlein. Immerhin erwartet die Gesch&auml;ftsf&uuml;hrung die Ergebnisse dieser Aktion. Der IT-Mitarbeiter entschuldigt sich f&uuml;r die Umst&auml;nde und verweist auf den Datenbankadministrator. Dieser sei aber noch zwei Wochen im Urlaub. Vorher k&ouml;nnte man keine Rechte freigeben. Herr Hoppenstett kann dies so nicht akzeptieren und ruft bei der Gesch&auml;ftsf&uuml;hrerin an. <\/p>\n<p>[72688]<\/p>\n<p>Kurz darauf klingelt in der IT-Abteilung das Telefon erneut. Nun m&ouml;chte die Gesch&auml;ftsf&uuml;hrerin die Freigabe der Rechte, und zwar innerhalb der n&auml;chsten 30 Minuten. Mit dieser Vorgabe wendet sich der IT-Mitarbeiter an den IT-Leiter. Nur er besitzt neben dem Datenbankadministrator die erforderlichen Administrationsrechte im SQL Server. Leider hat er nur marginale Kenntnisse im Thema SQL Server-Security. An einen Hinweis seines Datenbankadministrators erinnert er sich jedoch sehr gut. Unter keinen Umst&auml;nden d&uuml;rfen Anmeldungen einfacher Anwender der Datenbankrolle <b>db_owner <\/b>oder gar der Serverrolle <b>sysadmin <\/b>zugeordnet werden.<\/p>\n<p>[73417]<\/p>\n<p>Der IT-Leiter startet das SQL Server Management Studio und navigiert im Objekt-Explorer zu den Anmeldungen. Er &ouml;ffnet den Dialog zur Anmeldung <b>Vertrieb <\/b>und pr&uuml;ft als erstes den Verweis zur Windows-Anmeldung. Dieser zeigt auf die gleichnamige Windows-Gruppe. F&uuml;r den IT-Leiter eine plausible Einstellung. Er wechselt zur Seite <b>Benutzerzuordnung<\/b>. <\/p>\n<p>[74045]<\/p>\n<p>Hier markiert er die Zeile zur Datenbank <b>WaWi_SQL <\/b>und schaut in den unteren Teil des Dialogs. Dort sieht er die aktivierten Datenbankrollen <b>Allgemein<\/b>, <b>Vertriebswesen <\/b>und <b>public<\/b>. Die Zugriffsrechte dieser Datenbankrollen scheinen nicht auszureichen. Es bedarf wohl einer genaueren Analyse der Datenbankrollen. Doch die Zeit dr&auml;ngt. Die 30 Minuten sind bald vorbei und einen weiteren Anruf der Gesch&auml;ftsf&uuml;hrung m&ouml;chte er sich ersparen. Also erweitert er die Rechtevergabe mit den beiden Datenbankrollen <b>db_datareader <\/b>und <b>db_datawriter<\/b>. Das sollten ausreichend Rechte sein. Zu viele Rechte sind es seiner Meinung nach nicht. Schlie&szlig;lich hat er sich an die Vorgaben gehalten und weder die Datenbankrolle <b>db_owner <\/b>noch die Serverrolle <b>sysadmin <\/b>ver&auml;ndert. <\/p>\n<p>[74391]<\/p>\n<p>Er greift zum Telefon und ruft Frau Bienlein an. Sie soll es doch bitte noch einmal versuchen. Frau Bienlein klickt auf die Schaltfl&auml;che und sieht das Formular zur Kundenbefragung. Herr Hoppenstett ist zufrieden und informiert stolz die Gesch&auml;ftsf&uuml;hrung. Frau Bienlein mag seinen Enthusiasmus zwar nicht teilen, macht sich aber dennoch an die Arbeit. In der IT-Abteilung sind alle Beteiligten zufrieden und k&uuml;mmern sich wieder um ihre Aufgaben. <\/p>\n<p>[75142]<\/p>\n<p>Nach den ersten Kundengespr&auml;chen braucht Frau Bienlein eine Pause. Diese Aufgabe ist einfach nichts f&uuml;r sie. Daf&uuml;r m&uuml;sste sie eigentlich eine Gehaltszulage verlangen. Gehaltszulage? Kein Problem. Frau Bienlein entscheidet sich f&uuml;r einen kleinen Nebenverdienst. Der Zeitpunkt ist g&uuml;nstig. Es ist es kurz vor Monatsende und der Zahlungslauf der Buchhaltung steht vor der T&uuml;r. F&uuml;r ihren Nebenverdienst muss sie nur einen Lieferanten mit ihrer Bankverbindung sowie eine Bestellung inklusive Wareneingang anlegen. Das hat in den letzten Monaten hervorragend funktioniert.<\/p>\n<p>[75588]<\/p>\n<p>Sie startet die Access-Applikation <b>WaWi v2 <\/b>mit gedr&uuml;ckter <b>Umschalt<\/b>-Taste und geht direkt zum Navigationsbereich. Dort will sie die Tabelle <b>Lieferanten <\/b>&ouml;ffnen. Doch ein Blick in den Navigationsbereich h&auml;lt sie erst einmal davon ab. Frau Bienlein ist ebenso irritiert wie erfreut. Neben den Tabellen des Vertriebs und des Einkaufs sieht sie alle anderen Tabellen der Datenbank, inklusive die der Personalabteilung. Neugierig klickt sie doppelt auf die Tabelle Mitarbeiter. &#8222;Yes!&#8220; sagt Frau Bienlein laut und h&auml;lt sich schnell die Hand vor den Mund. Ein kurzer Rundblick beruhigt sie. Niemand im Raum hat etwas von ihrem Gef&uuml;hlsausbruch mitbekommen. <\/p>\n<p>[76155]<\/p>\n<p>Die Freude ist aber auch zu gro&szlig;. Frau Bienlein sieht die Daten der Tabelle <b>Mitarbeiter<\/b>. Zielsicher geht Sie zu ihrem Personaldatensatz und erh&ouml;ht den Wert der Spalte <b>AktuellesGehalt <\/b>um 5 Euro. Jetzt wird es nochmal spannend. Wird die &Auml;nderung akzeptiert oder gibt es eine Fehlermeldung? Frau Bienlein verl&auml;sst den Datensatz und l&auml;chelt zufrieden.<\/p>\n<p>[76803]<\/p>\n<p>Die &Auml;nderung wurde ohne weiteres angenommen. Gem&auml;&szlig; dem Motto &#8222;Doppelt h&auml;lt besser&#8220; &ouml;ffnet sie die Tabelle <b>Lieferanten<\/b>. Ein paar Minuten sp&auml;ter ist der fiktive Lieferant mitsamt Bestellung, Wareneingang und Rechnungsnummer angelegt. Der Zahlungslauf kann kommen. Frau Bienlein freut sich schon jetzt auf die &Uuml;berweisung in den kommenden Tagen. Insgesamt war es dann doch noch ein guter Tag f&uuml;r sie. Schlie&szlig;lich hatte sie die M&ouml;glichkeit zu zwei Nebenverdiensten.<\/p>\n<p>[77151]<\/p>\n<h2>Fazit <\/h2>\n<p>[77613]<\/p>\n<p>Das Erstellen eines Berechtigungskonzepts ist keine Kleinigkeit. Wom&ouml;glich ist das einer der Gr&uuml;nde, warum diese Aufgabe immer wieder gerne verschoben wird. Obwohl die Vergabe von Zugriffsrechten elementar f&uuml;r ein Unternehmen ist. <\/p>\n<p>[77620]<\/p>\n<p>Die Vertraulichkeit und Integrit&auml;t der Daten sollte f&uuml;r jedes Unternehmen eine Selbstverst&auml;ndlichkeit sein. Nicht nur um den Anforderungen diverser Gesetze nachzukommen, sondern vielmehr, um das Unternehmen vor Schaden zu bewahren.<\/p>\n<p>[77852]<\/p>\n<p>Eine mangelnde Datensicherheit f&uuml;hrt unweigerlich zu wirtschaftlichen Sch&auml;den. Sei es ein Imageverlust wegen unfreiwilliger Ver&ouml;ffentlichung von Informationen oder die Manipulation der Daten durch nicht berechtigte Personen. <\/p>\n<p>[78084]<\/p>\n<p>Das Berechtigungskonzept der Beispielapplikation basiert auf bew&auml;hrten Prinzipen. Es erf&uuml;llt das Priniciple of Least Privilege, nach dem jeder Anwender nur die Zugriffsrechte besitzt, die er f&uuml;r die Bew&auml;ltigung seiner Aufgaben ben&ouml;tigt. Ebenso wird dem Prinzip der Funktionstrennung gefolgt, um &Uuml;berschneidungen von Zust&auml;ndigkeiten und den Missbrauch von Daten zu vermeiden. Somit sind Vertraulichkeit und Integrit&auml;t der Daten gew&auml;hrleistet.<\/p>\n<p>[78310]<\/p>\n<p>Solange man sich an das Berechtigungskonzept h&auml;lt. Jegliche Vorgaben und Gr&uuml;nde f&uuml;r eine &Auml;nderung der Zugriffsrechte sind zu hinterfragen und deren Auswirkungen sorgf&auml;ltig zu pr&uuml;fen.<\/p>\n<p>[78752]<\/p>\n<p>Dies gilt nicht nur f&uuml;r den laufenden Betrieb. Das Berechtigungskonzept ist bereits bei der Datenbankentwicklung relevant. Jedes neue Datenbankobjekt muss in eine oder mehrere Datenbankrollen aufgenommen und dort mit den entsprechenden Rechten versehen werden.<\/p>\n<p>[78935]<\/p>\n<p>Ohne diese Rechtevergabe kann keiner der Anwender mit dem neuen Datenbankobjekt arbeiten.<\/p>\n<p>[79196]<\/p>\n<p>Die Folge ist eine Fehlermeldung mit dem Hinweis auf fehlende Rechte. So wie es Frau Bienlein mit der neuen Tabelle <b>Kundenbefragungen <\/b>ergangen ist. Die nachtr&auml;gliche Rechtevergabe erfolgte schnell und un&uuml;berlegt und f&uuml;hrte letztendlich zu einem Aushebeln des Berechtigungskonzepts. Leider handelt es sich bei diesem Beispiel um ein allt&auml;gliches Szenario. <\/p>\n<p>[79286]<\/p>\n<p>Nun muss und darf ein Datenbankentwickler in seiner Entwicklungsumgebung gerne h&ouml;here Rechte als ein Anwender besitzen. Vor der Produktivsetzung aber sollte er einen Berechtigungstest durchf&uuml;hren.<\/p>\n<p>[79642]<\/p>\n<p>Dieser beinhaltet das Testen der neuen Funktionen mit mehreren Windows-Benutzerkonten, die den Zugriffsrechten der Anwender entsprechen. Auf diese Weise lassen sich sowohl fehlende wie auch zu viel erteilte Rechte erkennen.<\/p>\n<p>[79839]<\/p>\n<p>Die explizite Vergabe der Zugriffsrechte an neuen Datenbankobjekten darf durchaus als ein Nachteil der Datenbankrollen gewertet werden.<\/p>\n<p>[80063]<\/p>\n<p>Bei einer Rechtevergabe &uuml;ber die Schemata ist dies nicht erforderlich. Die Vor- und Nachteile dieser Art der Berechtigungsvergabe lernen Sie im n&auml;chsten Beitrag kennen.<\/p>\n<p>[80199]<\/p>\n<h2>Warnung<\/h2>\n<p>[80368]<\/p>\n<p>Die beschriebenen Aktionen haben Auswirkungen auf Ihre SQL Server-Installation. F&uuml;hren Sie die Aktionen nur in einer Testumgebung aus. Verwenden Sie unter keinen Umst&auml;nden Ihren produktiven SQL Server!<\/p>\n<p>[80376]<\/p>\n<h2>Begrifflichkeiten<\/h2>\n<p>[80578]<\/p>\n<p>Die im SQL Server verwendeten Begriffe <b>Anmeldung<\/b> und <b>Benutzer <\/b>haben in der IT mehrere Bedeutungen. Um Missverst&auml;ndnisse zu vermeiden, gelten f&uuml;r diese Beitragsreihe folgende Definitionen:<\/p>\n<p>[80596]<\/p>\n<ul>\n<li><b>Anmeldung<\/b>: Die Windows- oder SQL Server-Authentifizierung im SQL Server<\/li>\n<p>[80784]<\/p>\n<li><b>Benutzer<\/b>: Der Datenbankbenutzer zu einer Anmeldung im SQL Server<\/li>\n<p>[80856]<\/p>\n<li><b>Anwender<\/b>: Die Person am Rechner<\/li>\n<p>[80921]<\/p>\n<li><b>Benutzerkonto<\/b>: Das Benutzerkonto der Person am Rechner<\/li>\n<p>[80953]<\/ul>\n<h2>Installationsanleitung der Beispielumgebung<\/h2>\n<p>[81008]<\/p>\n<p>Anlegen lokaler Windows-Benutzer und Windows-Gruppen, zuerst die Benutzer:<\/p>\n<p>[81052]<\/p>\n<ul>\n<li>&Ouml;ffnen Sie die Computerverwaltung.<\/li>\n<p>[81127]<\/p>\n<li>Erweitern Sie den Eintrag <b>Lokale Benutzer und Gruppen<\/b>.<\/li>\n<p>[81162]<\/p>\n<li>Klicken Sie mit der rechten Maustaste auf den Eintrag <b>Benutzer<\/b>.<\/li>\n<p>[81217]<\/p>\n<li>W&auml;hlen Sie den Eintrag <b>Neuer Benutzer<\/b>.<\/li>\n<p>[81281]<\/p>\n<li>Geben Sie als Benutzername <b>Bienlein <\/b>ein. <\/li>\n<p>[81320]<\/p>\n<li>Legen Sie in den Feldern <b>Kennwort <\/b>und <b>Kennwort best&auml;tigen <\/b>ein Kennwort Ihrer Wahl fest.<\/li>\n<p>[81362]<\/p>\n<li>Deaktivieren Sie die Option <b>Benutzer muss Kennwort bei der n&auml;chsten Anmeldung &auml;ndern<\/b>.<\/li>\n<p>[81450]<\/p>\n<li>Speichern Sie das neue Benutzerkonto mit der Schaltfl&auml;che <b>Erstellen<\/b>.<\/li>\n<p>[81536]<\/p>\n<li>Wiederholen Sie diese Schritte, um die Benutzer <b>Eberhofer<\/b>, <b>Stromberg <\/b>und <b>Kling<\/b> anzulegen.<\/li>\n<p>[81605]<\/p>\n<li>Beenden Sie den Dialog mit der Schaltfl&auml;che <b>Schlie&szlig;en<\/b>.<\/li>\n<p>[81695]<\/ul>\n<p>Nun folgt das Anlegen der Gruppen und die Zuordnung der Benutzer:<\/p>\n<p>[81750]<\/p>\n<ul>\n<li>Klicken Sie mit der rechten Maustaste auf den Eintrag <b>Gruppen<\/b>. <\/li>\n<p>[81816]<\/p>\n<li>W&auml;hlen Sie den Eintrag <b>Neue Gruppe<\/b>.<\/li>\n<p>[81880]<\/p>\n<li>Geben Sie als Gruppenname <b>Personal <\/b>ein und klicken Sie auf <b>Hinzuf&uuml;gen<\/b>.<\/li>\n<p>[81916]<\/p>\n<li>Tragen Sie den Namen <b>Stromberg <\/b>in das Eingabefeld ein und klicken Sie auf Namen &uuml;berpr&uuml;fen.<\/li>\n<p>[81987]<\/p>\n<li>Best&auml;tigen Sie die Auswahl mit der Schaltfl&auml;che <b>OK <\/b>und anschlie&szlig;end mit <b>Erstellen<\/b>.<\/li>\n<p>[82079]<\/p>\n<li>Wiederholen Sie die Schritte, um die Gruppe <b>Vertrieb <\/b>anzulegen und den Benutzer <b>Bienlein <\/b>hinzuzuf&uuml;gen.<\/li>\n<p>[82162]<\/p>\n<li>Das erledigen Sie nun auch noch f&uuml;r die Gruppe <b>Einkauf <\/b>mit dem Benutzer <b>Eberhofer <\/b>und f&uuml;r die Gruppe <b>Buchhaltung<\/b> und den Benutzer <b>Kling<\/b>.<\/li>\n<p>[82265]<\/p>\n<li>Schlie&szlig;en Sie den Dialog <b>Neue Gruppe<\/b>.<\/li>\n<p>[82402]<\/p>\n<li>Beenden Sie die <b>Computerverwaltung<\/b>.<\/li>\n<p>[82440]<\/ul>\n<p>SQL Server &#8211; Wechsel in den gemischten Modus:<\/p>\n<p>[82476]<\/p>\n<ul>\n<li>Starten Sie das SQL Server Management Studio.<\/li>\n<p>[82522]<\/p>\n<li>Melden Sie sich mit einer Anmeldung mit administrativen Rechten an.<\/li>\n<p>[82568]<\/p>\n<li>Klicken Sie mit der rechten Maustaste auf den ersten Eintrag im Objekt-Explorer.<\/li>\n<p>[82636]<\/p>\n<li>W&auml;hlen Sie den Men&uuml;punkt <b>Eigenschaften <\/b>und wechseln Sie im Dialog zur Seite <b>Sicherheit<\/b>.<\/li>\n<p>[82717]<\/p>\n<li>Aktivieren Sie die Option <b>SQL Server- und Windows-Authentifizierung<\/b>.<\/li>\n<p>[82805]<\/ul>\n<p>Sollte diese Option bereits aktiviert sein, k&ouml;nnen Sie die &Auml;nderung hier abbrechen und mit der Installation der Beispieldatenbank fortfahren.<\/p>\n<p>[82874]<\/p>\n<ul>\n<li>Speichern Sie die &Auml;nderung mit <b>OK<\/b>.<\/li>\n<p>[83016]<\/p>\n<li>Klicken Sie mit der rechten Maustaste auf den ersten Eintrag im Objekt-Explorer.<\/li>\n<p>[83051]<\/p>\n<li>W&auml;hlen Sie den Eintrag <b>Neu starten <\/b>und best&auml;tigen Sie die folgenden Meldungen.<\/li>\n<p>[83132]<\/ul>\n<h2>Installation der Beispieldatenbank <b>WaWi_SQL<\/b><\/h2>\n<p>[83211]<\/p>\n<ul>\n<li>Starten Sie das SQL Server Management Studio.<\/li>\n<p>[83255]<\/p>\n<li>&Ouml;ffnen Sie &uuml;ber <b>Datei|&Ouml;ffnen|Datei <\/b>das Skript <b>WaWi_SQL &#8211; Datenbank.sql<\/b>.<\/li>\n<p>[83301]<\/p>\n<li>Klicken Sie in der Symbolleiste auf die Schaltfl&auml;che <b>Ausf&uuml;hren<\/b>.<\/li>\n<p>[83373]<\/p>\n<li>Das Anlegen der Datenbank ist abgeschlossen, wenn Sie im unteren Bereich die Ausgabe <b>Fertig! <\/b>sehen.<\/li>\n<p>[83437]<\/p>\n<li>&Ouml;ffnen Sie nun &uuml;ber <b>Datei|&Ouml;ffnen|Datei <\/b>das Skript <b>WaWi_SQL &#8211; Zugriffsrechte.sql<\/b>.<\/li>\n<p>[83537]<\/p>\n<li>Klicken Sie in der Symbolleiste auf die Schaltfl&auml;che <b>Ausf&uuml;hren<\/b>.<\/li>\n<p>[83618]<\/p>\n<li>Das Anlegen der Zugriffsrechte ist abgeschlossen, wenn Sie im unteren Bereich die Ausgabe <b>Fertig! <\/b>sehen.<\/li>\n<p>[83682]<\/ul>\n<h2>Installation der Treiber<\/h2>\n<p>[83787]<\/p>\n<ul>\n<li>Installieren Sie den Treiber Microsoft ODBC Driver 17 for SQL Server auf Ihrem Rechner.<\/li>\n<p>[83812]<\/ul>\n<p>Sie finden den Treiber im Microsoft Downloadbereich unter dem Suchbegriff <b>ODBC Driver 17 for SQL Server<\/b>.<\/p>\n<p>[83900]<\/p>\n<ul>\n<li>Installieren Sie den Treiber <b>Microsoft OLE DB Driver 18 for SQL Server <\/b>auf Ihrem Rechner.<\/li>\n<p>[84005]<\/ul>\n<p>Sie finden den Treiber im Microsoft <b>Downloadbereich <\/b>unter dem Suchbegriff <b>MSOLEDBSQL<\/b>.<\/p>\n<p>[84095]<\/p>\n<h2>Beispielapplikation WaWi v2<\/h2>\n<p>[84181]<\/p>\n<ul>\n<li>Starten Sie die Access-Beispielapplikation <b>WaWi v2<\/b>.<\/li>\n<p>[84209]<\/p>\n<li>Beenden Sie das <b>Start<\/b>-Formular.<\/li>\n<p>[84261]<\/p>\n<li>&Ouml;ffnen Sie die lokale Tabelle <b>Datenquellen<\/b>.<\/li>\n<p>[84293]<\/p>\n<li>Tragen Sie in der Spalte <b>Server <\/b>den Namen Ihres SQL Servers ein. <\/li>\n<p>[84337]<\/ul>\n<p>Den Namen Ihres SQL Servers sehen Sie als ersten Eintrag im Objekt-Explorer im SQL Server Management Studio. Alternativ &ouml;ffnen Sie im SQL Server Management Studio mit einem Klick auf die Schaltfl&auml;che <b>Neue Abfrage <\/b>eine neue Registerkarte und geben dort den Befehl <b>SELECT @@Servername <\/b>ein.<\/p>\n<p>[84403]<\/p>\n<p>Nach einem Klick auf <b>Ausf&uuml;hren <\/b>sehen Sie als Ergebnis den Namen Ihres SQL Servers.<\/p>\n<p>[84691]<\/p>\n<ul>\n<li>Schlie&szlig;en Sie die Tabelle <b>Datenquellen<\/b>.<\/li>\n<p>[84774]<\/p>\n<li>&Ouml;ffnen Sie mit der Tastenkombination <b>Strg + G <\/b>den Direktbereich im VBA-Editor.<\/li>\n<p>[84814]<\/p>\n<li>F&uuml;hren Sie im Direktbereich die Funktion <b>fTabelleAlsSystemObjekt &#8222;Datenquellen&#8220;, True <\/b>aus. Durch diesen Aufruf wird die Tabelle als Systemobjekt definiert. <\/li>\n<p>[84893]<\/p>\n<li>Gehen Sie zur&uuml;ck zu Access und &ouml;ffnen Sie das Formular <b>Verbindung<\/b>.<\/li>\n<p>[85050]<\/ul>\n<p>Beim &Ouml;ffnen des Formulars werden die Tabellen eingebunden und die Verbindungszeichenfolgen der Pass Through-Abfragen angepasst. Danach wird das Formular geschlossen und das Start-Formular ge&ouml;ffnet.<\/p>\n<p>[85117]<\/p>\n<ul>\n<li>Testen Sie den Datenzugriff mit den Schaltfl&auml;chen des Formulars <b>Start<\/b>.<\/li>\n<p>[85315]<\/p>\n<li>Schlie&szlig;en Sie die Access-Beispielapplikation <b>WaWi v2<\/b>.<\/li>\n<p>[85386]<\/p>\n<h2>Downloads zu diesem Beitrag<\/h2>\n<p>Enthaltene Beispieldateien:<\/p>\n<p>Rechtevergabe Buchhaltung.sql<\/p>\n<p>WaWi v2.accdb<\/p>\n<p>WaWi_SQL &#8211; Berechtigungskonzept.sql<\/p>\n<p>WaWi_SQL &#8211; Datenbank.sql<\/p>\n<p>WaWi_SQL &#8211; Zugriffsrechte.sql<\/p>\n<p><a href=\"..\/fileadmin\/beispiele\/AA44A721-7E54-4396-8E22-B8AE014430EA\/aiu_1452.zip\">Download<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Berechtigungskonzepte sind mit einer Vielzahl von Fachbegriffen verbunden. Separation of Duties, Principle of Least Privilege, Role Based Access Control, Discretionary Access Control etc. pp. Sie behandeln die Vergabe von Zugriffsrechten auf unterschiedlichen Sicherheitsniveaus. Im Kern jedoch dient jede dieser Methoden der Vertraulichkeit und Integrit&auml;t der Daten. Die Anwender d&uuml;rfen nur auf die Ressourcen zugreifen, die sie zum Erf&uuml;llen ihrer Aufgaben ben&ouml;tigen. Dabei gilt es &Uuml;berschneidungen von Zust&auml;ndigkeiten und somit den Missbrauch von Daten zu vermeiden. SQL Server unterst&uuml;tzt zur Umsetzung dieser Anforderungen gleich mehrere Konzepte. <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_uf_show_specific_survey":0,"_uf_disable_surveys":false,"footnotes":""},"categories":[662023,66052023,44000022],"tags":[],"class_list":["post-55001452","post","type-post","status-publish","format-standard","hentry","category-662023","category-66052023","category-SQL_Server_und_Co"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.9 (Yoast SEO v27.4) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>SQL Server-Security - Teil 8: Datenbankrollen - Access im Unternehmen<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/access-im-unternehmen.de\/Access_und_SQL_ServerSecurity__Teil_8_Berechtigungskonzept_per_Datenbankrollen\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"SQL Server-Security - Teil 8: Datenbankrollen\" \/>\n<meta property=\"og:description\" content=\"Berechtigungskonzepte sind mit einer Vielzahl von Fachbegriffen verbunden. Separation of Duties, Principle of Least Privilege, Role Based Access Control, Discretionary Access Control etc. pp. Sie behandeln die Vergabe von Zugriffsrechten auf unterschiedlichen Sicherheitsniveaus. Im Kern jedoch dient jede dieser Methoden der Vertraulichkeit und Integrit&auml;t der Daten. Die Anwender d&uuml;rfen nur auf die Ressourcen zugreifen, die sie zum Erf&uuml;llen ihrer Aufgaben ben&ouml;tigen. Dabei gilt es &Uuml;berschneidungen von Zust&auml;ndigkeiten und somit den Missbrauch von Daten zu vermeiden. SQL Server unterst&uuml;tzt zur Umsetzung dieser Anforderungen gleich mehrere Konzepte.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-im-unternehmen.de\/Access_und_SQL_ServerSecurity__Teil_8_Berechtigungskonzept_per_Datenbankrollen\/\" \/>\n<meta property=\"og:site_name\" content=\"Access im Unternehmen\" \/>\n<meta property=\"article:published_time\" content=\"2023-10-08T12:41:12+00:00\" \/>\n<meta name=\"author\" content=\"Andr\u00e9 Minhorst\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Verfasst von\" \/>\n\t<meta name=\"twitter:data1\" content=\"Andr\u00e9 Minhorst\" \/>\n\t<meta name=\"twitter:label2\" content=\"Gesch\u00e4tzte Lesezeit\" \/>\n\t<meta name=\"twitter:data2\" content=\"68\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Access_und_SQL_ServerSecurity__Teil_8_Berechtigungskonzept_per_Datenbankrollen\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Access_und_SQL_ServerSecurity__Teil_8_Berechtigungskonzept_per_Datenbankrollen\\\/\"},\"author\":{\"name\":\"Andr\u00e9 Minhorst\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\"},\"headline\":\"SQL Server-Security &#8211; Teil 8: Datenbankrollen\",\"datePublished\":\"2023-10-08T12:41:12+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Access_und_SQL_ServerSecurity__Teil_8_Berechtigungskonzept_per_Datenbankrollen\\\/\"},\"wordCount\":13175,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Access_und_SQL_ServerSecurity__Teil_8_Berechtigungskonzept_per_Datenbankrollen\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg02.met.vgwort.de\\\/na\\\/acafa568791947d1b817225301012a6d\",\"articleSection\":[\"2023\",\"5\\\/2023\",\"SQL Server und Co.\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Access_und_SQL_ServerSecurity__Teil_8_Berechtigungskonzept_per_Datenbankrollen\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Access_und_SQL_ServerSecurity__Teil_8_Berechtigungskonzept_per_Datenbankrollen\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Access_und_SQL_ServerSecurity__Teil_8_Berechtigungskonzept_per_Datenbankrollen\\\/\",\"name\":\"SQL Server-Security - Teil 8: Datenbankrollen - Access im Unternehmen\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Access_und_SQL_ServerSecurity__Teil_8_Berechtigungskonzept_per_Datenbankrollen\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Access_und_SQL_ServerSecurity__Teil_8_Berechtigungskonzept_per_Datenbankrollen\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg02.met.vgwort.de\\\/na\\\/acafa568791947d1b817225301012a6d\",\"datePublished\":\"2023-10-08T12:41:12+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Access_und_SQL_ServerSecurity__Teil_8_Berechtigungskonzept_per_Datenbankrollen\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Access_und_SQL_ServerSecurity__Teil_8_Berechtigungskonzept_per_Datenbankrollen\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Access_und_SQL_ServerSecurity__Teil_8_Berechtigungskonzept_per_Datenbankrollen\\\/#primaryimage\",\"url\":\"http:\\\/\\\/vg02.met.vgwort.de\\\/na\\\/acafa568791947d1b817225301012a6d\",\"contentUrl\":\"http:\\\/\\\/vg02.met.vgwort.de\\\/na\\\/acafa568791947d1b817225301012a6d\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Access_und_SQL_ServerSecurity__Teil_8_Berechtigungskonzept_per_Datenbankrollen\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Access und SQL Server-Security &#8211; Teil 8: Berechtigungskonzept per Datenbankrollen\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\",\"name\":\"Access im Unternehmen\",\"description\":\"Das Magazin f\u00fcr Datenbankentwickler auf Basis von Microsoft Access\",\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/access-im-unternehmen.de\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"de\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\",\"name\":\"Andr\u00e9 Minhorst Verlag\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/wp-content\\\/uploads\\\/2019\\\/09\\\/aiu_wp.png\",\"contentUrl\":\"https:\\\/\\\/access-im-unternehmen.de\\\/wp-content\\\/uploads\\\/2019\\\/09\\\/aiu_wp.png\",\"width\":370,\"height\":111,\"caption\":\"Andr\u00e9 Minhorst Verlag\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\",\"name\":\"Andr\u00e9 Minhorst\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"caption\":\"Andr\u00e9 Minhorst\"}}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"SQL Server-Security - Teil 8: Datenbankrollen - Access im Unternehmen","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/access-im-unternehmen.de\/Access_und_SQL_ServerSecurity__Teil_8_Berechtigungskonzept_per_Datenbankrollen\/","og_locale":"de_DE","og_type":"article","og_title":"SQL Server-Security - Teil 8: Datenbankrollen","og_description":"Berechtigungskonzepte sind mit einer Vielzahl von Fachbegriffen verbunden. Separation of Duties, Principle of Least Privilege, Role Based Access Control, Discretionary Access Control etc. pp. Sie behandeln die Vergabe von Zugriffsrechten auf unterschiedlichen Sicherheitsniveaus. Im Kern jedoch dient jede dieser Methoden der Vertraulichkeit und Integrit&auml;t der Daten. Die Anwender d&uuml;rfen nur auf die Ressourcen zugreifen, die sie zum Erf&uuml;llen ihrer Aufgaben ben&ouml;tigen. Dabei gilt es &Uuml;berschneidungen von Zust&auml;ndigkeiten und somit den Missbrauch von Daten zu vermeiden. SQL Server unterst&uuml;tzt zur Umsetzung dieser Anforderungen gleich mehrere Konzepte.","og_url":"https:\/\/access-im-unternehmen.de\/Access_und_SQL_ServerSecurity__Teil_8_Berechtigungskonzept_per_Datenbankrollen\/","og_site_name":"Access im Unternehmen","article_published_time":"2023-10-08T12:41:12+00:00","author":"Andr\u00e9 Minhorst","twitter_card":"summary_large_image","twitter_misc":{"Verfasst von":"Andr\u00e9 Minhorst","Gesch\u00e4tzte Lesezeit":"68\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/access-im-unternehmen.de\/Access_und_SQL_ServerSecurity__Teil_8_Berechtigungskonzept_per_Datenbankrollen\/#article","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/Access_und_SQL_ServerSecurity__Teil_8_Berechtigungskonzept_per_Datenbankrollen\/"},"author":{"name":"Andr\u00e9 Minhorst","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f"},"headline":"SQL Server-Security &#8211; Teil 8: Datenbankrollen","datePublished":"2023-10-08T12:41:12+00:00","mainEntityOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Access_und_SQL_ServerSecurity__Teil_8_Berechtigungskonzept_per_Datenbankrollen\/"},"wordCount":13175,"commentCount":0,"publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Access_und_SQL_ServerSecurity__Teil_8_Berechtigungskonzept_per_Datenbankrollen\/#primaryimage"},"thumbnailUrl":"http:\/\/vg02.met.vgwort.de\/na\/acafa568791947d1b817225301012a6d","articleSection":["2023","5\/2023","SQL Server und Co."],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/access-im-unternehmen.de\/Access_und_SQL_ServerSecurity__Teil_8_Berechtigungskonzept_per_Datenbankrollen\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/access-im-unternehmen.de\/Access_und_SQL_ServerSecurity__Teil_8_Berechtigungskonzept_per_Datenbankrollen\/","url":"https:\/\/access-im-unternehmen.de\/Access_und_SQL_ServerSecurity__Teil_8_Berechtigungskonzept_per_Datenbankrollen\/","name":"SQL Server-Security - Teil 8: Datenbankrollen - Access im Unternehmen","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Access_und_SQL_ServerSecurity__Teil_8_Berechtigungskonzept_per_Datenbankrollen\/#primaryimage"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Access_und_SQL_ServerSecurity__Teil_8_Berechtigungskonzept_per_Datenbankrollen\/#primaryimage"},"thumbnailUrl":"http:\/\/vg02.met.vgwort.de\/na\/acafa568791947d1b817225301012a6d","datePublished":"2023-10-08T12:41:12+00:00","breadcrumb":{"@id":"https:\/\/access-im-unternehmen.de\/Access_und_SQL_ServerSecurity__Teil_8_Berechtigungskonzept_per_Datenbankrollen\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/access-im-unternehmen.de\/Access_und_SQL_ServerSecurity__Teil_8_Berechtigungskonzept_per_Datenbankrollen\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/Access_und_SQL_ServerSecurity__Teil_8_Berechtigungskonzept_per_Datenbankrollen\/#primaryimage","url":"http:\/\/vg02.met.vgwort.de\/na\/acafa568791947d1b817225301012a6d","contentUrl":"http:\/\/vg02.met.vgwort.de\/na\/acafa568791947d1b817225301012a6d"},{"@type":"BreadcrumbList","@id":"https:\/\/access-im-unternehmen.de\/Access_und_SQL_ServerSecurity__Teil_8_Berechtigungskonzept_per_Datenbankrollen\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/access-im-unternehmen.de\/"},{"@type":"ListItem","position":2,"name":"Access und SQL Server-Security &#8211; Teil 8: Berechtigungskonzept per Datenbankrollen"}]},{"@type":"WebSite","@id":"https:\/\/access-im-unternehmen.de\/#website","url":"https:\/\/access-im-unternehmen.de\/","name":"Access im Unternehmen","description":"Das Magazin f\u00fcr Datenbankentwickler auf Basis von Microsoft Access","publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/access-im-unternehmen.de\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"de"},{"@type":"Organization","@id":"https:\/\/access-im-unternehmen.de\/#organization","name":"Andr\u00e9 Minhorst Verlag","url":"https:\/\/access-im-unternehmen.de\/","logo":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/logo\/image\/","url":"https:\/\/access-im-unternehmen.de\/wp-content\/uploads\/2019\/09\/aiu_wp.png","contentUrl":"https:\/\/access-im-unternehmen.de\/wp-content\/uploads\/2019\/09\/aiu_wp.png","width":370,"height":111,"caption":"Andr\u00e9 Minhorst Verlag"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f","name":"Andr\u00e9 Minhorst","image":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g","caption":"Andr\u00e9 Minhorst"}}]}},"_links":{"self":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55001452","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/comments?post=55001452"}],"version-history":[{"count":0,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55001452\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/media?parent=55001452"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/categories?post=55001452"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/tags?post=55001452"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}