{"id":55001274,"date":"2020-12-01T00:00:00","date_gmt":"2021-01-27T22:07:29","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=1274"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"SQL_ServerSecurity_Teil_4_Schutz_mit_Datenbankrollen","status":"publish","type":"post","link":"https:\/\/access-im-unternehmen.de\/SQL_ServerSecurity_Teil_4_Schutz_mit_Datenbankrollen\/","title":{"rendered":"SQL Server-Security, Teil 4: Schutz mit Datenbankrollen"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/vg07.met.vgwort.de\/na\/92dcbb51ca0146a6928b8806ace686f7\" width=\"1\" height=\"1\" alt=\"\"><\/p>\n<p><b>Bernd Jungbluth, Horn<\/b><\/p>\n<p><b>In Teil 4 dieser Beitragsreihe wurden die Zugriffsrechte der Anwender auf die Datenbank begrenzt. In der Datenbank jedoch gibt es f&uuml;r die Anwender keine Grenzen. Durch die Zuordnung zur Datenbankrolle db_owner besitzen sie dort administrative Rechte. Dies erlaubt ihnen u.a. das Anlegen und L&ouml;schen von Tabellen sowie das Lesen und &Auml;ndern aller Daten. Wie Sie die Rechte mit Hilfe der Datenbankrollen weiter eingrenzen, lesen Sie in diesem Beitrag.<\/b><\/p>\n<p><b>Warnung<\/b><\/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>In der aktuellen Beispielumgebung verwendet der Anwender, sprich die Person am Rechner, zur Authentifizierung am SQL Server die Anmeldung <b>WaWiMa<\/b>. Durch die Zuordnung dieser Anmeldung zum gleichnamigen Benutzer in der Datenbank <b>WaWi_SQL <\/b>ist der Anwender f&uuml;r den Zugriff auf diese Datenbank autorisiert. Innerhalb der Datenbank erlaubt die Mitgliedschaft des Benutzers zur Datenbankrolle <b>db_owner <\/b>dem Anwender das Lesen und &Auml;ndern der Daten. Soweit in Kurzform die Beschreibung der derzeitigen Rechtevergabe.<\/p>\n<p>Datenbank-Administratoren nutzen die Datenbankrolle <b>db_owner <\/b>gerne, um Anwendern innerhalb einer Datenbank administrative T&auml;tigkeiten zu erlauben. Auf diese Weise lassen sich Aufgaben an einen oder mehrere Anwender &uuml;bertragen. Zum Beispiel an die Mitarbeiter des Supports. Sie geben neuen Kollegen die entsprechenden Rechte f&uuml;r den Datenzugriff und k&uuml;mmern sich um die Datenbanksicherung. Datenbankobjekte wie Tabellen, gespeicherte Prozeduren und Sichten m&uuml;ssen sie jedoch weder anlegen, noch &auml;ndern oder gar l&ouml;schen. Das sind eher die T&auml;tigkeiten der Datenbankentwickler. Diese findet man in der Praxis ebenfalls oft in der Datenbank-rolle <b>db_owner<\/b>. F&uuml;r die Installation neuer Datenbankversionen brauchen Sie die Rechte zum Anlegen, &Auml;ndern und L&ouml;schen von Datenbankobjekten. Allumfassende Lese- und Schreibzugriffe sind daf&uuml;r allerdings nicht erforderlich.<\/p>\n<p>Obwohl es sich in beiden F&auml;llen um administrative T&auml;tigkeiten handelt, haben die Anwender dennoch zu viele Rechte. Es gibt keinen Grund f&uuml;r eine Mitgliedschaft in der Datenbankrolle <b>db_owner<\/b>. Weder f&uuml;r den Support, noch f&uuml;r die Datenbankentwickler, noch f&uuml;r irgendeinen anderen Anwender. Schlie&szlig;lich stellt SQL Server noch neun weitere Datenbankrollen zur Verf&uuml;gung. Diese reichen f&uuml;rs Erste, um den Anwendern die Rechte zu geben, die Sie f&uuml;r die Realisierung ihrer Aufgaben ben&ouml;tigen. Und falls diese wider Erwarten nicht gen&uuml;gen, k&ouml;nnen Sie eigene Datenbankrollen anlegen und dort die Rechte gezielt vergeben. <\/p>\n<p>Die Datenbankrolle <b>db_owner <\/b>hingegen sollte nur ein einziges Mitglied enthalten: den Datenbankbesitzer, kurz den Benutzer <b>dbo <\/b>(siehe Bild 1). Dieser Benutzer ist standardm&auml;&szlig;ig in der Datenbankrolle eingetragen und l&auml;sst sich nicht entfernen. Die Unterschiede der Datenbankrolle <b>db_owner <\/b>zum Datenbankbesitzer <b>dbo <\/b>wurden im letzten Beitrag beschrieben.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2020_06\/Abb. 4.01.png\" alt=\"Die optimale Datenbankrolle db_owner\" width=\"649,559\" height=\"383,2858\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 1: Die optimale Datenbankrolle db_owner<\/span><\/b><\/p>\n<p><b>Rechte f&uuml;r den Datenbankentwickler<\/b><\/p>\n<p>Datenbankentwickler erstellen neue Versionen bestehender Datenbanken in ihrer Entwicklungsumgebung und installieren das Ergebnis im produktiven SQL Server. Dies erfolgt &uuml;ber eigens daf&uuml;r erzeugte SQL-Skripte oder &uuml;ber die M&ouml;glichkeiten der SQL Server Data Tools.<\/p>\n<p>F&uuml;r die Installation der &Auml;nderungen sind nur eine Handvoll Rechte notwendig. Neue Objekte werden mit <b>CREATE <\/b>angelegt, bestehende mit <b>ALTER <\/b>ge&auml;ndert und nicht mehr ben&ouml;tigte mit <b>DELETE <\/b>gel&ouml;scht. Bei diesen SQL-Anweisungen handelt es sich um DDL-Befehle. DDL steht f&uuml;r Data Definition Language &#8211; und die Datenbankrolle <b>db_ddladmin <\/b>erlaubt ihren Mitgliedern die Ausf&uuml;hrung dieser Befehle. Der Datenbankentwickler muss also nur dieser Datenbankrolle zugeordnet werden und schon hat er die notwendigen Rechte zur Bereitstellung einer neuen Datenbankversion.<\/p>\n<p>Beinhaltet die neue Datenbankversion eine detaillierte Rechtevergabe auf den Datenbankobjekten, braucht der Datenbankentwickler weitere Rechte. Mit <b>GRANT <\/b>vergibt er Rechte, mit <b>REVOKE <\/b>entzieht er diese und mit <b>DENY <\/b>verbietet er den Zugriff. Die Rechte f&uuml;r diese Befehle sind nicht in der Datenbankrolle <b>db_ddladmin <\/b>enthalten. Daf&uuml;r gibt es die Datenbankrolle <b>db_securityadmin<\/b>. Ein Datenbankentwickler ben&ouml;tigt somit keine Zuordnung zur Rolle <b>db_owner<\/b>. Die beiden Datenbankrollen <b>db_ddladmin <\/b>und <b>db_securityadmin <\/b>sind f&uuml;r seine Aufgaben vollkommen ausreichend (siehe Bild 2).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2020_06\/Abb. 4.02.png\" alt=\"Datenbankrollen f&uuml;r Datenbankentwickler\" width=\"549,6265\" height=\"366,0621\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 2: Datenbankrollen f&uuml;r Datenbankentwickler<\/span><\/b><\/p>\n<p>M&ouml;glicherweise tr&auml;gt der Datenbank-entwickler in einer Tabelle die neue Versionsnummer der Datenbank ein. Dazu braucht er Lese- und Schreibrechte. Jedoch nur an der entsprechenden Tabelle. Die Rechtevergabe an Tabellen wird sp&auml;ter beschrieben.<\/p>\n<p><b>Rechte f&uuml;r den Support<\/b><\/p>\n<p>Eine Datenbank geh&ouml;rt zu einer Applikation. Ob es sich hierbei um eine Datenbank zu einer IT-Inventursoftware, einer Lagerverwaltung oder einem ERP-System handelt, die Anwender verwalten die Daten immer &uuml;ber ein zugeh&ouml;riges Frontend. F&uuml;r die Applikation selbst steht ein Support zur Verf&uuml;gung. Dieser kl&auml;rt Fragen, analysiert und behebt Fehler, verwaltet Zugriffsberechtigungen und f&uuml;hrt Datenbanksicherungen durch. <\/p>\n<p>Einige Applikationen beinhalten eine eigene Benutzerverwaltung. Hier tr&auml;gt der Support den neuen Kollegen als Anwender f&uuml;r die Applikation ein, worauf im SQL Server ein neuer Benutzer in der Datenbank mit entsprechenden Rechten angelegt wird. Vorausgesetzt, der Datenbankadministrator hat bereits die Anmeldung angelegt, mit der sich der neue Kollege am SQL Server authentifiziert. Diese Aufgabe findet au&szlig;erhalb der Datenbank statt und obliegt somit weiterhin dem Datenbankadministrator. Innerhalb der Datenbank ben&ouml;tigt der Support die entsprechenden Rechte zur Verwaltung der Benutzer und deren Zugriffsrechte. Als Mitglied der bereits erw&auml;hnten Datenbankrolle <b>db_securityadmin <\/b>darf der Support die Zugriffsrechte direkt an den Datenbankobjekten wie auch &uuml;ber eigene Datenbank-rollen vergeben. F&uuml;r die Rechte zum Anlegen, &Auml;ndern und L&ouml;schen von Benutzern ben&ouml;tigt er zus&auml;tzlich noch die Zuordnung zur Datenbankrolle <b>db_accessadmin<\/b>. <\/p>\n<p>Die M&ouml;glichkeit zur Sicherung und Wiederherstellung der Daten geh&ouml;rt bei vielen Applikationen ebenfalls zum Funktionsumfang. Hierzu ben&ouml;tigt der Support die Rechte zur Ausf&uuml;hrung der T-SQL-Befehle <b>BACKUP <\/b>und <b>RESTORE<\/b>. Diese Rechte beinhaltet die Datenbankrolle <b>db_backupoperator<\/b>.<\/p>\n<p>Als Mitglied dieser drei Datenbankrollen besitzt der Support alle Rechte die er f&uuml;r seine Aufgaben ben&ouml;tigt (siehe Bild 3). Die Zuordnung zur Datenbankrolle db_owner ist nicht erforderlich.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2020_06\/Abb. 4.03.png\" alt=\"Datenbankrollen f&uuml;r Supportmitarbeiter\" width=\"499,6607\" height=\"331,1005\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 3: Datenbankrollen f&uuml;r Supportmitarbeiter<\/span><\/b><\/p>\n<p>Sie fragen sich, wie der Support Fehler analysieren soll, wenn er die Daten der Datenbank nicht lesen darf. Die Antwort ist recht einfach. Die Fehleranalyse findet nicht in der Produktivdatenbank, sondern in einer Testdatenbank statt.<\/p>\n<p>Dort kann der Support anhand von Testdaten das Szenario nachstellen und die Ursache f&uuml;r den Fehler finden. Durch diese Trennung verhindern Sie ein versehentliches &Auml;ndern der Echtdaten.<\/p>\n<p><b>Datenbankrolle public<\/b><\/p>\n<p>Die Datenbankrolle mit der Zwangsmitgliedschaft. Jeder Benutzer einer Datenbank ist der Datenbankrolle <b>public <\/b>zugeordnet. Diese Zuordnung ist fest vorgegeben und l&auml;sst sich nicht &auml;ndern. Der urspr&uuml;ngliche Sinn dieser Datenbankrolle liegt in der Definition von Zugriffsrechten, die f&uuml;r jeden Benutzer mindestens erforderlich sind. Eine solche Art der Rechtevergabe birgt jedoch einige Sicherheitsrisiken. Diese lernen Sie in einem der n&auml;chsten Beitr&auml;ge kennen. Am besten folgen Sie der bew&auml;hrten Sicherheitsempfehlung und ignorieren die Datenbankrolle <b>public<\/b>. <\/p>\n<p><b>Lese- und Schreibrechte<\/b><\/p>\n<p>Es bleiben noch vier Datenbankrollen &uuml;brig. Diese beziehen sich auf die Lese- und Schreibrechte &#8211; die Rechte f&uuml;r die SQL-Anweisungen <b>SELECT<\/b>, <b>INSERT<\/b>, <b>UPDATE <\/b>und <b>DELETE<\/b>.<\/p>\n<p>Mitglieder der Datenbankrolle <b>db_datareader<\/b> d&uuml;rfen alle Daten der Datenbank lesen und Mitglieder der Datenbankrolle <b>db_datawriter <\/b>alle Daten &auml;ndern und l&ouml;schen sowie neue hinzuf&uuml;gen. F&uuml;r die meisten Anwender der Datenbank ist eine Zuordnung zu diesen beiden Datenbankrollen absolut ausreichend. Anwender, die Daten lediglich auswerten, ben&ouml;tigen sogar nur die Zuordnung zur Datenbankrolle <b>db_datareader<\/b>. <\/p>\n<p>Nun haben Sie einen &Uuml;berblick &uuml;ber die Rechte der einzelnen Datenbankrollen. Datenbankadministratoren ohne dieses Wissen w&auml;hlen am Anfang gerne alle Datenbankrollen aus (siehe Bild 4).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2020_06\/Abb. 4.04.png\" alt=\"Viel hilft viel\" width=\"499,6607\" height=\"330,7032\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 4: Viel hilft viel<\/span><\/b><\/p>\n<p>Viel hilft viel &#8211; eine Aussage, die in diesem Fall nicht stimmt. Eine <b>SELECT<\/b>-Anweisung auf eine x-beliebige Tabelle der Datenbank liefert bei einer solchen Definition die Meldung aus Bild 5.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2020_06\/Abb. 4.05.png\" alt=\"Die Folgen von \"Viel hilft viel\"\" width=\"599,593\" height=\"109,7021\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 5: Die Folgen von &#8222;Viel hilft viel&#8220;<\/span><\/b><\/p>\n<p>Mit dieser Rechtevergabe werden dem Benutzer nicht nur Rechte gew&auml;hrt, sondern auch verweigert. Die Zuordnung zu den Datenbankrollen <b>db_denydatareader <\/b>und <b>db_denydatawriter <\/b>verbietet dem Benutzer jegliche Lese- und Schreibzugriffe. Im Hintergrund der beiden Datenbankrollen steht der Befehl <b>DENY<\/b>. Ein Verweigern per <b>DENY <\/b>&uuml;berwiegt alle erteilten Rechte, sogar die der Datenbankrolle <b>db_owner<\/b>. <\/p>\n<p>Die Auswahl aller Datenbankrollen ist nicht selten der Grund, warum die zum Benutzer geh&ouml;rende Anmeldung letztendlich in der Serverrolle <b>sysadmin <\/b>landet. F&uuml;r Mitglieder dieser Serverrolle gibt es im SQL Server keine Grenzen. Da verhindert auch kein <b>DENY <\/b>den Datenzugriff. Jedoch beinhaltet diese Zuordnung jegliche Rechte an den Datenbanken und vor allem an den dort gespeicherten Daten. Schneller k&ouml;nnen Sie Ihr m&uuml;hsam erstelltes Sicherheitskonzept nicht zerst&ouml;ren.<\/p>\n<p>Fehlende Zugriffsrechte in einer Datenbank l&ouml;sen Sie bitte innerhalb der Datenbank. Die Serverrolle sysadmin ist in solchen F&auml;llen f&uuml;r Sie tabu.<\/p>\n<p>W&auml;hlen Sie die Datenbankrollen bewusst aus. Dies gilt insbesondere f&uuml;r die Datenbankrollen <b>db_denydatareader <\/b>und <b>db_denydatawriter<\/b>. Die beiden sollten Sie nur nutzen, wenn Sie den Lese- beziehungsweise Schreibzugriff unter allen Umst&auml;nden verhindern m&ouml;chten. <\/p>\n<p>M&ouml;gliche Kandidaten f&uuml;r die Datenbankrolle <b>db_denydatawriter <\/b>sind Anwender, die Daten lediglich analysieren und auswerten. Um sicherzustellen, dass sie definitiv keine Daten hinzuf&uuml;gen, &auml;ndern oder l&ouml;schen k&ouml;nnen, ordnen Sie den zugeh&ouml;rigen Benutzer der Datenbankrolle <b>db_denydatawriter <\/b>zu. Auf diese Weise k&ouml;nnen die Anwender in Access die Daten der SQL Server-Datenbank &uuml;ber eingebundene Tabellen auswerten, ohne Gefahr zu laufen, die Daten versehentlich zu &auml;ndern oder zu l&ouml;schen. <\/p>\n<p>Wozu die M&uuml;he Reicht es nicht, wenn der Benutzer nur zur Datenbankrolle <b>db_datareader <\/b>geh&ouml;rt Grunds&auml;tzlich schon. Erh&auml;lt der Benutzer aber versehentlich das Recht zum Anlegen von Daten in einer Tabelle, verhindert dessen Mitgliedschaft in <b>db_denydatawriter <\/b>dieses Schreibrecht. Dies gilt ebenso f&uuml;r eine irrt&uuml;mliche Zuordnung des Benutzers zu <b>db_datawriter <\/b>oder gar zu <b>db_owner<\/b>.<\/p>\n<p>Das klingt recht sicher und durchdacht &#8211; zum Zeitpunkt der Rechtevergabe. Zu einem sp&auml;teren Zeitpunkt ist das Konzept der Mitgliedschaft zu den Datenbankrollen <b>db_denydatareader <\/b>und <b>db_denydatawriter <\/b>vielleicht nicht mehr so einfach nachzuvollziehen. Deshalb sollten Sie sich den Grund f&uuml;r die Verwendung dieser beiden Datenbankrollen gut dokumentieren. <\/p>\n<p>Angenommen, Sie m&uuml;ssen einem Anwender den lesenden Zugriff auf eine Tabelle gew&auml;hren. Das ist schnell getan. Sie gehen zur Tabelle, w&auml;hlen dort &uuml;ber die Berechtigungen den zum Anwender geh&ouml;renden Benutzer aus und erteilen ihm das Recht f&uuml;r die <b>SELECT<\/b>-Anweisung. Bei dieser Art der Rechtevergabe sehen Sie die bestehende Zuordnung des Benutzers zur Datenbankrolle <b>db_denydatareader <\/b>nicht. Sie werden auch nicht darauf hingewiesen. Der Anwender m&ouml;chte nun die Daten der Tabelle lesen. Er erh&auml;lt jedoch nur Fehlermeldungen. Jetzt kommt Hektik auf, denn das Problem muss wie immer schnell gel&ouml;st werden. Sie &uuml;berpr&uuml;fen die Datenbankrollen des Benutzers und sehen die Zuordnung zur Datenbankrolle <b>db_denydatareader<\/b>. Dazu gab es bestimmt mal einen guten Grund. Nur ohne Dokumentation fehlt Ihnen die Argumentation, warum Sie diese Zuordnung nicht so ohne weiteres &auml;ndern k&ouml;nnen. Um das Problem zu l&ouml;sen, ordnen Sie den Benutzer der Datenbankrolle <b>db_owner <\/b>zu. Dann kann er erst mal arbeiten. Um die tats&auml;chlichen Rechte k&uuml;mmern Sie sich sp&auml;ter. Doch es bleibt bei den Fehlermeldungen, denn die Zuordnung zur Datenbankrolle <b>db_denydatareader <\/b>&uuml;berwiegt den Rechten der Datenbankrolle <b>db_owner<\/b>. Eine L&ouml;sung muss her und zwar schnell. Also ordnen Sie die Anmeldung des Benutzers der Serverrolle <b>sysadmin <\/b>zu. Das Problem ist gel&ouml;st, denn mit diesen Rechten darf der Anwender im SQL Server alles &#8211; sogar die Daten der vorgesehenen Tabelle lesen. Nat&uuml;rlich ist diese Zuordnung nur vor&uuml;bergehend. Sobald Sie Zeit haben, die Rechtevergabe neu zu &uuml;berdenken und anzupassen, werden Sie die Anmeldung aus der Serverrolle <b>sysadmin <\/b>wieder entfernen. Dabei sollten Sie die Zuordnung zur Datenbankrolle <b>db_owner <\/b>nicht vergessen. Die Frage, wann Sie die Zeit haben und wie lange dieses vor&uuml;bergehend anh&auml;lt, d&uuml;rfen Sie sich gerne selbst beantworten. Dieses Beispiel ist nicht erfunden. Vielmehr zeigt es den Grund, warum in der Praxis Anmeldungen in der Serverrolle <b>sysadmin <\/b>sowie Benutzer in der Datenbankrolle <b>db_owner <\/b>zu finden sind.<\/p>\n<p>Erstellen Sie sich eine Dokumentation Ihres Berechtigungskonzepts. Diese beinhaltet nicht nur die Mitgliedschaft der Benutzer in den Datenbankrollen, sondern auch den Grund f&uuml;r diese Zuordnungen. Jegliche Anforderung, die &Auml;nderungen an den Zugriffsrechten erfordert, pr&uuml;fen Sie zuerst gegen Ihre Dokumentation. Passen die Anforderungen nicht zu Ihrem Berechtigungskonzept, wehren Sie sich so gut wie m&ouml;glich gegen die geforderten Rechte. <\/p>\n<p>Sie haben den &Uuml;berblick zur aktuellen Rechtevergabe und Sie als Datenbankadministrator sind verantwortlich f&uuml;r die Daten. Ob nun Daten versehentlich gel&ouml;scht oder bewusst von einem Anwender manipuliert wurden, Sie m&uuml;ssen gute Argumente haben, warum Sie dies nicht verhindern konnten. Mit dem Argument, Sie haben die Rechte nur vor&uuml;bergehend erteilt, um die Anforderungen der Abteilung zu erf&uuml;llen, werden Sie nicht weit kommen. Sie sind der Fachmann und es geh&ouml;rt zu Ihren Aufgaben, die m&ouml;glichen Folgen einer Rechtevergabe einzusch&auml;tzen und zu bewerten.<\/p>\n<p>Es ist wie immer bei der Definition von Zugriffsrechten. Das Berechtigungskonzept sollte gut durchdacht und dokumentiert sein. Diese Dokumentation ist Ihr Leitfaden. Jede neue Anforderung an Zugriffsrechte muss mit Ihrem Berechtigungskonzept vereinbar sein. Ist dies nicht der Fall, stellen Sie das aktuelle Konzept in Frage und definieren Sie bei Bedarf ein neues. <\/p>\n<p>Zum Schluss ein kleiner Tipp f&uuml;r Ihr Berechtigungskonzept: Die Zuordnung eines Benutzers zu den Datenbankrollen <b>db_datareader <\/b>und <b>db_denydatareader <\/b>sowie <b>db_datawriter <\/b>und <b>db_denydatawriter <\/b>oder gar zu allen vieren ist schlicht und ergreifend sinnlos.<\/p>\n<p><b>Lese- und Schreibrechte f&uuml;r WaWiMa <\/b><\/p>\n<p>Genug der Theorie. In der Beispieldatenbank <b>WaWi_SQL <\/b>ist der Benutzer <b>WaWiMa <\/b>aktuell der Datenbankrolle <b>db_owner <\/b>zugeordnet. Diese zu hohen Rechte werden Sie nun eingrenzen.<\/p>\n<p>Mit diesem Beitrag gibt es eine neue Version der SQL Server-Beispieldatenbank und der Access-Applikation. Sollten Sie die Beispiele bereits installiert haben, l&ouml;schen Sie diese und installieren Sie die neuen Versionen. Eine Installationsanleitung finden Sie am Ende des Artikels.<\/p>\n<p>&Ouml;ffnen Sie das SQL Server Management Studio und melden Sie sich an Ihrem SQL Server als Datenbankadministrator an. Danach erweitern Sie den Ordner der Datenbank <b>WaWi_SQL <\/b>und gehen zum Ordner <b>Sicherheit<\/b>. Hier gibt es jetzt zwei M&ouml;glichkeiten zur Rechtevergabe per Datenbankrollen. Sie k&ouml;nnen den Benutzer in den jeweiligen Datenbankrollen hinzuf&uuml;gen beziehungsweise entfernen oder beim Benutzer selbst die Zuordnung vornehmen.<\/p>\n<p><!--30percent--><\/p>\n<p>Schauen Sie sich zun&auml;chst den Weg &uuml;ber die Datenbankrollen an. Dazu erweitern Sie den Ordner <b>Rollen <\/b>und danach den Ordner <b>Datenbankrollen <\/b>(siehe Bild 6). &Ouml;ffnen Sie per Doppelklick den Dialog zur Datenbankrolle <b>db_owner<\/b>.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2020_06\/Abb. 4.06.png\" alt=\"Datenbankrollen einer Datenbank\" width=\"424,7115\" height=\"515,189\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 6: Datenbankrollen einer Datenbank<\/span><\/b><\/p>\n<p>Dort k&ouml;nnen Sie unter Mitglieder dieser Rolle den Eintrag <b>WaWiMa <\/b>markieren und mit einem Klick auf die Schaltfl&auml;che Entfernen (siehe Bild 7) die Mitgliedschaft beenden. Danach besitzt der Benutzer <b>WaWiMa <\/b>in der Datenbank keinerlei Zugriffsrechte mehr. Sollten Sie dies in einer produktiven Umgebung vorhaben, stellen Sie sich schon einmal auf diverse Anrufe und E-Mails ein.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2020_06\/Abb. 4.07.png\" alt=\"Verwalten der Mitglieder einer Datenbankrolle\" width=\"649,559\" height=\"588,3685\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 7: Verwalten der Mitglieder einer Datenbankrolle<\/span><\/b><\/p>\n<p>Eine weitaus bessere Vorgehensweise ist die &Auml;nderung der Mitgliedschaft &uuml;ber den Benutzer. Wechseln Sie dazu zum Ordner <b>Benutzer <\/b>und &ouml;ffnen Sie mit einem Doppelklick auf <b>WaWiMa <\/b>den Dialog <b>Datenbankbenutzer<\/b>. In der Seite <b>Mitgliedschaft <\/b>sehen Sie die aktuelle Zuordnung des Benutzers zu den Datenbankrollen. <\/p>\n<p>Entfernen Sie das H&auml;kchen bei der Datenbankrolle <b>db_owner <\/b>und aktivieren Sie die Datenbankrollen <b>db_datareader <\/b>und <b>db_datawriter <\/b>(siehe Bild 8). Mit einem Klick auf die Schaltfl&auml;che <b>OK<\/b> best&auml;tigen Sie die neuen Zugriffsrechte. Der Benutzer <b>WaWiMa<\/b> besitzt in der Datenbank nun keine administrativen Rechte mehr. Er darf nur noch Daten lesen und &auml;ndern. <\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2020_06\/Abb. 4.08.png\" alt=\"Verwalten der Datenbankrollen eines Benutzers\" width=\"424,7115\" height=\"300,1791\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 8: Verwalten der Datenbankrollen eines Benutzers<\/span><\/b><\/p>\n<p>In der Access-Beispielapplikation <b>WaWi <\/b>hat die &Auml;nderung der Zugriffsrechte keine Auswirkung. Die Verbindung zum SQL Server wird weiterhin &uuml;ber die Anmeldung <b>WaWiMa <\/b>hergestellt. Diese Anmeldung ist in der Datenbank <b>WaWi_SQL <\/b>dem gleichnamigen Benutzer zugeordnet. Durch die Mitgliedschaft des Benutzers in den Datenbankrollen <b>db_datareader <\/b>und <b>db_datawriter <\/b>darf der Anwender die Daten der Datenbank lesen und &auml;ndern. <\/p>\n<p>Testen Sie es einfach mal. &Ouml;ffnen Sie die Beispielapplikation <b>WaWi<\/b>. Sie werden keinen Unterschied feststellen. Trotz der geringeren Rechte sehen Sie alle Daten.<\/p>\n<p>Ein Klick auf die Schaltfl&auml;che <b>Kunden <\/b>liefert Ihnen die Daten der Tabelle <b>Kunden<\/b>. Sie k&ouml;nnen diese Daten nicht nur lesen, Sie d&uuml;rfen auch neue hinzuf&uuml;gen sowie bestehende &auml;ndern und l&ouml;schen. <\/p>\n<p>Die Anmeldung <b>WaWiMa <\/b>erlaubt Ihnen den Zugriff auf alle Daten der Datenbank <b>WaWi_SQL<\/b>. Ob nun per eingebundener Tabelle wie im Formular <b>Auftr&auml;ge <\/b>oder per ADO wie im Formular <b>Artikel<\/b>, die Art und Technik des Datenzugriffs spielt dabei keine Rolle.<\/p>\n<p>Es gibt jedoch Ausnahmen, wie ein Klick auf die Schaltfl&auml;che <b>Geburtstagsliste <\/b>zeigt (siehe Bild 9).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2020_06\/Abb. 4.09.png\" alt=\"Fehler beim Datenzugriff\" width=\"424,7115\" height=\"212,8029\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 9: Fehler beim Datenzugriff<\/span><\/b><\/p>\n<p><b>EXECUTE-Rechte f&uuml;r WaWiMa <\/b><\/p>\n<p>Das Formular <b>Geburtstagsliste <\/b>basiert auf der Pass Through-Abfrage <b>ptSelectGeburtstagsliste<\/b>, die wiederum die gespeicherte Prozedur <b>dbo.pSelectGeburtstagsliste <\/b>ausf&uuml;hrt. Hier liegt die Ursache f&uuml;r den Fehler, genauer gesagt bei den Rechten zum Ausf&uuml;hren der gespeicherten Prozedur. <\/p>\n<p>Der Benutzer <b>WaWiMa <\/b>besitzt mit der Zuordnung zur Datenbankrolle <b>db_datareader <\/b>das Recht f&uuml;r die SQL-Anweisung <b>SELECT <\/b>zum Lesen der Daten und mit der Datenbankrolle <b>db_datawriter <\/b>die Rechte zum &Auml;ndern der Daten per <b>INSERT<\/b>, <b>UPDATE <\/b>und <b>DELETE<\/b>. Keine der beiden Datenbankrollen beinhaltet das Recht f&uuml;r die SQL-Anweisung <b>EXECUTE <\/b>zur Ausf&uuml;hrung von gespeicherten Prozeduren. Ergo muss der Benutzer <b>WaWiMa <\/b>zus&auml;tzlich das Recht f&uuml;r <b>EXECUTE <\/b>erhalten. <\/p>\n<p>Bitte denken Sie jetzt nicht an die Datenbankrolle <b>db_owner <\/b>oder gar an die Serverrolle <b>sysadmin<\/b>. Wie schon erw&auml;hnt, w&auml;re dies zwar eine schnelle L&ouml;sung des Problems, aber auch die mit Abstand schlechteste. Es ist nicht erforderlich, dem Anwender alle Rechte zu geben. Ihm fehlt ja nur ein Recht &#8211; das Recht f&uuml;r die SQL-Anweisung <b>EXECUTE<\/b>.<\/p>\n<p>Microsoft empfiehlt den Einsatz von gespeicherten Prozeduren unter anderem aus Gr&uuml;nden der besseren Performance und der Datensicherheit. Da ist der Gedanke naheliegend, dass SQL Server eine entsprechende Datenbankrolle anbietet. Leider gibt es eine solche Datenbankrolle nicht, obwohl sie seit vielen Jahren vermisst und auch immer wieder gefordert wird.<\/p>\n<p>Sie m&uuml;ssen sich selbst helfen. Konkret bedeutet dies, dass Sie eine eigene Datenbankrolle f&uuml;r diese Rechtevergabe anlegen. Also zur&uuml;ck zum SQL Server Management Studio und dort zum Ordner <b>Rollen <\/b>der Datenbank <b>WaWi_SQL<\/b>. Hier klicken Sie mit der rechten Maustaste auf den Ordner <b>Datenbankrollen <\/b>und w&auml;hlen den Eintrag <b>Neue Datenbankrolle <\/b>(siehe Bild 10).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2020_06\/Abb. 4.10.png\" alt=\"Eine eigene Datenbankrolle\" width=\"424,7115\" height=\"456,8572\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 10: Eine eigene Datenbankrolle<\/span><\/b><\/p>\n<p>Im Dialog <b>Datenbankrolle &#8211; Neu <\/b>geben Sie als erstes den Namen der Datenbankrolle im Feld <b>Rollenname <\/b>ein. Der Name ist frei w&auml;hlbar. Sie k&ouml;nnen die Nomenklatur der fixen Datenbankrollen beibehalten und die Bezeichnung <b>db_execute <\/b>verwenden oder Sie legen f&uuml;r Ihre Datenbankrollen eine eigene Namensgebung fest. Wie w&auml;re es mit der Bezeichnung <b>edb_execute<\/b><\/p>\n<p>Die neue Datenbankrolle soll wie alle anderen Objekte der Datenbank dem Datenbankbesitzer geh&ouml;ren. Tragen Sie dazu <b>dbo <\/b>in das Feld <b>Besitzer <\/b>ein. Nun klicken Sie auf die Schaltfl&auml;che <b>Hinzuf&uuml;gen <\/b>und w&auml;hlen im darauffolgenden Dialog &uuml;ber Durchsuchen den Benutzer <b>WaWiMa <\/b>aus (siehe Bild 11). Best&auml;tigen Sie die Auswahl mit einem Klick auf <b>OK<\/b>. Der Benutzer <b>WaWiMa <\/b>ist jetzt Mitglied Ihrer Datenbankrolle.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2020_06\/Abb. 4.11.png\" alt=\"WaWiMa als Mitglied der eigenen Datenbankrolle \" width=\"649,559\" height=\"588,2795\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 11: WaWiMa als Mitglied der eigenen Datenbankrolle <\/span><\/b><\/p>\n<p>Das war der erste Teil der Definition &#8211; und der einfachste. Jetzt m&uuml;ssen Sie noch jede Ihrer gespeicherten Prozeduren der Datenbankrolle zuordnen und diesen dann einzeln die SQL-Anweisung <b>EXECUTE <\/b>erlauben. Dazu wechseln Sie zur Seite <b>Sicherungsf&auml;hige Elemente<\/b>. &Uuml;ber <b>Suchen <\/b>&ouml;ffnen Sie den Dialog <b>Objekte hinzuf&uuml;gen<\/b>. Hier haben Sie verschiedene M&ouml;glichkeiten, die Suche nach den gew&uuml;nschten Datenbankobjekten einzugrenzen.<\/p>\n<p>W&auml;hlen Sie die Option <b>Alle Objekte des Typs <\/b>(siehe Bild 12) und klicken Sie auf OK. Es &ouml;ffnet sich der Dialog <b>Objekttypen ausw&auml;hlen<\/b>.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2020_06\/Abb. 4.12.png\" alt=\"Filtern der Datenbankobjekte\" width=\"424,7115\" height=\"285,5405\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 12: Filtern der Datenbankobjekte<\/span><\/b><\/p>\n<p>Hier entscheiden Sie sich f&uuml;r den Objekttyp <b>Gespeicherte Prozeduren <\/b>(siehe Bild 13).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2020_06\/Abb. 4.13.png\" alt=\"Auswahl der Objekttypen\" width=\"424,7115\" height=\"263,0804\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 13: Auswahl der Objekttypen<\/span><\/b><\/p>\n<p>Nach einem Klick auf <b>OK <\/b>sind Sie wieder im Ausgangsdialog, der Ihnen nun im oberen Teil unter <b>Sicherungsf&auml;hige Elemente <\/b>alle gespeicherte Prozeduren der Datenbank auflistet (siehe Bild 14). Dies beinhaltet auch die systeminternen gespeicherten Prozeduren. F&uuml;r Ihre Datenbankrolle brauchen Sie allerdings nur die benutzerdefinierten gespeicherten Prozeduren aus dem Schema <b>dbo<\/b>. Konkret sind dies die beiden gespeicherten Prozeduren <b>dbo.pSelectAnsprechpartnerZuMitarbeiter <\/b>und <b>dbo.pSelectGeburtstagsliste<\/b>. <\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2020_06\/Abb. 4.14.png\" alt=\"Gespeicherte Prozeduren zur Auswahl\" width=\"649,559\" height=\"588,3685\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 14: Gespeicherte Prozeduren zur Auswahl<\/span><\/b><\/p>\n<p>Als erstes erlauben Sie den Mitgliedern Ihrer Datenbankrolle die gespeicherte Prozedur <b>dbo.pSelectGeburtstagsliste <\/b>per <b>EXECUTE <\/b>auszuf&uuml;hren. Dazu markieren Sie die gespeicherte Prozedur und aktivieren im unteren Bereich des Dialogs f&uuml;r den Befehl <b>Ausf&uuml;hren <\/b>das Recht <b>Erteilen <\/b>(siehe Bild 15).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2020_06\/Abb. 4.15.png\" alt=\"Erteilen des Rechts Ausf&uuml;hren\" width=\"649,559\" height=\"485,7571\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 15: Erteilen des Rechts Ausf&uuml;hren<\/span><\/b><\/p>\n<p>Diese Auswahl d&uuml;rfen Sie nun f&uuml;r die Gespeicherte Prozedur <b>dbo.pSelect-An-sprech-part-ner-Zu-Mit-ar-beit-er <\/b>wiederholen. Sparen Sie sich den Versuch, mehrere gespeicherte Prozeduren auf einmal auszuw&auml;hlen, um so allen gleichzeitig das Recht <b>Ausf&uuml;hren <\/b>zu erteilen. Es funktioniert nicht. Sie m&uuml;ssen tats&auml;chlich die Rechte f&uuml;r jede gespeicherte Prozedur einzeln vergeben.<\/p>\n<p>&Uuml;ber den gleichen Weg k&ouml;nnen Sie den Mitgliedern Ihrer Datenbankrolle die Ausf&uuml;hrung einer gespeicherten Prozedur verbieten. Dazu aktivieren Sie f&uuml;r den Befehl <b>Ausf&uuml;hren <\/b>den Eintrag <b>Verweigern<\/b>. Eine Kombination von Erteilen und Verweigern ist nicht sinnvoll, weshalb der Dialog eine solche Auswahl nicht unterst&uuml;tzt. <\/p>\n<p>Durch Aktivieren der Option <b>Mit Erteilung <\/b>d&uuml;rfen die Mitglieder dieser Datenbankrolle anderen Benutzern das Recht <b>Ausf&uuml;hren<\/b> f&uuml;r die markierte gespeicherte Prozedur gew&auml;hren. Diese Art der Rechtevergabe ist auf das Erteilen eines Rechts f&uuml;r genau die eine gew&auml;hlte gespeicherte Prozedur begrenzt. Mit den umfangreichen Rechten der Datenbankrolle <b>db_securityadmin <\/b>ist sie nicht vergleichbar.<\/p>\n<p>Nachdem Sie f&uuml;r beide gespeicherte Prozeduren zum Befehl <b>Ausf&uuml;hren <\/b>die Option <b>Erteilen <\/b>aktiviert haben, k&ouml;nnen Sie den Dialog mit einem Klick auf <b>OK <\/b>beenden. Die neue Datenbankrolle ist jetzt im Ordner <b>Datenbankrollen <\/b>zu sehen. <\/p>\n<p>&Ouml;ffnen Sie mit einem Doppelklick auf die Datenbankrolle <b>edb_execute <\/b>den zugeh&ouml;rigen Dialog erneut. Die Seite <b>Sicherungsf&auml;hige Elemente <\/b>beinhaltet jetzt nur noch gespeicherte Prozeduren, zu denen in dieser Datenbank-rolle Rechte definiert sind. Die Rechte selbst sehen Sie nach Markieren der jeweiligen gespeicherten Prozedur im unteren Bereich des Dialogs. Allerdings ist die Anzeige etwas verwirrend, zeigt diese doch zwei Zeilen f&uuml;r den Befehl <b>Ausf&uuml;hren <\/b>(siehe Bild 16).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2020_06\/Abb. 4.16.png\" alt=\"Aktuelle Rechte einer gespeicherten Prozedur\" width=\"649,559\" height=\"464,1051\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 16: Aktuelle Rechte einer gespeicherten Prozedur<\/span><\/b><\/p>\n<p>Die beiden Zeilen sollen Sie beim &Auml;ndern der vergebenen Rechte unterst&uuml;tzen. In der ersten Zeile &auml;ndern Sie die Berechtigung und vergleichen dabei die Werte mit dem Ist-Zustand der zweiten Zeile. Sie k&ouml;nnen die &Auml;nderung auch direkt in der zweiten Zeile vornehmen. Wie gesagt, der Dialog ist an dieser Stelle verwirrend. Beenden Sie den Dialog ohne &Auml;nderungen mit einem Klick auf <b>OK<\/b>.<\/p>\n<p>Nun wissen Sie, wie eine Datenbankrolle erstellt wird und wie Sie den Mitgliedern dort Rechte an Datenbankobjekten erteilen oder verweigern. Dabei ist es gleich, ob es sich bei dem Datenbankobjekt um eine gespeicherte Prozedur, eine Sicht oder eine Tabelle handelt. Die Vorgehensweise ist immer dieselbe, lediglich die Rechte unterscheiden sich. Bei gespeicherten Prozeduren ist es das Recht <b>Ausf&uuml;hren<\/b>, bei Tabellen und Sichten sind es die Rechte <b>Ausw&auml;hlen<\/b>, <b>Aktualisieren<\/b>, <b>Einf&uuml;gen <\/b>und <b>L&ouml;schen<\/b>.<\/p>\n<p>Erinnern Sie sich noch an die geforderten Lese- und Schreibrechte f&uuml;r die Datenbankentwickler Wie eingangs beschrieben, wird bei der Installation einer neuen Datenbankversion die zugeh&ouml;rige Versionsnummer gerne in einer daf&uuml;r vorgesehenen Tabelle eingetragen. Der Datenbankentwickler ben&ouml;tigt hierzu die Rechte zum Lesen und &Auml;ndern dieser Daten. Dazu erstellen Sie eine weitere Datenbankrolle und f&uuml;gen dieser den Benutzer zur Anmeldung des Datenbankentwicklers hinzu. Anschlie&szlig;end markieren Sie unter <b>Sicherungsf&auml;hige Elemente <\/b>die Tabelle und erteilen ihr die Rechte <b>Ausw&auml;hlen <\/b>und <b>Aktualisieren<\/b>. Dadurch k&ouml;nnen die Datenbankentwickler die Daten dieser Tabelle nur lesen und &uuml;berschreiben. F&uuml;r das L&ouml;schen oder Hinzuf&uuml;gen von Daten in der Tabelle oder gar zum Lesen und Schreiben in den anderen Tabellen haben sie keine Berechtigung.<\/p>\n<p>Sie sehen, die Vergabe von Rechten an Datenbankobjekten in einer Datenbankrolle besteht aus mehreren Schritten, beinhaltet viele Klicks und das in einem nicht sonderlich hilfreichen Dialog.<\/p>\n<p>Da stellt sich die Frage nach einer Alternative. Die gibt es tats&auml;chlich, denn schlie&szlig;lich l&ouml;sen die Klicks im Dialog letztendlich T-SQL-Befehle aus:<\/p>\n<pre>CREATE ROLE edb_execute AUTHORIZATION dbo;<\/pre>\n<p>Diese SQL-Anweisung legt eine Datenbankrolle namens <b>edb_execute <\/b>mit dem Besitzer <b>dbo <\/b>an. Den Benutzer <b>WaWiMa <\/b>f&uuml;gen Sie mit der folgenden Anweisung der Datenbankrolle hinzu:<\/p>\n<pre>ALTER ROLE edb_execute ADD MEMBER WaWiMa;<\/pre>\n<p>Gut, diese beiden Aktionen lassen sich auch im Dialog ohne gro&szlig;e H&uuml;rden umsetzen. Beim Erteilen des Rechts Ausf&uuml;hren f&uuml;r eine gespeicherte Prozedur ist der T-SQL-Befehl jedoch eine willkommene Alternative:<\/p>\n<pre>GRANT EXECUTE ON dbo.pSelectAnsprechpartnerZuMitarbeiter TO edb_execute;<\/pre>\n<p>Mit dieser SQL-Anweisung erhalten die Mitglieder der Datenbankrolle <b>edb_execute <\/b>das Recht zur Ausf&uuml;hrung der gespeicherten Prozedur <b>dbo.pSelectAnsprechpartnerZuMitarbeiter<\/b>. Um das Recht f&uuml;r die zweite gespeicherte Prozedur zu erteilen, kopieren Sie die Zeile und ersetzen dort den Namen. Auf diese Weise ergibt sich nicht nur ein Skript zur Rechtevergabe, sondern auch gleich eine Dokumentation.<\/p>\n<pre>GRANT EXECUTE ON dbo.pSelectAnsprechpartnerZuMitarbeiter TO edb_execute;\r\nGRANT EXECUTE ON dbo.pSelectGeburtstagsliste TO edb_execute;<\/pre>\n<p>Bei einer geringen Anzahl von gespeicherten Prozeduren mag diese Vorgehensweise noch &uuml;berschaubar sein. Mit steigender Anzahl jedoch wird diese Art der Rechtevergabe schnell aufwendig und fehleranf&auml;llig.<\/p>\n<p>Zum Gl&uuml;ck geht es noch einfacher. Die Systemsicht <b>sys.procedures <\/b>liefert Ihnen alle gespeicherten Prozeduren der Datenbank. Warum also nicht mit einem kleinen SQL-Skript die Rechte auf einen Schlag vergeben:<\/p>\n<pre>DECLARE @Name     AS SYSNAME,\r\n         @Sql     AS NVARCHAR(1000);\r\nDECLARE curGPs CURSOR FOR\r\n     SELECT CONCAT(SCHEMA_NAME(schema_id),'.',[name])\r\n     FROM&nbsp;&nbsp;&nbsp;&nbsp; sys.procedures \r\n     WHERE&nbsp;&nbsp;&nbsp;&nbsp; is_ms_shipped = 0\r\n     FOR READ ONLY;\r\nOPEN curGPs;\r\nFETCH NEXT FROM curGPs INTO @Name;\r\nWHILE @@FETCH_STATUS = 0\r\nBEGIN\r\n     SET @Sql = 'GRANT EXECUTE ON ' + @Name + ' TO edb_execute;'\r\n     EXEC sp_executesql @Sql;\r\n     FETCH NEXT FROM curGPs INTO @Name;\r\nEND\r\nCLOSE curGPs;\r\nDEALLOCATE curGPs;<\/pre>\n<p>Das SQL-Skript ermittelt in der Systemsicht <b>sys.procedures <\/b>nur die benutzerdefinierten gespeicherten Prozeduren. Durch die <b>WHERE<\/b>-Bedingung <b>is_ms_shipped = 0 <\/b>sind die systeminternen gespeicherten Prozeduren im Ergebnis nicht enthalten. Zu jeder ermittelten gespeicherten Prozedur wird eine Zeichenfolge erstellt, die den T-SQL-Befehl zur Rechtevergabe enth&auml;lt. Letztendlich f&uuml;hrt die Systemprozedur <b>sp_execute_sql <\/b>den so erstellten T-SQL-Befehl aus.<\/p>\n<p>F&uuml;r einen Test dieser Rechtevergabe &ouml;ffnen Sie im SQL Server Management Studio &uuml;ber die Schaltfl&auml;che <b>Neue Abfrage <\/b>eine neue Registerkarte. Achten Sie darauf, dass Sie sich in der Datenbank <b>WaWi_SQL <\/b>befinden. Als n&auml;chstes entfernen Sie die eben manuell erteilten Rechte. Hierzu geben Sie die beiden folgenden SQL-Anweisungen in der neuen Registerkarte ein und klicken dann auf die Schaltfl&auml;che <b>Ausf&uuml;hren<\/b>.<\/p>\n<pre>REVOKE EXECUTE ON dbo.pSelectAnsprechpartnerZuMitarbeiter TO edb_execute;\r\nREVOKE EXECUTE ON dbo.pSelectGeburtstagsliste TO edb_execute;<\/pre>\n<p>Die Datenbankrolle <b>edb_execute <\/b>enth&auml;lt nun keine Rechte mehr zur Ausf&uuml;hrung der gespeicherten Prozeduren. Sie k&ouml;nnen dies im Dialog zur Datenbankrolle pr&uuml;fen. Auf der Seite <b>Sicherungsf&auml;hige Elemente <\/b>sind keine gespeicherten Prozeduren mehr aufgelistet.<\/p>\n<p>Jetzt folgt die Rechtevergabe per T-SQL-Skript. Dazu &ouml;ffnen Sie &uuml;ber <b>Datei|&Ouml;ffnen|Datei <\/b>das Skript <b>Rechtevergabe per T-SQL<\/b>. Sie finden das Skript in den Beispieldateien. Starten Sie die Rechtevergabe mit einem Klick auf <b>Ausf&uuml;hren<\/b>.<\/p>\n<p>Anschlie&szlig;end &ouml;ffnen Sie den Dialog zur Datenbankrolle <b>edb_execute <\/b>erneut. Auf der Seite <b>Sicherungsf&auml;hige Elemente <\/b>sehen Sie die beiden gespeicherten Prozeduren mit dem erteilten Recht <b>Ausf&uuml;hren<\/b>.<\/p>\n<p>Mit diesen Rechten erhalten Sie in der Access-Beispielapplikation <b>WaWi <\/b>nun auch die Daten der Pass Through-Abfragen. Wechseln Sie zur Beispielapplikation und klicken Sie im <b>Start<\/b>-Formular auf die Schaltfl&auml;che <b>Geburtstagsliste<\/b>. Das Formular zeigt Ihnen die Geburtstage der Mitarbeiter.<\/p>\n<p><b>Der Fall Bienlein<\/b><\/p>\n<p>Frau Bienlein ist frisch aus dem Urlaub zur&uuml;ck. Eigentlich wollte sie sich direkt an die Arbeit machen. Aber so kurz nach dem Urlaub fehlt ihr doch etwas der Elan und au&szlig;erdem etwas Geld. So ein Urlaub in Deutschland ist schon teuer. Da w&auml;re eine kleine Gehaltserh&ouml;hung nicht schlecht. Also &ouml;ffnet Sie Ihre eigene Access-Datenbank und klickt auf die eingebundene Tabelle <b>dbo_Mitarbeiter<\/b>. Sie g&ouml;nnt sich wie beim letzten Mal eine kleine Gehaltserh&ouml;hung von 5 Euro und schlie&szlig;t die Tabelle wieder. <\/p>\n<p>Wenn Sie schon mal dabei ist, kann sie sich ja nochmal den Spa&szlig; g&ouml;nnen und die Tabelle <b>Bewerber <\/b>l&ouml;schen. Das anschlie&szlig;ende Gewusel in der IT-Abteilung findet sie einfach zu am&uuml;sant. Sie erstellt eine Pass Through-Abfrage mit der SQL-Anweisung <b>DROP TABLE Bewerber<\/b>. Nach einem Klick auf Ausf&uuml;hren w&auml;hlt Sie die ODBC-Datenquelle <b>WaWi_SQL<\/b>, tippt anschlie&szlig;end das Kennwort ein und klickt auf <b>OK<\/b>. Es folgt die ihr bekannte Fehlermeldung (siehe Bild 17). Aber Moment mal, diese Fehlermeldung kam doch sonst erst bei der zweiten Ausf&uuml;hrung der Pass Through-Abfrage<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2020_06\/Abb. 4.17.png\" alt=\"Keine Rechte f&uuml;r Frau Bienlein\" width=\"700\" height=\"73,46055\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 17: Keine Rechte f&uuml;r Frau Bienlein<\/span><\/b><\/p>\n<p>Neugierig &auml;ndert Frau Bienlein die SQL-Anweisung in <b>SELECT * FROM Bewerber <\/b>und klickt erneut auf Ausf&uuml;hren. Nach der Auswahl der OBDC-Datenquelle und der Kennworteingabe sieht sie die Daten der Bewerber. Die Tabelle wurde also nicht gel&ouml;scht.  &#8222;Da ist man mal zwei Wochen nicht da.&#8220; &auml;rgert sich Frau Bienlein. Was solls, dann l&ouml;scht sie die Tabelle halt nicht. Es geht schlie&szlig;lich auch anders.<\/p>\n<p>Routiniert klickt sie sich durch <b>Externe Daten|Neue Datenquelle|Aus Datenbank|Aus SQL Server <\/b>zum Dialog <b>Externe Daten &#8211; ODBC-Datenquelle <\/b>und aktiviert dort die zweite Option. Nach einem Klick auf <b>OK <\/b>w&auml;hlt Sie die ODBC-Datenquelle <b>WaWi_SQL <\/b>aus.<\/p>\n<p>Es folgt die Aufforderung zur Kennworteingabe, der sie nachkommt, um dann im n&auml;chsten Dialog letztendlich die Tabelle <b>dbo_Bewerber <\/b>zu markieren. Bevor sie die Tabelle mit einem Klick auf <b>OK <\/b>einbindet, aktiviert sie noch die Option <b>Kennwort speichern<\/b>. Die Frage, ob das Kennwort gespeichert werden soll, findet sie immer noch drollig. L&auml;chelnd best&auml;tigt sie die Meldung. <\/p>\n<p>Das Navigationsfenster zeigt nun neben der Tabelle <b>dbo_Mitarbeiter <\/b>auch die Tabelle <b>dbo_Bewerber<\/b>. Per Doppelklick &ouml;ffnet sie die Tabelle in der Datenblattansicht, dr&uuml;ckt die Tastenkombination <b>STRG + A <\/b>und anschlie&szlig;end auf die Taste <b>ENTF<\/b>. Die Warnung, dass dadurch die Datens&auml;tze der Tabelle gel&ouml;scht werden, ignoriert sie mit einem Klick auf <b>Ja<\/b>. Fertig. Geht doch. Die Daten der Tabelle <b>dbo_Bewerber <\/b>sind gel&ouml;scht.<\/p>\n<p>Nach diesem Erfolgserlebnis ist sie bereit f&uuml;r etwas Produktives. Oder vielleicht doch nicht. Vorher k&ouml;nnte man ja noch die E-Mails der letzten beiden Wochen lesen. Bereits bei der dritten E-Mail findet Frau Bienlein dies keine gute Idee mehr. Ihr Abteilungsleiter informiert sie &uuml;ber eine Neuverteilung der Regionen. Sie soll nach ihrem Urlaub zus&auml;tzlich die Region Bayern betreuen. Ausgerechnet Bayern. Nichts gegen Bayern, immerhin war sie da im Urlaub. Nur gibt es in Bayern viele Kunden mit geringem Umsatz. Das bedeutet viel Arbeit f&uuml;r wenig Lohn.<\/p>\n<p>Die E-Mail informiert sie ebenso &uuml;ber eine neue Funktion in der Auftragsverwaltung. Dort sehen die Sachbearbeiter jetzt nur noch die Ansprechpartner ihrer Kunden. Sie startet die Auftragsverwaltung <b>WaWi <\/b>und &ouml;ffnet das Formular <b>Ansprechpartner<\/b>. Vor ihr erscheint eine f&uuml;r sie gef&uuml;hlt endlose Liste.<\/p>\n<p>Wenn sie nur eine gute Ausrede h&auml;tte. Wenn diese Liste nur nicht so lang w&auml;re. Wenn man diese Liste &auml;ndern k&ouml;nnte. Moment mal, f&uuml;r jemanden, der Inhalte von Tabellen l&ouml;schen kann, sollte das doch kein Problem sein!<\/p>\n<p>Frau Bienlein wechselt zu ihrer Datenbank und navigiert sich &uuml;ber den bekannten Weg zur Auswahl der Tabellen. Irgendwo muss die regionale Zuordnung der Kunden zu den Mitarbeiten ja gespeichert sein. Sie bemerkt die Tabellen <b>dbo_Regionen <\/b>und <b>dbo_Gebietszuordnungen<\/b>, f&uuml;hlt sich auf dem richtigen Weg und bindet die beiden Tabellen in ihre Datenbank ein. Als erstes &ouml;ffnet sie die Tabelle <b>dbo_Gebietszuordnungen<\/b>. Dort sieht sie jedoch nur Zahlen in den Spalten <b>GebietszuordnungenID<\/b>, <b>MitarbeiterID <\/b>und <b>RegionenID <\/b>(siehe Bild 18). <\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2020_06\/Abb. 4.18.png\" alt=\"Die Regionen der Sachbearbeiter\" width=\"424,7115\" height=\"366,8351\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 18: Die Regionen der Sachbearbeiter<\/span><\/b><\/p>\n<p>Ob das eine Zuordnungstabelle ist Frau Bienlein erinnert sich dunkel an ihre Access-Schulung. Da war doch was mit Zuordnungstabellen und Access-Abfragen. Sie erstellt eine neue Abfrage und f&uuml;gt dieser die Tabellen <b>dbo_Gebietszuordnungen <\/b>und <b>dbo_Mitarbeiter <\/b>hinzu. Sicherheitshalber erg&auml;nzt sie die Auswahl noch mit der Tabelle <b>dbo_Regionen<\/b>. Anschlie&szlig;end w&auml;hlt sie in den Tabellen die Felder <b>MitarbeiterID<\/b>, <b>Nachname<\/b>, <b>RegionenID <\/b>und <b>Region <\/b>aus (siehe Bild 19). Sie klickt auf <b>Ausf&uuml;hren<\/b>. <\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2020_06\/Abb. 4.19.png\" alt=\"Frau Bienleins Abfrage\" width=\"549,6265\" height=\"278,6243\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 19: Frau Bienleins Abfrage<\/span><\/b><\/p>\n<p>Das Ergebnis best&auml;tigt ihre Vermutung. Sie sieht alle Sachbearbeiter mit den zugeordneten Regionen. Frau Bienlein markiert den Eintrag mit ihrem Namen und der Region <b>Bayern <\/b>und dr&uuml;ckt die Taste <b>ENTF<\/b>. Die folgende Warnung best&auml;tigt sie mit einem Klick auf <b>Ja<\/b>. Ab jetzt ist sie f&uuml;r die Kunden in Bayern nicht mehr zust&auml;ndig. Ein kurzer Blick in das Formular <b>Ansprechpartner <\/b>der Applikation <b>WaWi <\/b>liefert ihr den Beweis. Dort sind jetzt nur noch ihre altbew&auml;hrten Kunden zu sehen (siehe Bild 20).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2020_06\/Abb. 4.20.png\" alt=\"Frau Bienleins Kunden\" width=\"649,559\" height=\"87,09995\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 20: Frau Bienleins Kunden<\/span><\/b><\/p>\n<p>Sie hatte kurz &uuml;berlegt, ob sie die Region Bayern nicht einem anderen Sachbearbeiter zuordnen sollte. Aber das w&uuml;rde zu schnell auffallen. So muss sie sich nur ruhig verhalten und abwarten bis die ersten bayrischen Kunden nach dem fehlenden Support fragen.<\/p>\n<p>Wenn sie dann von ihrem Abteilungsleiter darauf angesprochen wird, kann sie sich unbedarft mit ihm zusammen wundern, warum ihr die Region noch nicht zugeteilt wurde. Nat&uuml;rlich ist ihr bewusst, dass sie danach die Region Bayern erneut erh&auml;lt. Aus diesem Grund speichert Frau Bienlein ihre neue Abfrage. Zum gegebenen Zeitpunkt l&ouml;scht sie den Eintrag einfach noch einmal.<\/p>\n<p><b>Fazit und Zusammenfassung<\/b><\/p>\n<p>Ein weiterer Schritt im Zugriffsschutz ist getan. Nachdem beim letzten Mal der Zugang der Anmeldung <b>WaWiMa <\/b>auf die Datenbank begrenzt wurde, gibt es jetzt zus&auml;tzliche Einschr&auml;nkungen in der Datenbank.<\/p>\n<p>Der Benutzer <b>WaWiMa <\/b>ist nicht mehr in der Datenbankrolle <b>db_owner <\/b>enthalten und besitzt somit keine administrativen Rechte mehr. Durch seine Mitgliedschaft in den Datenbankrollen <b>db_datareader <\/b>und <b>db_datawriter <\/b>sind seine Rechte auf das Lesen und Schreiben der Daten begrenzt. Dies ist jedoch nicht genug, denn keine der beiden Datenbankrollen beinhaltet das Recht zum Ausf&uuml;hren von gespeicherten Prozeduren. Die Rechte hierzu erh&auml;lt der Benutzer <b>WaWiMa <\/b>durch die Mitgliedschaft in der eigens daf&uuml;r angelegten Datenbankrolle <b>edb_execute<\/b>. <\/p>\n<p>Das Sicherheitsniveau mag sich mit diesen Ma&szlig;nahmen zwar um einen weiteren Schritt erh&ouml;ht haben, ausreichend ist es jedoch noch nicht. Die Lese- und Schreibrechte gelten f&uuml;r alle Daten der Datenbank. Frau Bienlein ist weiterhin in der Lage, Daten in den Tabellen direkt zu &auml;ndern und zu l&ouml;schen. Um dies zu verhindern, sind detaillierte und fachbezogene Zugriffsberechtigungen erforderlich. Wie Sie diese Anforderungen mit den Datenbankrollen realisieren, erfahren Sie in der n&auml;chsten Ausgabe.<\/p>\n<p><b>Installationsanleitung f&uuml;r die Beispielumgebung<\/b><\/p>\n<p>SQL Server &#8211; Wechsel in den Gemischten Modus<\/p>\n<ul>\n<li>Starten Sie das SQL Server Management Studio.<\/li>\n<li>Melden Sie sich mit einer Anmeldung mit administrativen Rechten an.<\/li>\n<li>Klicken Sie mit der rechten Maustaste auf den ersten Eintrag im Objekt-Explorer.<\/li>\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<li>Aktivieren Sie die Option <b>SQL Server- und Windows-Authentifizierung<\/b>. <\/li>\n<\/ul>\n<p>Sollte diese Option bereits aktiviert sein, k&ouml;nnen Sie die &Auml;nderung hier abbrechen. Die folgenden Schritte m&uuml;ssen Sie dann nicht ausf&uuml;hren.<\/p>\n<ul>\n<li>Speichern Sie die &Auml;nderung mit <b>OK<\/b>.<\/li>\n<li>Klicken Sie mit der rechten Maustaste auf den ersten Eintrag im Objekt-Explorer.<\/li>\n<li>W&auml;hlen Sie den Eintrag <b>Neu starten <\/b>und best&auml;tigen Sie die folgenden Meldungen.<\/li>\n<\/ul>\n<p>Installation der Beispieldatenbank WaWi_SQL<\/p>\n<ul>\n<li>Starten Sie das SQL Server Management Studio.<\/li>\n<li>&Ouml;ffnen Sie &uuml;ber <b>Datei|&Ouml;ffnen|Datei <\/b>das Skript <b>WaWi_SQL.sql<\/b>.<\/li>\n<li>Klicken Sie in der Symbolleiste auf die Schaltfl&auml;che <b>Ausf&uuml;hren<\/b>.<\/li>\n<li>Das Anlegen der Datenbank ist abgeschlossen, wenn Sie im unteren Bereich die Ausgabe <b>Fertig! <\/b>sehen.<\/li>\n<\/ul>\n<p>ODBC-Datenquelle <b>WaWi_SQL<\/b><\/p>\n<ul>\n<li>&Ouml;ffnen Sie den ODBC-Datenquelleneditor 32-Bit oder 64-Bit je nach verwendeter Access-Version.<\/li>\n<li>Wechseln Sie zur Registerkarte <b>System-DSN <\/b>und klicken Sie auf <b>Hinzuf&uuml;gen<\/b>.<\/li>\n<li>W&auml;hlen Sie den Treiber <b>ODBC Driver 17 for SQL Server <\/b>aus.<\/li>\n<\/ul>\n<p>Wenn Sie den Treiber in der Auswahl nicht sehen, m&uuml;ssen Sie diesen zun&auml;chst installieren.<\/p>\n<p>Sie finden den Treiber im Microsoft <b>Downloadbereich <\/b>unter dem Suchbegriff <b>ODBC Driver 17 for SQL Server<\/b>.<\/p>\n<ul>\n<li>Geben Sie im Eingabefeld <b>Name <\/b>die Bezeichnung <b>WaWi_SQL <\/b>ein.<\/li>\n<li>W&auml;hlen Sie in der Auswahlliste Server Ihren SQL Server aus oder tragen Sie den Namen direkt ein. 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. Nach einem Klick auf Ausf&uuml;hren sehen Sie als Ergebnis den Namen Ihres SQL Servers.<\/li>\n<li>Klicken Sie im ODBC-Datenquelleneditor auf <b>Weiter<\/b>.<\/li>\n<li>Aktivieren Sie die dritte Option mit der Bezeichnung <b>Mit SQL Server-Authentifizierung anhand der vom Benutzer eingegebenen Anmelde-ID und des Kennworts<\/b>.<\/li>\n<li>Geben Sie <b>WaWiMa<\/b> im Eingabefeld <b>Anmelde-ID <\/b>und das Kennwort <b>SicherIn2020! <\/b>im Feld <b>Kennwort <\/b>ein.<\/li>\n<li>Klicken Sie auf <b>Weiter<\/b>.<\/li>\n<li>Aktivieren Sie die Option <b>Die Standarddatenbank &auml;ndern auf <\/b>und w&auml;hlen Sie die Datenbank <b>WaWi_SQL <\/b>aus. Sollten Sie eine Fehlermeldung erhalten, haben Sie sich vielleicht beim Kennwort vertippt. Mit einem Klick auf <b>Zur&uuml;ck <\/b>k&ouml;nnen Sie die Eingabe wiederholen.<\/li>\n<li>Klicken Sie <b>Weiter <\/b>und anschlie&szlig;end auf <b>Fertig stellen<\/b>.<\/li>\n<li>Beenden Sie die Konfiguration mit einem Klick auf <b>OK<\/b>.<\/li>\n<\/ul>\n<p>Beispielapplikation WaWi<\/p>\n<ul>\n<li>Starten Sie die Access-Beispielapplikation <b>WaWi<\/b>.<\/li>\n<li>Entfernen Sie alle eingebundenen Tabellen.<\/li>\n<li>&Ouml;ffnen Sie &uuml;ber <b>Externe Daten|Neue Datenquelle|Aus Datenbank|Aus SQL Server <\/b>den Dialog <b>Externe Daten &#8211; ODBC-Datenbank<\/b>.<\/li>\n<li>Aktivieren Sie die zweite Option und klicken Sie auf <b>Weiter<\/b>.<\/li>\n<li>W&auml;hlen Sie in der Registerkarte <b>Computerdatenquelle <\/b>die ODBC-Datenquelle <b>WaWi_SQL <\/b>aus.<\/li>\n<li>Geben Sie das Kennwort <b>SicherIn2020! <\/b>zur Anmeldung <b>WaWiMa <\/b>ein.<\/li>\n<li>Markieren Sie alle Tabellen mit dem Pr&auml;fix <b>dbo<\/b>.<\/li>\n<li>Aktivieren Sie die Option <b>Kennwort speichern <\/b>und klicken Sie auf <b>OK<\/b>.<\/li>\n<li>Best&auml;tigen Sie jede der folgenden Meldungen mit Kennwort speichern.<\/li>\n<li>&Ouml;ffnen Sie mit der Tastenkombination <b>STRG + G <\/b>den Direktbereich im VBA-Editor.<\/li>\n<li>F&uuml;hren Sie im Direktbereich zuerst die Funktion <b>fTabellenUmbenennen <\/b>und dann <b>fPassThroughVerbindungen <\/b>aus. Diese Funktionen passen die Access-Objekte an Ihre Umgebung an.<\/li>\n<li>F&uuml;hren Sie im Direktbereich die Anweisung <b>fTabelleAlsSystemObjekt &#8222;ADO&#8220;, False <\/b>aus.<\/li>\n<li>Wechseln Sie zu Access und erweitern Sie den Navigationsbereich.<\/li>\n<li>&Ouml;ffnen Sie die lokale Tabelle <b>ADO<\/b>.<\/li>\n<li>Tragen Sie in der Spalte <b>Server <\/b>den Namen Ihres SQL Servers ein und in der Spalte <b>Kennwort <\/b>das Kennwort <b>sicherIN2020! <\/b>und unter Anmeldung <b>WaWiMa <\/b>ein.<\/li>\n<li>Schlie&szlig;en Sie die Tabelle <b>ADO <\/b>und wechseln Sie per Tastenkombination <b>STRG + G <\/b>zum Direktbereich.<\/li>\n<li>F&uuml;hren Sie im Direktbereich die Anweisung <b>fTabelleAlsSystemObjekt &#8222;ADO&#8220;, True <\/b>aus.<\/li>\n<li>Testen Sie den Datenzugriff mit den Schaltfl&auml;chen des Formulars <b>Start<\/b>.<\/li>\n<h3>Downloads zu diesem Beitrag<\/h3>\n<p>Enthaltene Beispieldateien:<\/p>\n<p>Rechtevergabe per T-SQL.sql<\/p>\n<p>WaWi.accdb<\/p>\n<p>WaWi_SQL.sql<\/p>\n<p><a href=\"..\/fileadmin\/beispiele\/D191C4D9-5467-49A3-95AC-3E4090BB6F44\/aiu_1274.zip\">Download<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>In Teil 4 dieser Beitragsreihe wurden die Zugriffsrechte der Anwender auf die Datenbank begrenzt. In der Datenbank jedoch gibt es f&uuml;r die Anwender keine Grenzen. Durch die Zuordnung zur Datenbankrolle db_owner besitzen sie dort administrative Rechte. Dies erlaubt ihnen u.a. das Anlegen und L&ouml;schen von Tabellen sowie das Lesen und &Auml;ndern aller Daten. Wie Sie die Rechte mit Hilfe der Datenbankrollen weiter eingrenzen, lesen Sie in diesem Beitrag.<\/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":[662020,66062020,44000022],"tags":[],"class_list":["post-55001274","post","type-post","status-publish","format-standard","hentry","category-662020","category-66062020","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 4: Schutz mit 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\/SQL_ServerSecurity_Teil_4_Schutz_mit_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 4: Schutz mit Datenbankrollen\" \/>\n<meta property=\"og:description\" content=\"In Teil 4 dieser Beitragsreihe wurden die Zugriffsrechte der Anwender auf die Datenbank begrenzt. In der Datenbank jedoch gibt es f&uuml;r die Anwender keine Grenzen. Durch die Zuordnung zur Datenbankrolle db_owner besitzen sie dort administrative Rechte. Dies erlaubt ihnen u.a. das Anlegen und L&ouml;schen von Tabellen sowie das Lesen und &Auml;ndern aller Daten. Wie Sie die Rechte mit Hilfe der Datenbankrollen weiter eingrenzen, lesen Sie in diesem Beitrag.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-im-unternehmen.de\/SQL_ServerSecurity_Teil_4_Schutz_mit_Datenbankrollen\/\" \/>\n<meta property=\"og:site_name\" content=\"Access im Unternehmen\" \/>\n<meta property=\"article:published_time\" content=\"2021-01-27T22:07:29+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/vg07.met.vgwort.de\/na\/92dcbb51ca0146a6928b8806ace686f7\" \/>\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=\"34\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/SQL_ServerSecurity_Teil_4_Schutz_mit_Datenbankrollen\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/SQL_ServerSecurity_Teil_4_Schutz_mit_Datenbankrollen\\\/\"},\"author\":{\"name\":\"Andr\u00e9 Minhorst\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\"},\"headline\":\"SQL Server-Security, Teil 4: Schutz mit Datenbankrollen\",\"datePublished\":\"2021-01-27T22:07:29+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/SQL_ServerSecurity_Teil_4_Schutz_mit_Datenbankrollen\\\/\"},\"wordCount\":6613,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/SQL_ServerSecurity_Teil_4_Schutz_mit_Datenbankrollen\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg07.met.vgwort.de\\\/na\\\/92dcbb51ca0146a6928b8806ace686f7\",\"articleSection\":[\"2020\",\"6\\\/2020\",\"SQL Server und Co.\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/SQL_ServerSecurity_Teil_4_Schutz_mit_Datenbankrollen\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/SQL_ServerSecurity_Teil_4_Schutz_mit_Datenbankrollen\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/SQL_ServerSecurity_Teil_4_Schutz_mit_Datenbankrollen\\\/\",\"name\":\"SQL Server-Security, Teil 4: Schutz mit Datenbankrollen - Access im Unternehmen\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/SQL_ServerSecurity_Teil_4_Schutz_mit_Datenbankrollen\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/SQL_ServerSecurity_Teil_4_Schutz_mit_Datenbankrollen\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg07.met.vgwort.de\\\/na\\\/92dcbb51ca0146a6928b8806ace686f7\",\"datePublished\":\"2021-01-27T22:07:29+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/SQL_ServerSecurity_Teil_4_Schutz_mit_Datenbankrollen\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/SQL_ServerSecurity_Teil_4_Schutz_mit_Datenbankrollen\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/SQL_ServerSecurity_Teil_4_Schutz_mit_Datenbankrollen\\\/#primaryimage\",\"url\":\"http:\\\/\\\/vg07.met.vgwort.de\\\/na\\\/92dcbb51ca0146a6928b8806ace686f7\",\"contentUrl\":\"http:\\\/\\\/vg07.met.vgwort.de\\\/na\\\/92dcbb51ca0146a6928b8806ace686f7\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/SQL_ServerSecurity_Teil_4_Schutz_mit_Datenbankrollen\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"SQL Server-Security, Teil 4: Schutz mit 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 4: Schutz mit 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\/SQL_ServerSecurity_Teil_4_Schutz_mit_Datenbankrollen\/","og_locale":"de_DE","og_type":"article","og_title":"SQL Server-Security, Teil 4: Schutz mit Datenbankrollen","og_description":"In Teil 4 dieser Beitragsreihe wurden die Zugriffsrechte der Anwender auf die Datenbank begrenzt. In der Datenbank jedoch gibt es f&uuml;r die Anwender keine Grenzen. Durch die Zuordnung zur Datenbankrolle db_owner besitzen sie dort administrative Rechte. Dies erlaubt ihnen u.a. das Anlegen und L&ouml;schen von Tabellen sowie das Lesen und &Auml;ndern aller Daten. Wie Sie die Rechte mit Hilfe der Datenbankrollen weiter eingrenzen, lesen Sie in diesem Beitrag.","og_url":"https:\/\/access-im-unternehmen.de\/SQL_ServerSecurity_Teil_4_Schutz_mit_Datenbankrollen\/","og_site_name":"Access im Unternehmen","article_published_time":"2021-01-27T22:07:29+00:00","og_image":[{"url":"http:\/\/vg07.met.vgwort.de\/na\/92dcbb51ca0146a6928b8806ace686f7","type":"","width":"","height":""}],"author":"Andr\u00e9 Minhorst","twitter_card":"summary_large_image","twitter_misc":{"Verfasst von":"Andr\u00e9 Minhorst","Gesch\u00e4tzte Lesezeit":"34\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/access-im-unternehmen.de\/SQL_ServerSecurity_Teil_4_Schutz_mit_Datenbankrollen\/#article","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/SQL_ServerSecurity_Teil_4_Schutz_mit_Datenbankrollen\/"},"author":{"name":"Andr\u00e9 Minhorst","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f"},"headline":"SQL Server-Security, Teil 4: Schutz mit Datenbankrollen","datePublished":"2021-01-27T22:07:29+00:00","mainEntityOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/SQL_ServerSecurity_Teil_4_Schutz_mit_Datenbankrollen\/"},"wordCount":6613,"commentCount":0,"publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/SQL_ServerSecurity_Teil_4_Schutz_mit_Datenbankrollen\/#primaryimage"},"thumbnailUrl":"http:\/\/vg07.met.vgwort.de\/na\/92dcbb51ca0146a6928b8806ace686f7","articleSection":["2020","6\/2020","SQL Server und Co."],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/access-im-unternehmen.de\/SQL_ServerSecurity_Teil_4_Schutz_mit_Datenbankrollen\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/access-im-unternehmen.de\/SQL_ServerSecurity_Teil_4_Schutz_mit_Datenbankrollen\/","url":"https:\/\/access-im-unternehmen.de\/SQL_ServerSecurity_Teil_4_Schutz_mit_Datenbankrollen\/","name":"SQL Server-Security, Teil 4: Schutz mit Datenbankrollen - Access im Unternehmen","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/SQL_ServerSecurity_Teil_4_Schutz_mit_Datenbankrollen\/#primaryimage"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/SQL_ServerSecurity_Teil_4_Schutz_mit_Datenbankrollen\/#primaryimage"},"thumbnailUrl":"http:\/\/vg07.met.vgwort.de\/na\/92dcbb51ca0146a6928b8806ace686f7","datePublished":"2021-01-27T22:07:29+00:00","breadcrumb":{"@id":"https:\/\/access-im-unternehmen.de\/SQL_ServerSecurity_Teil_4_Schutz_mit_Datenbankrollen\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/access-im-unternehmen.de\/SQL_ServerSecurity_Teil_4_Schutz_mit_Datenbankrollen\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/SQL_ServerSecurity_Teil_4_Schutz_mit_Datenbankrollen\/#primaryimage","url":"http:\/\/vg07.met.vgwort.de\/na\/92dcbb51ca0146a6928b8806ace686f7","contentUrl":"http:\/\/vg07.met.vgwort.de\/na\/92dcbb51ca0146a6928b8806ace686f7"},{"@type":"BreadcrumbList","@id":"https:\/\/access-im-unternehmen.de\/SQL_ServerSecurity_Teil_4_Schutz_mit_Datenbankrollen\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/access-im-unternehmen.de\/"},{"@type":"ListItem","position":2,"name":"SQL Server-Security, Teil 4: Schutz mit 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\/55001274","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=55001274"}],"version-history":[{"count":0,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55001274\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/media?parent=55001274"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/categories?post=55001274"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/tags?post=55001274"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}