{"id":55000649,"date":"2009-02-01T00:00:00","date_gmt":"2020-05-22T22:21:01","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=649"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Access_MySQL_und_Berechtigungsverwaltung","status":"publish","type":"post","link":"https:\/\/access-im-unternehmen.de\/Access_MySQL_und_Berechtigungsverwaltung\/","title":{"rendered":"Access, MySQL und Berechtigungsverwaltung"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/vg09.met.vgwort.de\/na\/1294713a58824d1583eff2c1781f84f1\" width=\"1\" height=\"1\" alt=\"\"><\/p>\n<p><b>Im vorherigen Beitrag zum Thema Access und MySQL wurde unsere S&uuml;dsturm-Datenbank auf einen MySQL-Server migriert und das Frontend zur Zusammenarbeit mit ihm &uuml;berredet. Dabei blieb eine Kleinigkeit auf der Strecke: Die Anmeldung am Server lief &uuml;ber einen Administrator-Account, was im Alltag so besser nicht vorkommen sollte. Sehen wir also in dieser Ausgabe, wie dem unbeschr&auml;nkten Zugriff Riegel vorgeschoben werden k&ouml;nnen.<\/b><\/p>\n<p><b>Datensicherheit<\/b><\/p>\n<p>Ein h&auml;ufig ge&auml;u&szlig;ertes Argument gegen ein JET-Datei-Backend ist die mangelhafte Datensicherheit, die es mit sich bringt. Auch Backends, die mit dem Sicherheitssystem von Access, also einer eigenen MDW und der User Level Security ausgestattet sind, lassen sich mit frei verf&uuml;gbaren Tools in Sekundenschnelle knacken. Da jeder Benutzer au&szlig;erdem prinzipbedingt immer Vollzugriff auf das Backend-Verzeichnis haben muss, steht dem Kopieren der Datendatei auf einen USB-Stick und anschlie&szlig;ender heimischer Analyse nichts im Wege.<\/p>\n<p>Das alles l&auml;sst ein SQL-Server nicht zu. Auf die physischen Tabellen haben die Benutzer keinen und auf die Datenbanken und Tabellen nur so viel Zugriff, wie es der Serveradministrator gew&auml;hrt.<\/p>\n<p>Ganz so rosig, wie es manchmal dargestellt wird, verh&auml;lt es sich allerdings nicht. Sobald Sie ODBC-verkn&uuml;pfte Tabellen im Frontend haben, k&ouml;nnten User, die sich auskennen, den <b>AllowBypassKey<\/b>-Schutz aushebeln und h&auml;tten damit direkten Zugriff auf die Tabellen &uuml;ber das Datenbankfenster. Die Daten k&ouml;nnten dann kopiert und manipuliert werden.<\/p>\n<p>Wer vor solcher Unbill ganz sicher sein will, der muss ein Frontend entwickeln, das ganz ohne verlinkte ODBC-Tabellen auskommt und in dem der Zugriff auf die Daten rein &uuml;ber ADO-Recordsets gestaltet wird. Den Aufwand hierf&uuml;r werden Sie mit Recht scheuen, weil eine solche Entwicklung diesen leicht ins Vielfache steigern kann.<\/p>\n<p>Nat&uuml;rlich k&ouml;nnen Sie den Zugriff auf bestimmte MySQL-Tabellen genau so beschr&auml;nken, wie das mit dem Sicherheitssystem (User Level Security, ULS) von JET per Arbeitsgruppendatei (MDW) m&ouml;glich ist. MySQL erlaubt noch weitaus fein abgestuftere Zugriffsberechtigungen auf verschiedenen Ebenen &#8211; so weit, so gut.<\/p>\n<p>Bevor Sie sich nun frohlockend an die Implementierung eines Zugriffssystems auf Server-Ebene machen, sollten Sie sich die Kehrseite der Medaille vergegenw&auml;rtigen. Die Berechtigungen sind zwar schnell vergeben, der Umgang mit ihnen im Frontend ist jedoch nicht ganz trivial. Denn wenn ein Zugriff vom Server verweigert wird, zeigt sich das zun&auml;chst lediglich in einer h&auml;sslichen ODBC-Fehlermeldung, mit der der Benutzer herzlich wenig anfangen kann &#8211; siehe Bild 1.<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2009_01\/MySQLBerechtigungen-web-images\/Access_Denied_opt.jpeg\" alt=\"Access_Denied.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 1: Der MySQL-Server weist einen Datenzugriff mit einer ODBC-Fehlermeldung ab.<\/span><\/b><\/p>\n<p>Es braucht auf der Seite des Frontends daher einen nicht unerheblichen Programmieraufwand, um solche Fehler abzufangen und f&uuml;r die Zugriffsbeschr&auml;nkungen sinnvolle Folgeaktionen oder aussagekr&auml;ftige Meldungen zu implementieren.<\/p>\n<p>Was folgt aus diesen Ausf&uuml;hrungen Vor allem die Tatsache, dass man sich bereits vor der Entwicklung des Frontends ausf&uuml;hrlich Gedanken &uuml;ber ein Benutzer- und Berechtigungskonzept machen sollte. Nachdem also das Datenmodell einer Datenbank steht, kommt als N&auml;chstes die Frage an die Reihe, welcher Schutz aus welchen Gr&uuml;nden und f&uuml;r welche Daten vorgesehen werden muss. Das wiederum h&auml;ngt ganz von den Anforderungen an die Datenbank ab, oder denen, die Ihnen der Auftraggeber oder dessen Datenschutzbeauftragter vorgeben.<\/p>\n<p><b>Berechtigungskonzept<\/b><\/p>\n<p>Nun ist es in der Realit&auml;t eher unwahrscheinlich, dass Sie mit Access eine Datenbank entwickeln m&uuml;ssen, die h&ouml;chsten Sicherheitsanforderungen gen&uuml;gt. Vermutlich werden Sie nicht in die Verlegenheit kommen, ein System f&uuml;r den BND oder auch nur eine Bank entwickeln zu m&uuml;ssen.<\/p>\n<p>F&uuml;r viele IT-Verantwortliche solcher Branchen reicht bereits das Erw&auml;hnen des Begriffs Access aus, um abzuwinken.<\/p>\n<p>In den meisten Unternehmen wird jedoch auch nur mit Wasser gekocht. Die M&ouml;glichkeiten, die etwa das Sicherheitssystem von JET vorsieht, kombiniert mit einer einfacheren Rechtevergabe auf Serverebene, sollten hinreichend sein.<\/p>\n<p>Machen Sie sich klar, dass es im Prinzip drei Ebenen gibt, auf die die Berechtigungssteuerung verteilt werden kann:<\/p>\n<ul>\n<li class=\"aufz-hlung\">Die Serverebene: Zugriff auf Datenbanken, deren Objekte, Tabellen und sogar Felder sind unter MySQL steuerbar.<\/li>\n<li class=\"aufz-hlung\">Die JET-Ebene (ULS): Zugriff auf alle Datenbankobjekte im Frontend ist &uuml;ber eine Arbeitsgruppendatei (MDW) steuerbar.<\/li>\n<li class=\"aufz-hlung\">Implementationsebene: &Uuml;ber VBA k&ouml;nnen Sie unabh&auml;ngig vom DBMS selbst ein Berechtigungssystem programmieren. So k&ouml;nnen Sie etwa den Aufruf von bestimmten Formularen unterbinden, wenn ein Benutzer daf&uuml;r nicht autorisiert ist. Die Steuerung dieser Berechtigungen kann &uuml;ber zus&auml;tzliche Tabellen geschehen.<\/li>\n<\/ul>\n<p>Welche dieser M&ouml;glichkeiten Sie bevorzugen und ob Sie sie in beliebigem Verh&auml;ltnis kombinieren m&ouml;chten, bleibt Ihnen &uuml;berlassen. Eine allgemeine Empfehlung l&auml;sst sich hier schlecht aussprechen.<\/p>\n<p>Ganz pers&ouml;nlich w&uuml;rde ich aber vom zus&auml;tzlichen Einsatz der ULS eher absehen. Au&szlig;er dem Anmeldedialog, der bei ihrem Einsatz automatisch erscheint und somit einen <b>CurrentUser <\/b>verf&uuml;gbar macht, bringt sie kaum Gewinn. Auch sind dann JET-User- und SQL-User-Konten nur noch schwer zu &uuml;berblicken oder zu synchronisieren.<\/p>\n<p>Um Aussagen zum Berechtigungskonzept machen zu k&ouml;nnen, muss man nat&uuml;rlich zun&auml;chst wissen, welche M&ouml;glichkeiten die einzelnen Ebenen erlauben. Und da es hier nur um den MySQL-Server gehen soll, wird im Folgenden dessen Rechtesystem veranschaulicht.<\/p>\n<p><b>Berechtigungsstufen und Rollen<\/b><\/p>\n<p>Das, was unter MySQL am ehesten Kopfzerbrechen bereitet, ist die flache Berechtigungshierarchie. Unter JET etwa werden einzelne Benutzer den Benutzergruppen zugeordnet. Ab Werk existieren die Gruppen Administratoren und Benutzer.<\/p>\n<p>Man kann das je nach Anforderung auf weitere Gruppen, wie Hauptbenutzer, G&auml;ste etc., ausweiten &#8211; &auml;hnlich, wie bei den Benutzergruppen unter Windows. Berechtigungen werden dann seltener dem einzelnen User zugeordnet, als vielmehr eben diesen Gruppen, &uuml;ber die der einzelne User dann indirekt seine Rechte erh&auml;lt.<\/p>\n<p>Solch ein rollenbasiertes System, das in sehr differenzierter Form etwa beim Microsoft SQL Server vorliegt, fehlt MySQL leider. Hier gibt es einfach nur Benutzer, aber keine Gruppen oder Rollen.<\/p>\n<p>Einem Benutzer k&ouml;nnen Sie zwar ebenfalls sehr differenzierte Rechte vergeben, doch besonders &uuml;bersichtlich ist es nicht, jedem neuen User jeweils den kompletten Satz von Berechtigungen zuweisen zu m&uuml;ssen, anstatt das nur einmal zu Beginn f&uuml;r eine Gruppe vorzunehmen, der Benutzer angeh&ouml;ren.<\/p>\n<p>Daraus folgen f&uuml;r einen Workaround die m&ouml;glichen Szenarien:<\/p>\n<ul>\n<li class=\"aufz-hlung\">Entweder, man definiert separat in Access k&uuml;nstliche Gruppen, f&uuml;r die Berechtigungen gespeichert sind, und weist neuen Usern jeweils den entsprechenden Satz spezifischer Berechtigungen zu. Das s&auml;he schematisch etwa so aus wie in Bild 2. Man k&ouml;nnte nach diesem System in einem Access-Formular neue Benutzer anlegen (<b>tblUser<\/b>), die zugeh&ouml;rige Gruppe (<b>GruppenID<\/b>) ausw&auml;hlen und nach Klick auf eine &Uuml;bernehmen-Schaltfl&auml;che auf dem Server zun&auml;chst den User exportieren und in einem weiteren Schritt die passenden Berechtigungen einstellen, welche aus der Tabelle <b>tblGruppen <\/b>kommen. Die k&ouml;nnte etwa einen Inhalt wie in Bild 3 haben. Jeder Benutzer der Datenbank wird also auch tats&auml;chlich auf dem Server angelegt und seine Rechte werden so eingestellt, wie das in der Tabelle <b>tblGruppen <\/b>vorgegeben wurde. Beim Start des Frontends wird der Benutzer reell mit seinem Namen am Server angemeldet.<\/li>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2009_01\/MySQLBerechtigungen-web-images\/system1tabelle_opt.jpeg\" alt=\"system1tabelle.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 2: Berechtigungsgruppen und zugeordnete Benutzer in zus&auml;tzlichen Tabellen<\/span><\/b><\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2009_01\/MySQLBerechtigungen-web-images\/system1_opt.jpeg\" alt=\"system1.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 3: Inhalt der Tabelle tblGruppen und verkn&uuml;pfte User im Unterdatenblatt<\/span><\/b><\/p>\n<li class=\"aufz-hlung\">Oder man definiert unter MySQL nur wenige Benutzer, die quasi Gruppencharakter haben, und verwaltet die User ebenfalls unter Access, schl&auml;gt dabei aber die einzelnen User jeweils einem &#8222;Gruppen-Account&#8220; von MySQL zu. Das lie&szlig;e sich ungef&auml;hr so veranschaulichen wie in Bild 4. <\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2009_01\/MySQLBerechtigungen-web-images\/system2_opt.jpeg\" alt=\"system2.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 4: Benutzer und zugeordnete Gruppen f&uuml;r Gruppenanmeldung am Server<\/span><\/b><\/p>\n<p>Der Unterschied besteht hier darin, dass die Benutzer (Gruppenname) auf dem Server bereits angelegt wurden, die Berechtigungen auf einzelne Objekte schon vergeben sind, und beim Start der Datenbank keine Anmeldung &uuml;ber den Benutzernamen stattfindet, sondern &uuml;ber den Gruppennamen. Der Login am Frontend wird hingegen &uuml;ber VBA realisiert. Stimmen Anmeldename und Passwort (<b>tblUser<\/b>), so steht auch die zugeh&ouml;rige Gruppe &uuml;ber die GruppenID fest und die Verbindung wird &uuml;ber den gespeicherten Gruppennamen und das Gruppenpasswort (<b>tblGruppen<\/b>) hergestellt.<\/li>\n<\/ul>\n<p>Verbreiteter ist Variante 2. Der Grund hierf&uuml;r ist, dass Benutzer auf dem MySQL-Server global sind und nicht nur f&uuml;r eine spezielle Datenbank angelegt werden k&ouml;nnen &#8211; lediglich die Berechtigungen f&uuml;r einzelne Datenbanken k&ouml;nnen gesteuert werden.<\/p>\n<p>Werden mehrere Datenbanken auf dem Server betrieben, so kommen im Lauf der Zeit Massen von Usern zusammen, &uuml;ber deren Zugeh&ouml;rigkeit zu einer einzelnen Datenbank man schnell den &Uuml;berblick verliert.<\/p>\n<p>Unter Sicherheitsaspekten hat die zweite Variante allerdings einen Nachteil. Da die Tabellen <b>tblUser <\/b>und <b>tblGruppen <\/b>ja im Prinzip im Frontend sichtbar sind, k&ouml;nnte deren Inhalt leicht ausspioniert werden. Bei Variante 1 ist das kein Problem, da die User-Tabelle im Frontend nicht wirklich vorhanden sein muss &#8211; Abb. 2 stellt nur ein Schema dar.<\/p>\n<p>Aus diesem Grund sollte die Gruppentabelle besser nicht als verkn&uuml;pfte Tabelle sichtbar sein, sondern nur per VBA und eine ADO-Server-Connection verarbeitet werden. Das f&uuml;hrt indessen zu einem weiteren Problem.<\/p>\n<p><b>Pferdefu&szlig;: Neuverkn&uuml;pfen von Tabellen<\/b><\/p>\n<p>Wenn Sie das Frontend weitergeben, dann wird es notwendig, dass die Server-Tabellen neu verkn&uuml;pft werden &#8211; schlie&szlig;lich hat der MySQL-Server beim Kunden wahrscheinlich eine andere IP, als Ihr Entwicklungsserver.<\/p>\n<p>Dazu ist aber bereits eine Verbindung zum Server Voraussetzung, die nur &uuml;ber eine Anmeldung zustande kommen kann. Wenn jedoch die Anmeldeinformationen (<b>tblGruppen<\/b>) selbst auf dem Server liegen, dann bei&szlig;t sich die Katze in den Schwanz: Ohne Serververbindung keine Anmeldetabelle, ohne Anmeldetabelle keine Verbindung.<\/p>\n<p>Das l&auml;sst sich praktisch nur l&ouml;sen, indem ein Account im Frontend fest eingebaut ist. Das kann zum Beispiel &uuml;ber einen hartkodierten Connection-String in VBA gel&ouml;st werden. Die Rechte f&uuml;r diesen Zugang m&uuml;ssen so weit ausreichen, um die Servertabellen neu verkn&uuml;pfen zu k&ouml;nnen &#8211; nicht mehr, nicht weniger. Welche Rechte das genau sind, erfahren Sie sp&auml;ter. <\/p>\n<p>Im Folgenden gehen wir nur auf die zweite Variante ein. Sie findet sich in der Beispieldatenbank <b>suedsturm_mysql4.mdb <\/b>umgesetzt.<\/p>\n<p><b>User verwalten &uuml;ber GUI-Tools<\/b><\/p>\n<p>Wenn Sie Ihren MySQL-Server neu aufgesetzt haben, dann existiert genau ein User, der meist den Namen <b>root <\/b>mit unbeschr&auml;nkten Administratorrechten besitzt und dessen Passwort m&ouml;glicherweise noch leer ist. Diesen Umstand sollten Sie dann &uuml;brigens schleunigst &auml;ndern. Die Verwaltung der Benutzer l&auml;sst sich sowohl &uuml;ber SQL realisieren, wie &uuml;ber diverse GUI-Tools, die bereits im ersten Teil dieser MySQL-Reihe Erw&auml;hnung fanden. Da der MySQL-Administrator [1] kostenlos ist, besprechen wir hier die Benutzerverwaltung &uuml;ber diese Anwendung.<\/p>\n<p>Nach deren Start klicken Sie im linken Men&uuml; auf Benutzerverwaltung. Daraufhin werden unterhalb des Men&uuml;s die bereits vorhandenen Benutzerkonten angezeigt.<\/p>\n<p>Sie k&ouml;nnen nun ein Konto markieren und dessen Eigenschaften bearbeiten oder &uuml;ber die Schaltfl&auml;che <b>Neuen Benutzer anlegen <\/b>ein neues Konto erzeugen. Das Kontextmen&uuml; f&uuml;r einen Benutzer (siehe Bild 5) erlaubt weitere Aktionen.<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2009_01\/MySQLBerechtigungen-web-images\/UserMyAdmin_opt.jpeg\" alt=\"UserMyAdmin.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 6: Angaben zu einem Benutzer im MySQL-Administrator<\/span><\/b><\/p>\n<p><!--30percent--><\/p>\n<p>Nur zwei Informationen im nun erscheinenden Dialog sind obligatorisch: der Benutzername und das Passwort.<\/p>\n<p>Die weiteren Felder k&ouml;nnen Sie optional ausf&uuml;llen, damit eventuell sp&auml;ter ein anderer Datenbankverwalter mehr sprechende Informationen zum Konto hat.<\/p>\n<p>In Bild 6 ist ein neuer Benutzer <b>SuedsturmUser<\/b> angelegt worden. Behalten Sie im Sinn, dass es sich f&uuml;r die hier beschriebene Vorgehensweise im Grunde nicht um einen einzelnen User handelt, sondern um einen Gruppen-Account, dem sp&auml;ter mehrere User der Tabelle <b>tblUser <\/b>zugeschlagen werden, die sich indirekt alle mit diesem Benutzernamen am Server anmelden werden. Nur f&uuml;r den Login am Frontend gibt es Unterscheidungen f&uuml;r einzelne Benutzeranmeldungen.<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2009_01\/MySQLBerechtigungen-web-images\/myadmin_context_opt.jpeg\" alt=\"myadmin_context.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Abb.5: Kontextmen&uuml; f&uuml;r Benutzer im MySQL-Administrator<\/span><\/b><\/p>\n<p><b>Rechte verwalten &uuml;ber GUI-Tools<\/b><\/p>\n<p>Ein neu angelegter MySQL-Benutzer hat noch keine Rechte. Das Einzige, was ihm erlaubt ist, ist die Anmeldung am Server.<\/p>\n<p>Zugriffe auf Datenbanken und Tabellen sind ihm noch verwehrt. Entsprechende Versuche enden in der ODBC-Fehlermeldung <b>Access denied <\/b>in verschiedensten Varianten. Also sind nun Rechte zu vergeben, die sich auf mehrere Zugriffsebenen erstrecken, wovon die globalen Berechtigungen und die Schema-Berechtigungen die wichtigsten sind.<\/p>\n<p>Tats&auml;chlich gibt es auch noch die M&ouml;glichkeit, Berechtigungen gesondert f&uuml;r Tabellen und sogar deren einzelne Felder zu setzen. Die Oberfl&auml;che des MySQL-Administrators allerdings sieht daf&uuml;r kein Werkzeug vor.<\/p>\n<p>Globale Berechtigungen haben den Geltungsbereich des ganzen Servers, erstrecken sich also auf alle dort vorhandenen Datenbanken. Ist hier f&uuml;r einen Benutzer etwa die Berechtigung <b>SELECT <\/b>eingetragen (siehe Bild 7), dann kann er sich den Inhalt aller Tabellen aller Datenbanken ansehen, jedoch noch nicht manipulieren.<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2009_01\/MySQLBerechtigungen-web-images\/UserMyAdmin_Global_opt.jpeg\" alt=\"UserMyAdmin_Global.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 7: Globale Benutzerberechtigungen, im MySQL-Administrator eingestellt<\/span><\/b><\/p>\n<p>Dazu w&auml;ren Berechtigungen wie <b>INSERT<\/b>, <b>UPDATE <\/b>und <b>DELETE <\/b>n&ouml;tig. Der gemeine User Ihrer Datenbank braucht solche Berechtigungen normalerweise nicht, denn er soll ja nur mit der einen f&uuml;r ihn vorgesehenen Datenbank S&uuml;dsturm arbeiten.<\/p>\n<p>Die Berechtigungen f&uuml;r eine einzelne Datenbank lassen sich setzen, nachdem Sie den Reiter <b>Schema-Berechtigungen <\/b>im MySQL-Administrator angeklickt und ein Datenbankschema auf der linken Seite des Dialogs markiert haben (siehe Bild 8).<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2009_01\/MySQLBerechtigungen-web-images\/UserMyAdmin_Schema_opt.jpeg\" alt=\"UserMyAdmin_Schema.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 8: Benutzerberechtigungen f&uuml;r eine Datenbank, im MySQL-Administrator eingestellt<\/span><\/b><\/p>\n<p>F&uuml;gen Sie hier &uuml;ber die Pfeilschaltfl&auml;chen diejenigen Berechtigungen hinzu, die f&uuml;r das Bearbeiten der Daten in Formularen und &uuml;ber VBA-Code notwendig sind. Sp&auml;ter wird noch ausf&uuml;hrlicher davon die Rede sein, welche Berechtigungen hierf&uuml;r infrage kommen.<\/p>\n<p>Wie erw&auml;hnt, kann der MySQL Administrator keine Berechtigungen auf Tabellen- oder Feldebene steuern. Das k&ouml;nnte allerdings in einigen F&auml;llen notwendig werden, wenn Sie etwa sichergehen wollen, dass ein Benutzer unter keinen Umst&auml;nden den Inhalt einer Tabelle <b>Bankkonten <\/b>zu sehen bekommt.<\/p>\n<p>In diesem Fall sind Sie auf Unterst&uuml;tzung durch GUI-Tools wie etwa den EMS-MySQL-Manager (siehe Bild 9) oder SQLYog angewiesen &#8211; oder Sie machen das einfach &uuml;ber SQL-Anweisungen, die Sie &uuml;ber Passthrough-Abfragen oder ADO-Connections absetzen.<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2009_01\/MySQLBerechtigungen-web-images\/UserMyAdmin_EMS_opt.jpeg\" alt=\"UserMyAdmin_EMS.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 9: Berechtigungen auf Tabellen- und Feldebene, mit einem Tool von EMS gesetzt<\/span><\/b><\/p>\n<p class=\"zwischen-berschrift-oberer-spaltenrand\">User anlegen per VBA und SQL<\/p>\n<p>Die zuvor erw&auml;hnten Tools steuern die Benutzer- und Rechteverwaltung &uuml;ber SQL-Anweisungen an den Server. Was diese k&ouml;nnen, das ist Ihnen nat&uuml;rlich nicht vorenthalten.<\/p>\n<p>Dazu setzen Sie etwa SQL-Kommandos im <b>MySQL Query Browser <\/b>[1] ab oder legen einfach eine Passthrough-Abfrage unter Access an, f&uuml;r die Sie allerdings zun&auml;chst eine Windows-ODBC-Datenquelle (DSN) angelegt haben m&uuml;ssen, die JET &uuml;ber ein authentifiziertes Konto, wie <b>root<\/b>, mit dem MySQL-Server verbindet. Dieses Konto muss bereits &uuml;ber Berechtigungen zur Verwaltung von Benutzern verf&uuml;gen.<\/p>\n<p>Einen neuen Benutzer legen Sie mit dieser einfachen Anweisung an:<\/p>\n<pre>CREATE USER \"Leitung' IDENTIFIED BY \"aiu2008'<\/pre>\n<p>Hier wird nicht nur der Benutzername <b>Leitung <\/b>&uuml;bergeben, sondern auch gleich sein Zugangspasswort <b>aiu2008<\/b>. Sie k&ouml;nnen den <b>IDENTIFIED<\/b>-Teil aber auch weglassen und das Passwort separat setzen:<\/p>\n<pre>SET PASSWORD FOR \"Leitung' = PASSWORD(\"aiu2008')<\/pre>\n<p>Wichtig: In diesem Fall muss der Passwort-String erst mit der MySQL-Funktion <b>PASSWORD() <\/b>codiert werden, denn selbstverst&auml;ndlich speichert MySQL Passw&ouml;rter nicht im Klartext in seinen Systemtabellen. Heraus kommt dabei so etwas wie <b>574a23930c57b781<\/b>. Dieser Bin&auml;rstring l&auml;sst sich &uuml;brigens nicht zur&uuml;ckverwandeln.<\/p>\n<p>Kurz und b&uuml;ndig l&auml;sst sich der Benutzer schlie&szlig;lich mit folgendem Statement l&ouml;schen:<\/p>\n<pre>DROP USER \"Leitung'<\/pre>\n<p>&Uuml;brigens sind hier nur die Kurzformen der Anweisungen wiedergegeben. Tats&auml;chlich lautet das korrekte Kommando zum Anlegen eines Benutzers so:<\/p>\n<pre>CREATE USER \"Leitung'@'%'<\/pre>\n<p>Dem Benutzernamen ordnet MySQL n&auml;mlich immer auch einen Hostnamen zu, der nach dem @ angegeben werden kann. Der Hostname ist der Rechner, von dem aus sich der Benutzer mit dem Server verbindet, etwa dessen IP. Im Grunde identifiziert sich ein Benutzer also durch die Kombination aus User-Name und Rechnername.<\/p>\n<p>Da man aber &uuml;blicherweise kaum wei&szlig;, welche Rechner in einem Firmenumfeld so ans Netz gehen, w&auml;re das Verfahren m&uuml;hsam und fehleranf&auml;llig, f&uuml;r jeden Rechner gesondert Berechtigungen zu vergeben. Deshalb wird statt des Rechnernamens das Wildcard-Zeichen &#8222;%&#8216; angeh&auml;ngt, was bedeutet, dass sich der Benutzer von jeglichem Rechner aus anmelden kann. L&auml;sst man das @&#8217;%&#8216; weg, so h&auml;ngt es MySQL intern automatisch hinten dran, was die beschriebene Kurzsyntax g&uuml;ltig macht.<\/p>\n<p><b>Rechte einstellen &uuml;ber SQL<\/b><\/p>\n<p>Die SQL-Zauberworte im Zusammenhang mit der Vergabe von Berechtigungen lauten <b>GRANT <\/b>und <b>REVOKE<\/b>. Sind die Anweisungen f&uuml;r das Verwalten von Usern noch ziemlich simpel, so gibt es hier eine sehr umfangreiche Syntax mit vielen m&ouml;glichen Spezialf&auml;llen. Hier k&ouml;nnen nur die grundlegenden Anweisungen beschrieben werden.<\/p>\n<p>Die ausf&uuml;hrliche Dokumentation finden Sie in der MySQL-Referenz [2], nachdem Sie dort im Index den Begriff GRANT eingegeben haben.<\/p>\n<p><b>GRANT<\/b><\/p>\n<p>Das Prinzip f&uuml;r ein GRANT-Statement sieht so aus:<\/p>\n<pre>Gew&auml;hre BerechtigungSoundso AUF DatenbankA AN UserA<\/pre>\n<p>oder<\/p>\n<pre>GRANT &lt;Zugriffsrecht&gt; ON &lt;Datenbankobjekt&gt; TO &lt;Username&gt;[@&lt;Host&gt;]<\/pre>\n<p>Ein einfaches Beispiel, das dem Benutzer Leitung das Anzeigen und Bearbeiten aller Tabellen der Datenbank <b>suedsturm <\/b>erlaubt:<\/p>\n<pre>GRANT SELECT, INSERT, UPDATE ON suedsturm.* TO \"Leitung'@'%'<\/pre>\n<p>Hierbei wird eine Schema-Berechtigung erteilt. Sollen die gleichen Rechte f&uuml;r alle Datenbanken auf dem Server wirken, soll also eine globale Berechtigung vergeben werden, dann &auml;ndert sich die Syntax so:<\/p>\n<pre>GRANT SELECT, INSERT, UPDATE ON *.* TO \"Leitung'@'%'<\/pre>\n<p>Die Einschr&auml;nkung f&uuml;r eine einzelne Tabelle k&ouml;nnen Sie sich nun wahrscheinlich denken:<\/p>\n<pre>GRANT SELECT, INSERT, UPDATE ON suedsturm.tblKunden TO \"Leitung'<\/pre>\n<p>Den Umgang mit Rechten f&uuml;r einzelne Felder von Tabellen lassen wir hier au&szlig;en vor. Es gibt kaum Anwendungsf&auml;lle daf&uuml;r und die Fehlermeldungen im Frontend (siehe Bild 1), die solche Feldeinschr&auml;nkungen mit sich bringen, sind nur aufwendig zu handeln.<\/p>\n<p><b>REVOKE<\/b><\/p>\n<p>Gew&auml;hrte Rechte muss man auch wieder entziehen k&ouml;nnen. Das geschieht nicht etwa durch das erneute Absetzen von <b>GRANT<\/b>, sondern &uuml;ber eine <b>REVOKE<\/b>-Anweisung.<\/p>\n<pre>REVOKE ALL PRIVILEGES FROM \"Leitung'<\/pre>\n<p>Nach Ausf&uuml;hren dieses Statements steht der Benutzer Leitung wieder so rechtelos da, wie nach dem Anlegen &uuml;ber <b>CREATE USER<\/b>. Sollen Benutzerrechte etwa komplett neu vergeben werden, dann ist das unter Umst&auml;nden gar keine schlechte Idee. Meist jedoch sollen nur Einschr&auml;nkungen an bestimmten Datenbanken oder Tabellen und au&szlig;erdem nur f&uuml;r bestimmte Rechteformen ausgef&uuml;hrt werden. Das k&ouml;nnte nun etwa so aussehen:<\/p>\n<pre>REVOKE INSERT, DELETE ON suedsturm.* FROM \"Leitung'<\/pre>\n<p>Die Zeile bewirkt, dass der Benutzer Leitung anschlie&szlig;end keine Datens&auml;tze in jeglichen Tabellen der Datenbank <b>S&uuml;dsturm<\/b> mehr einf&uuml;gen oder l&ouml;schen kann. <\/p>\n<p><b>Wirkungsweise<\/b><\/p>\n<p>An sich ist die Art, wie MySQL intern Benutzer und Rechte verwaltet, ziemlich &uuml;berschaubar.<\/p>\n<p>Da gibt es zun&auml;chst die Systemtabelle <b>mysql.user<\/b>, die im Verein mit der Zusatztabelle <b>mysql.user_info <\/b>alle Benutzer enth&auml;lt.<\/p>\n<p>In der <b>user<\/b>-Tabelle sind auch gleich noch die globalen Berechtigungen abgespeichert &#8211; pro Berechtigungsart ein Feld, das entweder den Wert <b>Y <\/b>oder <b>N <\/b>annehmen kann.<\/p>\n<p>Im Prinzip k&ouml;nnen Sie, wenn die Rechte ausreichen, diese Tabelle auch direkt bearbeiten und damit in einem Schwung Benutzer anlegen und globale Rechte vergeben. Sie sollten davon besser Abstand nehmen. Es gibt nichts, was sich nicht durch <b>GRANT<\/b>&#8211; und <b>REVOKE<\/b>-Anweisungen sicherer und ohne Nebenwirkungen l&ouml;sen lie&szlig;e.<\/p>\n<p>Die Tabelle <b>mysql.db <\/b>hingegen enth&auml;lt die Berechtigungen f&uuml;r einzelne Datenbanken. Die einzelnen Berechtigungsarten verteilen sich hier jeweils auf Datens&auml;tze einer Kombination aus Hostname, Datenbankname und Benutzername.<\/p>\n<p>F&uuml;r die Berechtigungsebenen darunter sind die Tabellen <b>mysql.tables_priv <\/b>und <b>mysql.column_priv <\/b>zust&auml;ndig.<\/p>\n<p>Man sollte sich vor allem eines klar machen: Die Berechtigungen der einzelnen Ebene wirken additiv. Hat ein Benutzer die globale Berechtigung <b>SELECT<\/b>, dann hat er sie selbstverst&auml;ndlich auch f&uuml;r die Datenbank <b>S&uuml;dsturm<\/b>.<\/p>\n<p>Ein <b>REVOKE <\/b>dieser Berechtigung, wie oben beschrieben, &auml;ndert daran gar nichts. <\/p>\n<p>Im Betrieb l&auml;dt MySQL die Berechtigungen f&uuml;r einen Benutzer, der sich mit dem Server verbindet, &uuml;brigens in Speichertabellen. Sie finden diese in der Systemdatenbank <b>information_schema<\/b>.<\/p>\n<p>Dort ist bei fast allen Tabellen als Engine der Typ <b>MEMORY <\/b>verzeichnet. Setzt der Benutzer etwa ein <b>SELECT<\/b>-Statement ab, so schl&auml;gt MySQL zun&auml;chst in diesen Speichertabellen nach, ob er ausreichende Rechte an den beteiligten Tabellen besitzt. Nur im positiven Fall wird die Abfrage auch ausgef&uuml;hrt. Ansonsten gibt MySQL eine Fehlermeldung &uuml;ber den ODBC-Treiber zur&uuml;ck.<\/p>\n<p>Auch wenn dieses Nachschlagen in den Speichertabellen sehr schnell vonstatten geht, ben&ouml;tigt es zus&auml;tzliche Zeit, die selbstverst&auml;ndlich mit der Gr&ouml;&szlig;e dieser Tabellen anw&auml;chst. Die Performance eines MySQL-Servers, auf dem Abertausende von kleinsten Berechtigungen auf Feldebene vergeben sind, sinkt damit deutlich. Ein Grund mehr, es mit den Sicherheitsvorkehrungen nicht zu weit zu treiben.<\/p>\n<p>Die Tatsache, dass der Server die Rechtetabellen bei Verbindung eines Benutzers l&auml;dt, macht &uuml;brigens verst&auml;ndlich, warum neu vergebene Rechte f&uuml;r einen Benutzer erst dann greifen, nachdem er sich erneut am Server angemeldet hat.<\/p>\n<p><b>GRANT<\/b> f&uuml;hrt schlicht nicht dazu, dass der Server seine <b>information_schema <\/b>-Speichertabellen aktualisiert. Neue Anmeldung hei&szlig;t unter Access entweder Neustart des Frontends oder Neuverkn&uuml;pfen der Tabellen.<\/p>\n<p><b>Berechtigungen im Einzelnen<\/b><\/p>\n<p>Im &Uuml;berblick folgen hier die wichtigsten Rechtearten, die &uuml;ber <b>GRANT<\/b>-Anweisungen vergeben werden k&ouml;nnen:<\/p>\n<ul>\n<li class=\"aufz-hlung\"><b>SELECT<\/b>, <b>INSERT<\/b>, <b>UPDATE<\/b>, <b>DELETE<\/b>: Das sind die Berechtigungen, die jeder Benutzer der Datenbank haben sollte. Sie erlauben das Auslesen der Tabellen, das Einf&uuml;gen, Aktualisieren und L&ouml;schen von Datens&auml;tzen. Ohne diese grundlegenden Berechtigungen wird man mit einer Datenbank wohl kaum arbeiten k&ouml;nnen. <\/li>\n<li class=\"aufz-hlung\"><b>EXECUTE<\/b>: Wenn Sie gespeicherte Prozeduren oder Funktionen in Ihrer Datenbank angelegt haben, dann sollte diese Berechtigung f&uuml;r die Benutzer zus&auml;tzlich gesetzt sein. Ohne sie kann eine gespeicherte Prozedur nicht ausgef&uuml;hrt werden. Da Sie vermutlich nicht wissen, ob Sie zuk&uuml;nftig solche Prozeduren implementieren werden, kann es nicht schaden, die Berechtigung von vornherein zu vergeben.<\/li>\n<li class=\"aufz-hlung\"><b>CREATE TEMPORARY TABLES<\/b>: Sollte selten gebraucht werden. Damit ist es m&ouml;glich, dass ein Benutzer eine tempor&auml;re Tabelle, etwa f&uuml;r komplexe Abfrageergebnisse, auf dem Server anlegen kann. Wenn er sich abmeldet, dann wird diese Tabelle, die sich &uuml;brigens nur in seinem Zugriff befindet, automatisch wieder gel&ouml;scht. <\/li>\n<li class=\"aufz-hlung\"><b>SHOW DATABASES<\/b>: Erlaubt das Auflisten aller Datenbanken des Servers. Normalerweise wird ein Benutzer diese Berechtigung nicht brauchen, denn wenn er Rechte an einer bestimmten Datenbank besitzt, dann wird ihm diese auch angeboten. F&uuml;r den Datenbankverwalter ist die Einstellung aber n&uuml;tzlich.<\/li>\n<li class=\"aufz-hlung\"><b>FILE<\/b>: Es gibt unter MySQL <b>SELECT<\/b>&#8211; und <b>INSERT<\/b>-Anweisungen, die das Laden von Dateiinhalten oder das Speichern von Ergebnissen in einer Datei innerhalb von Abfragen erlauben. Es gibt wenig Gr&uuml;nde, derlei durchzuf&uuml;hren, denn im Zweifel l&auml;sst sich ein Abfrageergebnis auch in einer tempor&auml;ren Tabelle zwischenspeichern. Soll der Vorgang dennoch m&ouml;glich sein, dann muss dezidiert die Berechtigung &uuml;ber FILE vergeben sein.<\/li>\n<li class=\"aufz-hlung\"><b>ALL<\/b>: Der Benutzer bekommt hiermit alle m&ouml;glichen Berechtigungen mit einer Ausnahme: Er kann selbst keine neuen User anlegen oder deren Berechtigungen verwalten.<\/p>\n<p>Diese Einstellung ergibt zudem nur f&uuml;r einen Datenbankadministrator Sinn.<\/li>\n<li class=\"aufz-hlung\"><b>CREATE &#8230;<\/b>, <b>DROP&#8230;<\/b>, <b>ALTER&#8230;<\/b>, <b>INDEX<\/b>, <b>EVENT<\/b>, <b>TRIGGER<\/b>: Das Erzeugen, ndern und L&ouml;schen von Datenbankobjekten ist nichts, was ein Benutzer ausf&uuml;hren k&ouml;nnen sollte. Diese Berechtigungen bleiben dem Datenbankadministrator vorbehalten, und meist auch nur dann, wenn er mit dem Entwickler identisch ist.<\/li>\n<li class=\"aufz-hlung\"><b>CREATE USER<\/b>, <b>GRANT OPTION<\/b>: Nur mit diesen Berechtigungen versehen kann ein Benutzer neue andere Benutzer anlegen, verwalten und Berechtigungen auf Datenbankobjekte f&uuml;r diese einstellen. Und dieser Benutzer sollte demnach der Datenbankadministrator sein. Bei anderen Benutzern hat die Einstellung nichts zu suchen.<\/li>\n<\/ul>\n<p class=\"text-aufzaehlung-ohnepunkt\">Die Berechtigung <b>GRANT OPTION <\/b>ist &uuml;brigens ein Spezialfall. Erstens f&uuml;hrt sie automatisch dazu, dass auch <b>CREATE USER <\/b>gesetzt wird, und zweitens ben&ouml;tigt sie eine andere Syntax:<\/p>\n<p class=\"quellcode-aufzaehlung\">GRANT SELECT ON suedsturm.* TO sLeitung&#8216; WITH GRANT OPTION<\/p>\n<p class=\"text-aufzaehlung-ohnepunkt\">Sie kann also nicht alleinstehend gesetzt werden, sondern nur kombiniert mit einer anderen Berechtigungsart &#8211; hier dem <b>SELECT<\/b>.<\/p>\n<p>Anders verh&auml;lt es sich mit <b>REVOKE<\/b>. Hier kann das Recht separat entzogen werden:<\/p>\n<p class=\"quellcode-aufzaehlung\">REVOKE GRANT OPTION ON suedsturm.* FROM &#8222;Leitung&#8216;<\/p>\n<p class=\"text-aufzaehlung-ohnepunkt\">Und noch etwas: <b>GRANT OPTION <\/b>bedeutet nicht, dass ein so ausgestatteter User beliebige Berechtigungen an andere User vergeben k&ouml;nnte. Vielmehr sind es maximal nur jene, die er auch selbst besitzt. Hat er nur <b>SELECT<\/b>-Rechte an den Tabellen einer Datenbank, so f&uuml;hrt <b>GRANT OPTION <\/b>dazu, dass er anderen Benutzern eben auch nur ein <b>SELECT-GRANT <\/b>erteilen kann. Alles andere f&uuml;hrt zu Fehlermeldungen.<\/p>\n<ul>\n<li class=\"aufz-hlung\">Sonstige: Alle anderen <b>GRANT<\/b>-Anweisungen sind f&uuml;r den normalen Betrieb meist ohne Belang und haben h&ouml;chstens f&uuml;r den fortgeschrittenen Entwickler Bedeutung.<\/li>\n<\/ul>\n<p>Noch ein Hinweis zum hier &ouml;fters verwendeten Begriff <b>Datenbankadministrator<\/b>: Damit ist nicht der Verwalter des MySQL-Servers gemeint, wie etwa <b>root<\/b>, sondern der Verwalter der fraglichen Datenbank. Ein Administrator f&uuml;r die Datenbank <b>suedsturm<\/b> kann volle Berechtigungen auf diese haben, jedoch andere Datenbanken auf dem Server noch nicht mal zu sehen bekommen.<\/p>\n<p>In der Demodatenbank <b>suedsturm_ mysql4.mdb <\/b>ist das der Super-User <b>SuedsturmAdmin<\/b>. Er sollte alle m&ouml;glichen Rechte auf die Datenbank <b>S&uuml;dsturm <\/b>besitzen.<\/p>\n<p>F&uuml;r das Neuverkn&uuml;pfen der Frontend-Tabellen zum Server ist in unserem Beispiel &uuml;brigens nur eine einzige Berechtigung n&ouml;tig: <b>SELECT <\/b>auf die Datenbank <b>suedsturm<\/b>. Das reicht, um eine Connection herzustellen und die Tabellen <b>tblUser <\/b>und <b>tblGruppen <\/b>auszulesen.<\/p>\n<p><b>S&uuml;dsturm-Demo<\/b><\/p>\n<p>Nachdem Sie das beigepackte SQL-Skript, ein Backup der S&uuml;dsturm-Datenbank, &uuml;ber die <b>Wiederherstellen<\/b>-Funktion des <b>MySQL-Administrators <\/b>eingelesen haben, sollte dem Einsatz der Frontend-MDB nichts im Wege stehen.<\/p>\n<p>Die Beschreibung der Funktionen des Frontends kann hier nur sehr verk&uuml;rzt erfolgen. Schauen Sie sich bei weitergehendem Interesse einfach die enthaltenen Module genauer an. Es sollte auch erw&auml;hnt werden, dass die Demo nur einen von vielen m&ouml;glichen Wegen aufzeigt, wie ein Berechtigungssystem im Frontend realisiert werden kann.<\/p>\n<p>Beim Start des Frontends wird &uuml;ber das <b>AutoExec<\/b>-Makro zun&auml;chst die Prozedur <b>StartDB <\/b>im Modul <b>mdlMain <\/b>aufgerufen. Sie hat eigentlich nur die Aufgabe, eine Verbindung zum Server aufzunehmen, die Tabellen und Passthrough-Abfragen neu zu verkn&uuml;pfen und schlie&szlig;lich den S&uuml;dsturm-Benutzer anzumelden &#8211; richtiger: den Zugang der Gruppe, der er &uuml;ber die Tabellen <b>tblGruppen <\/b>und <b>tblUser <\/b>angeh&ouml;rt.<\/p>\n<p>Dazu werden &uuml;ber das ODBC-API erst mal Verbindungstests ausgef&uuml;hrt. F&uuml;r eine Verbindung sind drei Angaben zwingend erforderlich: Benutzername, Passwort und Serverinstanz. Als Server ist in der Demo der <b>localhost<\/b> hartcodiert. Gibt es diesen Server nicht, so fordert ein Dialog zur Eingabe der korrekten IP auf.<\/p>\n<p>Woher aber kommen Benutzername und Passwort Man k&ouml;nnte die beiden Angaben auch weglassen, was dazu f&uuml;hrt, dass der treibereigene Dialog von MyODBC erscheint, mit dem Ihre Anwender wohl eher nicht gl&uuml;cklich werden. Stattdessen sind die beiden Angaben initial fest in die Datenbank eingebaut, und zwar als benutzerdefinierte Eigenschaften <b>AdminUser <\/b>und <b>AdminPassword <\/b>von <b>CurrentDb<\/b>.<\/p>\n<p>Sie k&ouml;nnten die Strings auch hartcodiert im Code hinterlegen, was aber den Nachteil hat, dass sie damit nicht mehr ver&auml;nderbar sind. Benutzerdefinierte Datenbankeigenschaften dagegen lassen sich jederzeit neu setzen, bleiben aber dem Auge des Anwenders dennoch verborgen.<\/p>\n<p>Da Ihr MySQL-Server die Benutzergruppen der Tabelle <b>tblGruppen <\/b>sicherlich nicht kennt, wird beim ersten Start zum Neuverkn&uuml;pfen der Tabellen ein Dialog erscheinen, der die Angabe eines Accounts mit ausreichenden Rechten verlangt. Danach werden die Tabellen verlinkt, wodurch &uuml;berhaupt erst die Tabellen <b>tblUser <\/b>und <b>tblGruppen <\/b>verf&uuml;gbar werden. Erst jetzt startet das Login-Formular, &uuml;ber das sich der Anwender an S&uuml;dsturm anmelden kann (siehe Bild 10).<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2009_01\/MySQLBerechtigungen-web-images\/Userlogin_opt.jpeg\" alt=\"Userlogin.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 10: Login an der Demo-Datenbank &uuml;ber ein eigenes Formular<\/span><\/b><\/p>\n<p>So unscheinbar dieses Formular auch wirkt, verbirgt sich dahinter doch einiger Code. Denn der eingegebene Benutzername ist ja nicht der, mit dem der User an MySQL angemeldet werden soll.<\/p>\n<p>Vielmehr muss erst ermittelt werden, welcher Benutzergruppe er angeh&ouml;rt, deren Name und Passwort ausgelesen und erst dann eine erneute Verbindung unter anderem Namen am Server vollzogen werden. Dies geschieht &uuml;ber ADO-Connections und -Recordsets. Neue Verbindung Man hat leider keinerlei Einfluss auf die interne Verbindung, die JET zum ODBC-Treiber aufbaut, und man kann sie auch nicht so einfach beenden.<\/p>\n<p>Infolge des internen Connection-Poolings bleibt sie f&uuml;r etwa 10 Minuten bestehen. Werden die Tabellen aber neu verkn&uuml;pft, dann &auml;ndert sich auch diese Connection wieder.<\/p>\n<p>Genau das passiert nach dem Schlie&szlig;en des Login-Formulars. Die Tabellen und Abfragen werden nochmals neu verkn&uuml;pft, aber diesmal unter dem Gruppennamen des Users. Ab da greifen auch die f&uuml;r die Gruppe vergebenen Rechte und Einschr&auml;nkungen auf die verkn&uuml;pften Tabellen oder auf Daten in Recordsets.<\/p>\n<p>Damit Sie nicht erst alle S&uuml;dsturm-Gruppen-Accounts auf Ihrem Server einrichten m&uuml;ssen, enth&auml;lt die Datenbank mit dem Formular <b>frmAdministration <\/b>(siehe Bild 11) ein besonderes Schmankerl.<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2009_01\/MySQLBerechtigungen-web-images\/DemoUserAdmin_opt.jpeg\" alt=\"DemoUserAdmin.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 11: Formular zur Verwaltung von Gruppen und Benutzern in der Demo-Datenbank<\/span><\/b><\/p>\n<p>&Uuml;ber das Formular k&ouml;nnen neue Benutzer angelegt sowie deren Berechtigungen gesetzt werden &#8211; sowohl globale wie S&uuml;dsturm-Berechtigungen. Zum Einsatz kommen dabei die oben beschriebenen SQL-Anweisungen zur Berechtigungssteuerung.<\/p>\n<p>Wenn Sie den Code des Klassenmoduls studieren, dann achten Sie auf das Zusammensetzen von SQL-Strings und das Absetzen dieser &uuml;ber ADO-Connections. Man k&ouml;nnte daf&uuml;r zwar auch ODBCDirect-Arbeitsbereiche einsetzen, sollte sich im Hinblick auf Access 2007 und Folgeversionen, die dies nicht mehr unterst&uuml;tzen, aber eher an ADO gew&ouml;hnen.<\/p>\n<p><b>Zusammenfassung<\/b><\/p>\n<p>Wenn Sie die begleitende Demo-Datenbank <b>suedsturm_ mysql4.mdb <\/b>ausprobieren m&ouml;chten, so beachten Sie bitte die Ausf&uuml;hrungen in der Textdatei <b>readme.txt<\/b>. Dort stehen, vor allem f&uuml;r Leser, die nicht &uuml;ber die fr&uuml;heren Folgen der MySQL-Reihe verf&uuml;gen, genauere Installationshinweise.<\/p>\n<p>Hier konnte nur ein kurzer Einstieg in die Benutzer- und Berechtigungsverwaltung von MySQL gegeben werden, da das Thema doch recht komplex ist. Weiterf&uuml;hrende Informationen erhalten Sie vor allem, wenn Sie im Index des MYSQL-Referenzhandbuchs [2] den Begriff <b>GRANT <\/b>eingeben.<\/p>\n<p>Mit den Informationen dieses Beitrags im Gep&auml;ck sollten Sie nochmals in sich gehen und vor allem eines tun: sich Gedanken &uuml;ber das Berechtigungskonzept Ihrer aktuellen und zuk&uuml;nftigen MySQL-Datenbanken machen. Was von vornherein gut geplant ist, das bereitet sp&auml;ter umso weniger Kopfzerbrechen.<\/p>\n<p class=\"zwischen-berschriftquellen\">Links<\/p>\n<p class=\"quellen\">[1] MySQL Administrator und andere Tools: http:\/\/dev.mysql.com\/downloads\/gui-tools\/5.0.html<\/p>\n<p class=\"quellen\">[2] MySQL-Handbuch 5.1: http:\/\/dev.mysql.com\/doc\/refman\/5.1\/de\/index.html<\/p>\n<h3>Downloads zu diesem Beitrag<\/h3>\n<p>Enthaltene Beispieldateien:<\/p>\n<p>readme.txt<\/p>\n<p>Suedsturm_Backup4.sql<\/p>\n<p>Suedsturm_mysql4.mdb<\/p>\n<p><a href=\"..\/fileadmin\/beispiele\/{A58A5FCA-4E70-40CF-9AC3-6C754F8B94D4}\/aiu_649.zip\">Download<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Im vorherigen Beitrag zum Thema Access und MySQL wurde unsere S&uuml;dsturm-Datenbank auf einen MySQL-Server migriert und das Frontend zur Zusammenarbeit mit ihm &uuml;berredet. Dabei blieb eine Kleinigkeit auf der Strecke: Die Anmeldung am Server lief &uuml;ber einen Administrator-Account, was im Alltag so besser nicht vorkommen sollte. Sehen wir also in dieser Ausgabe, wie dem unbeschr&auml;nkten Zugriff Riegel vorgeschoben werden k&ouml;nnen.<\/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":[66012009,662009,44000027,44000022],"tags":[],"class_list":["post-55000649","post","type-post","status-publish","format-standard","hentry","category-66012009","category-662009","category-Loesungen","category-SQL_Server_und_Co"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.9 (Yoast SEO v27.3) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Access, MySQL und Berechtigungsverwaltung - 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_MySQL_und_Berechtigungsverwaltung\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Access, MySQL und Berechtigungsverwaltung\" \/>\n<meta property=\"og:description\" content=\"Im vorherigen Beitrag zum Thema Access und MySQL wurde unsere S&uuml;dsturm-Datenbank auf einen MySQL-Server migriert und das Frontend zur Zusammenarbeit mit ihm &uuml;berredet. Dabei blieb eine Kleinigkeit auf der Strecke: Die Anmeldung am Server lief &uuml;ber einen Administrator-Account, was im Alltag so besser nicht vorkommen sollte. Sehen wir also in dieser Ausgabe, wie dem unbeschr&auml;nkten Zugriff Riegel vorgeschoben werden k&ouml;nnen.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-im-unternehmen.de\/Access_MySQL_und_Berechtigungsverwaltung\/\" \/>\n<meta property=\"og:site_name\" content=\"Access im Unternehmen\" \/>\n<meta property=\"article:published_time\" content=\"2020-05-22T22:21:01+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/vg09.met.vgwort.de\/na\/1294713a58824d1583eff2c1781f84f1\" \/>\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=\"26\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_MySQL_und_Berechtigungsverwaltung\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Access_MySQL_und_Berechtigungsverwaltung\\\/\"},\"author\":{\"name\":\"Andr\u00e9 Minhorst\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\"},\"headline\":\"Access, MySQL und Berechtigungsverwaltung\",\"datePublished\":\"2020-05-22T22:21:01+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Access_MySQL_und_Berechtigungsverwaltung\\\/\"},\"wordCount\":5095,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Access_MySQL_und_Berechtigungsverwaltung\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg09.met.vgwort.de\\\/na\\\/1294713a58824d1583eff2c1781f84f1\",\"articleSection\":[\"1\\\/2009\",\"2009\",\"L\u00f6sungen\",\"SQL Server und Co.\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Access_MySQL_und_Berechtigungsverwaltung\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Access_MySQL_und_Berechtigungsverwaltung\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Access_MySQL_und_Berechtigungsverwaltung\\\/\",\"name\":\"Access, MySQL und Berechtigungsverwaltung - Access im Unternehmen\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Access_MySQL_und_Berechtigungsverwaltung\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Access_MySQL_und_Berechtigungsverwaltung\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg09.met.vgwort.de\\\/na\\\/1294713a58824d1583eff2c1781f84f1\",\"datePublished\":\"2020-05-22T22:21:01+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Access_MySQL_und_Berechtigungsverwaltung\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Access_MySQL_und_Berechtigungsverwaltung\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Access_MySQL_und_Berechtigungsverwaltung\\\/#primaryimage\",\"url\":\"http:\\\/\\\/vg09.met.vgwort.de\\\/na\\\/1294713a58824d1583eff2c1781f84f1\",\"contentUrl\":\"http:\\\/\\\/vg09.met.vgwort.de\\\/na\\\/1294713a58824d1583eff2c1781f84f1\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Access_MySQL_und_Berechtigungsverwaltung\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Access, MySQL und Berechtigungsverwaltung\"}]},{\"@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":"Access, MySQL und Berechtigungsverwaltung - 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_MySQL_und_Berechtigungsverwaltung\/","og_locale":"de_DE","og_type":"article","og_title":"Access, MySQL und Berechtigungsverwaltung","og_description":"Im vorherigen Beitrag zum Thema Access und MySQL wurde unsere S&uuml;dsturm-Datenbank auf einen MySQL-Server migriert und das Frontend zur Zusammenarbeit mit ihm &uuml;berredet. Dabei blieb eine Kleinigkeit auf der Strecke: Die Anmeldung am Server lief &uuml;ber einen Administrator-Account, was im Alltag so besser nicht vorkommen sollte. Sehen wir also in dieser Ausgabe, wie dem unbeschr&auml;nkten Zugriff Riegel vorgeschoben werden k&ouml;nnen.","og_url":"https:\/\/access-im-unternehmen.de\/Access_MySQL_und_Berechtigungsverwaltung\/","og_site_name":"Access im Unternehmen","article_published_time":"2020-05-22T22:21:01+00:00","og_image":[{"url":"http:\/\/vg09.met.vgwort.de\/na\/1294713a58824d1583eff2c1781f84f1","type":"","width":"","height":""}],"author":"Andr\u00e9 Minhorst","twitter_card":"summary_large_image","twitter_misc":{"Verfasst von":"Andr\u00e9 Minhorst","Gesch\u00e4tzte Lesezeit":"26\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/access-im-unternehmen.de\/Access_MySQL_und_Berechtigungsverwaltung\/#article","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/Access_MySQL_und_Berechtigungsverwaltung\/"},"author":{"name":"Andr\u00e9 Minhorst","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f"},"headline":"Access, MySQL und Berechtigungsverwaltung","datePublished":"2020-05-22T22:21:01+00:00","mainEntityOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Access_MySQL_und_Berechtigungsverwaltung\/"},"wordCount":5095,"commentCount":0,"publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Access_MySQL_und_Berechtigungsverwaltung\/#primaryimage"},"thumbnailUrl":"http:\/\/vg09.met.vgwort.de\/na\/1294713a58824d1583eff2c1781f84f1","articleSection":["1\/2009","2009","L\u00f6sungen","SQL Server und Co."],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/access-im-unternehmen.de\/Access_MySQL_und_Berechtigungsverwaltung\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/access-im-unternehmen.de\/Access_MySQL_und_Berechtigungsverwaltung\/","url":"https:\/\/access-im-unternehmen.de\/Access_MySQL_und_Berechtigungsverwaltung\/","name":"Access, MySQL und Berechtigungsverwaltung - Access im Unternehmen","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Access_MySQL_und_Berechtigungsverwaltung\/#primaryimage"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Access_MySQL_und_Berechtigungsverwaltung\/#primaryimage"},"thumbnailUrl":"http:\/\/vg09.met.vgwort.de\/na\/1294713a58824d1583eff2c1781f84f1","datePublished":"2020-05-22T22:21:01+00:00","breadcrumb":{"@id":"https:\/\/access-im-unternehmen.de\/Access_MySQL_und_Berechtigungsverwaltung\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/access-im-unternehmen.de\/Access_MySQL_und_Berechtigungsverwaltung\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/Access_MySQL_und_Berechtigungsverwaltung\/#primaryimage","url":"http:\/\/vg09.met.vgwort.de\/na\/1294713a58824d1583eff2c1781f84f1","contentUrl":"http:\/\/vg09.met.vgwort.de\/na\/1294713a58824d1583eff2c1781f84f1"},{"@type":"BreadcrumbList","@id":"https:\/\/access-im-unternehmen.de\/Access_MySQL_und_Berechtigungsverwaltung\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/access-im-unternehmen.de\/"},{"@type":"ListItem","position":2,"name":"Access, MySQL und Berechtigungsverwaltung"}]},{"@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\/55000649","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=55000649"}],"version-history":[{"count":0,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55000649\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/media?parent=55000649"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/categories?post=55000649"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/tags?post=55000649"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}