{"id":55000797,"date":"2011-10-01T00:00:00","date_gmt":"2020-05-22T21:58:03","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=797"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Registrierung_von_Anwendungen","status":"publish","type":"post","link":"https:\/\/access-im-unternehmen.de\/Registrierung_von_Anwendungen\/","title":{"rendered":"Registrierung von Anwendungen"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/vg01.met.vgwort.de\/na\/281682a3b0c24f8dae23ec286bd2b749\" width=\"1\" height=\"1\" alt=\"\"><\/p>\n<p><b>Wenn Sie eine Anwendung programmieren und sp&auml;ter als L&ouml;sung verkaufen m&ouml;chten, m&uuml;ssen Sie auf irgendeine Weise sicherstellen, dass nur der jeweilige K&auml;ufer damit arbeiten kann. Anderenfalls passiert es leicht, dass dieser die Anwendung an andere Nutzer weitergibt &#8211; vielleicht sogar ohne das Bewusstsein, dass er den Hersteller der Software um seinen Lohn bringt. In diesem Beitrag stellen wir Ihnen eine L&ouml;sung vor, mit der Sie Ihre Anwendungen vor der Weitergabe an Dritte sch&uuml;tzen &#8211; und das sogar mit zeitlicher Begrenzung.<\/b><\/p>\n<p>Bei der in diesem Beitrag beschriebenen L&ouml;sung gehen wir zun&auml;chst davon aus, dass der Benutzer sich eine Anwendung aus dem Internet herunterl&auml;dt oder diese per E-Mail von Ihnen erh&auml;lt.<\/p>\n<p>Nach der Installation soll die Anwendung beim ersten Start pr&uuml;fen, ob der Benutzer einen Satz von Registrierungsdaten eingegeben hat, die aus einem Benutzernamen und einem Registrierungsschl&uuml;ssel bestehen.<\/p>\n<p>Ist dies geschehen und sind die Registrierungsdaten g&uuml;ltig, sollen diese Daten irgendwo in der Anwendung gespeichert werden und die Anwendung starten.<\/p>\n<p>Bei jedem folgenden Aufruf liest die Anwendung die gespeicherten Registrierungsdaten automatisch aus und bricht den Start entweder ab oder f&uuml;hrt die Anwendung aus &#8211; je nachdem, ob die Registrierungsdaten noch g&uuml;ltig sind.<\/p>\n<p class=\"zwischen-berschrift-oberer-spaltenrand\">Bindung des Registrierungsschl&uuml;ssels an den Benutzernamen<\/p>\n<p>Damit der Registrierungsschl&uuml;ssel nicht von beliebigen Benutzern verwendet werden kann, wird dieser mindestens auf Basis des Benutzernamens erstellt. F&uuml;r die Verschl&uuml;sselung des Namens und somit die Erstellung des Registrierungsschl&uuml;ssels verwenden wir die in der Klasse <b>clsCrypt <\/b>enthaltenen Algorithmen etwa zum Berechnen eines <b>SHA1<\/b>-verschl&uuml;sselten Ausdrucks (Quellenangabe siehe Beispieldatenbank).<\/p>\n<p><b>SHA<\/b> steht f&uuml;r <b>Secure Hash Algorithm<\/b>. Dieser Algorithmus soll einen eindeutigen Pr&uuml;fwert etwa f&uuml;r eine Zeichenkette liefern, also einen Wert, der vom Inhalt der Zeichenkette abh&auml;ngt.<\/p>\n<p>Wenn Sie also sicherstellen m&ouml;chten, dass die Anwendung nur von einem Benutzer verwendet wird, der als Benutzername seinen Namen und als Registrierungsschl&uuml;ssel den Hash-Wert einsetzt, brauchen Sie nur einen solchen Wert zu berechnen und sp&auml;ter beim Start der Anwendung zu pr&uuml;fen, ob die Kombination dieser beiden Werte zusammenpasst.<\/p>\n<p>Den Aufruf der Methode <b>GetSHA1 <\/b>dieser Klasse haben wir wie in <span class=\"verweis-ohneumbruch\"><a href=\"#anker-47-anchor\">Listing 1<\/a><\/span> im Modul <b>mdlTools <\/b>gekapselt.<\/p>\n<p class=\"listingueberschrift\">Listing 1: Aufruf der Verschl&uuml;sselungsfunktionen der Klasse clsCrypt<\/p>\n<pre>Public Function GetSHA1(strKey As String) As String\r\n    Dim objCrypt As New clsCrypt\r\n    Dim strSHA1 As String\r\n    strSHA1 = objCrypt.GetSHA1(strKey)\r\n    GetSHA1 = strSHA1\r\n    Set objCrypt = Nothing\r\nEnd Function<\/pre>\n<p>Im Direktfenster testen Sie diese Funktion etwa so:<\/p>\n<pre> GetSHA1(&quot;Klaus M&uuml;ller&quot;)\r\n04538C3BBD1B721D87F6570B577D1D0A3E7390AD<\/pre>\n<p>Angenommen, Sie h&auml;tten einem Klaus M&uuml;ller diese Kombination aus Benutzername und Registrierungsschl&uuml;ssel geschickt, muss er diese beim ersten Start einer Anwendung eingeben.<\/p>\n<p>Die Kombination wird dann irgendwo in der Datenbank gespeichert, damit der Benutzer diese beim n&auml;chsten Start nicht erneut eingeben muss. Dies k&ouml;nnte beispielsweise in einer eigens daf&uuml;r eingerichteten Tabelle geschehen. Diese nennen Sie <b>tblRegistrierung <\/b>und legen die beiden Felder <b>Benutzername <\/b>und <b>Registrierungsschluessel <\/b>an, sodass die Tabelle wie in Bild 1 aussieht.<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2011_05\/Registrierung-web-images\/pic001.png\" alt=\"pic001.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 1: Tabelle zum Speichern der Benutzerdaten<\/span><\/b><\/p>\n<p><b>Formular beim &Ouml;ffnen anzeigen<\/b><\/p>\n<p>Nach dieser Vorbereitung ben&ouml;tigen wir einen Ort, an dem wir die Pr&uuml;fung der Benutzerdaten durchf&uuml;hren &#8211; sofern diese &uuml;berhaupt bereits vorliegen. Daf&uuml;r legen Sie ein Formular an, das an die Tabelle <b>tblRegistrierung <\/b>gebunden ist und den Namen <b>frmStart <\/b>erh&auml;lt. Legen Sie dieses Formular in den Access-Optionen als Startformular fest, sodass dieses gleich nach dem Start der Anmeldung erscheint.<\/p>\n<p>Das Formular enth&auml;lt vier Steuerelemente: zwei Textfelder namens <b>txtBenutzername <\/b>und <b>txtRegistrierungsschluessel<\/b>, die an die beiden Felder der Datenherkunft gebunden sind, sowie zwei Schaltfl&auml;chen namens <b>cmdOK <\/b>und <b>cmdAbbrechen<\/b> (s. Bild 2).<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2011_05\/Registrierung-web-images\/pic002.png\" alt=\"pic002.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 2: Formular zur Eingabe der Benutzerdaten<\/span><\/b><\/p>\n<p>Die Schaltfl&auml;che <b>cmdAbbrechen <\/b>soll die Eingabe der Benutzerdaten abbrechen und die Anwendung schlie&szlig;en. Daf&uuml;r hinterlegen Sie f&uuml;r diese Schaltfl&auml;che die folgende Prozedur:<\/p>\n<pre>Private Sub cmdAbbrechen_Click()\r\n    DoCmd.Quit\r\n    End Sub<\/pre>\n<p>Stellen Sie au&szlig;erdem die Eigenschaft <b>Abbrechen <\/b>der Schaltfl&auml;che auf den Wert <b>Ja <\/b>ein. Dies sorgt daf&uuml;r, dass die Anwendung auch beim Bet&auml;tigen der <b>Escape<\/b>-Taste geschlossen wird. Das Pr&uuml;fen der Benutzerdaten erledigt eine kleine Funktion namens <b>BenutzerdatenPruefen<\/b> (s. <span class=\"verweis-ohneumbruch\"><a href=\"#anker-48-anchor\">Listing 2<\/a><\/span>).<\/p>\n<p class=\"listingueberschrift\">Listing 2: Pr&uuml;fung der Benutzerdaten<\/p>\n<pre>Private Function BenutzerdatenPruefen() As Boolean\r\n    BenutzerdatenPruefen = (GetSHA1(Nz(Me!txtBenutzername)) = Nz(Me!txtRegistrierungsschluessel))\r\nEnd Function<\/pre>\n<p>Die Funktion ermittelt den Hash-Wert des Benutzernamens und vergleicht diesen mit dem f&uuml;r den Registrierungsschl&uuml;ssel angegebenen Wert. Stimmen beide &uuml;berein, liefert die Funktion den Wert <b>True <\/b>zur&uuml;ck.<\/p>\n<p>Beim &Ouml;ffnen des Formulars wird diese Funktion erstmalig aufgerufen. Dazu legen Sie f&uuml;r das Ereignis <b>Beim Laden <\/b>des Formulars die folgende Prozedur an:<\/p>\n<pre>Private Sub Form_Load()\r\n    If BenutzerdatenPruefen Then\r\n        DoCmd.Close acForm, Me.Name\r\n        DoCmd.OpenForm &quot;frmMain&quot;\r\n    End If\r\n    End Sub<\/pre>\n<p>War die Pr&uuml;fung erfolgreich, schlie&szlig;t die Prozedur einfach das aktuelle Formular und &ouml;ffnet ein weiteres Formular namens <b>frmMain<\/b>, das beispielsweise dem Hauptformular der Anwendung entspricht. Sie k&ouml;nnen nat&uuml;rlich auch einfach das Formular schlie&szlig;en und die verf&uuml;gbaren Funktionen in der Men&uuml;leiste oder im Ribbon anzeigen.<\/p>\n<p>Stimmen der Hash-Wert des Benutzernamens und der Registrierungsschl&uuml;ssel nicht &uuml;berein, bleibt das Formular einfach ge&ouml;ffnet. Der Benutzer hat dann die Gelegenheit, die Benutzerdaten einzugeben. Die Eingabe beendet der Benutzer mit einem Klick auf die Schaltfl&auml;che <b>OK<\/b>, was die folgende Prozedur ausl&ouml;st:<\/p>\n<pre>Private Sub cmdOK_Click()\r\n    If BenutzerdatenPruefen Then\r\n        DoCmd.Close acForm, Me.Name\r\n        DoCmd.OpenForm &quot;frmMain&quot;\r\n    Else\r\n        MsgBox &quot;Falsche Benutzerdaten.&quot;\r\n    End If\r\n    End Sub<\/pre>\n<p>Hier erfolgt die gleiche Pr&uuml;fung wie beim Laden des Formulars. Im Erfolgsfall wird das Formular geschlossen und <b>frmMain <\/b>ge&ouml;ffnet. Stimmt die Kombination aus Benutzername und Registrierungsschl&uuml;ssel nicht, erscheint eine Meldung mit dem Text <b>Falsche Benutzerdaten<\/b>. Der Benutzer kann dann erneut seine Daten eingeben oder mit einem Klick auf <b>Abbrechen <\/b>die Anwendung beenden (s. Bild 3).<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2011_05\/Registrierung-web-images\/pic005.png\" alt=\"pic005.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 4: Prinzipieller Ablauf beim Pr&uuml;fen und Eingeben der Registrierungsdaten<\/span><\/b><\/p>\n<p><!--30percent--><\/p>\n<p>Bild 4 zeigt den prinzipiellen Ablauf beim Eingeben und Pr&uuml;fen der Registrierungsdaten.<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2011_05\/Registrierung-web-images\/pic003.png\" alt=\"pic003.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 3: Beim Eingeben falscher Benutzerdaten erscheint eine Meldung.<\/span><\/b><\/p>\n<p><b>Anwendung sch&uuml;tzen<\/b><\/p>\n<p>Die bisherigen Bem&uuml;hungen helfen nun nat&uuml;rlich nicht weiter, wenn Sie den Benutzer nicht vom Einsehen des Quellcodes abhalten. Dazu erstellen Sie aus der <b>.mdb<\/b>&#8211; oder <b>.accdb<\/b>-Anwendung eine <b>.mde<\/b>&#8211; oder <b>.accde<\/b>-Datenbank mit gesch&uuml;tztem Code und mit gesperrten Entwurfsansichten.<\/p>\n<p>Der Benutzer kann den Mechanismus zum Pr&uuml;fen der Benutzerdaten dann nicht einsehen und diesen nicht einfach reproduzieren, um selbst Zugangsdaten zu erzeugen.<\/p>\n<p><b>Umgehen der Registrierung verhindern<\/b><\/p>\n<p>Nat&uuml;rlich k&ouml;nnte der Benutzer einfach direkt auf die &uuml;brigen Formulare der Anwendung zugreifen, indem er diese &uuml;ber das Datenbankfenster oder den Navigationsbereich &ouml;ffnet. Die Anzeige dieser Bereiche l&auml;sst sich zwar auch unterbinden, aber ein erfahrener Access-Entwickler kann diese dennoch anzeigen. Au&szlig;erdem w&auml;re hierf&uuml;r der Einsatz des Sicherheitssystems erforderlich, was aber ab Access 2007 offiziell nicht mehr unterst&uuml;tzt wird.<\/p>\n<p>Da wir den Entwurf und den Code von Formularen, Berichten und Modulen aber ohnehin sch&uuml;tzen, k&ouml;nnen wir auch gleich einen Mechanismus in die Formulare einbauen, der vor dem &Ouml;ffnen die Benutzerdaten pr&uuml;ft. Dies erreichen Sie beispielsweise durch eine &auml;hnliche Pr&uuml;fung wie im Startformular. Damit das Formular nicht ge&ouml;ffnet wird, wenn keine g&uuml;ltigen Benutzerdaten vorliegen, legen Sie die folgende Prozedur f&uuml;r das Ereignis <b>Beim &Ouml;ffnen <\/b>des Formulars an:<\/p>\n<pre>Private Sub Form_Open(Cancel As Integer)\r\n    Cancel = BenutzerdatenGueltig\r\n    End Sub<\/pre>\n<p>Die Pr&uuml;fung der Benutzerdaten haben wir derweil in eine eigene Funktion ausgegliedert, die sich im Modul <b>mdlTools <\/b>befindet (s. <span class=\"verweis-ohneumbruch\"><a href=\"#anker-49-anchor\">Listing 3<\/a><\/span>).<\/p>\n<p class=\"listingueberschrift\">Listing 3: Abgleich von Benutzername und Registrierungsschl&uuml;ssel<\/p>\n<pre>Public Function BenutzerdatenGueltig() As Boolean\r\n    Dim strBenutzername As String\r\n    Dim strRegistrierungsschluessel As String\r\n    strBenutzername = Nz(DLookup(&quot;Benutzername&quot;, &quot;tblBenutzerdaten&quot;))\r\n    strRegistrierungsschluessel = Nz(DLookup(&quot;Registrierungsschluessel&quot;, &quot;tblBenutzerdaten&quot;))\r\n    If Not GetSHA1(strBenutzername) = strRegistrierungsschluessel Then\r\n        BenutzerdatenGueltig = True\r\n    End If\r\nEnd Function<\/pre>\n<p>Die Prozedur <b>Form_Open <\/b>pr&uuml;ft nun mithilfe der Funktion <b>BenutzerdatenGueltig<\/b>, ob die Tabelle <b>tblBenutzerdaten <\/b>einen g&uuml;ltigen Satz von Benutzerdaten enth&auml;lt. Falls nicht, liefert <b>BenutzerdatenGueltig <\/b>den Wert <b>False <\/b>zur&uuml;ck, der gleich dem Parameter <b>Cancel <\/b>der Prozedur <b>Form_Open <\/b>&uuml;bergeben wird. Dies bedeutet, dass der &Ouml;ffnen-Vorgang des Formulars gleich unterbrochen und das Formular nicht ge&ouml;ffnet wird. Eine solche Pr&uuml;fung m&uuml;ssten Sie zumindest den wichtigsten Formularen zuweisen, um die Anwendung ohne g&uuml;ltige Benutzerdaten unbenutzbar zu machen.<\/p>\n<p><b>Zeitliche Komponente<\/b><\/p>\n<p>Wie eingangs erw&auml;hnt, m&ouml;chten Sie unter Umst&auml;nden eine zeitliche Begrenzung der Nutzbarkeit der Anwendung mit den angegebenen Benutzerdaten erreichen. In diesem Fall m&uuml;ssten Sie ein Verfallsdatum erstellen oder mitgeben. Hier gibt es grunds&auml;tzlich zwei verschiedene Ans&auml;tze:<\/p>\n<ul>\n<li class=\"aufz-hlung\">Sie legen selbst fest, bis zu welchem Datum die Benutzerdaten g&uuml;ltig sind.<\/li>\n<li class=\"aufz-hlung\">Sie legen nur fest, wie lange der Betrieb unter den gegebenen Benutzerdaten m&ouml;glich sein soll, den Start und somit auch den Endzeitpunkt legt der Benutzer selbst fest.<\/li>\n<\/ul>\n<p>Die erste Variante ist einfach: Sie brauchen dazu nur das Enddatum in den Registrierungsschl&uuml;ssel zu integrieren und diesen entweder beim ersten Aufruf oder bei jedem Aufruf zu pr&uuml;fen. Das h&ouml;rt sich auf den ersten Blick kompliziert an, ist es aber nicht.<\/p>\n<p>Nehmen wir an, Sie erstellen den Registrierungsschl&uuml;ssel nicht nur auf Basis des Benutzernamens, sondern f&uuml;gen noch das Datum hinzu &#8211; beispielsweise im Format <b>yyyymmdd<\/b>. Dies erledigt etwa die Funktion aus <span class=\"verweis-ohneumbruch\"><a href=\"#anker-50-anchor\">Listing 4<\/a><\/span>. <\/p>\n<p class=\"listingueberschrift\">Listing 4: Registrierungsschl&uuml;ssel mit zus&auml;tzlichem Datum<\/p>\n<pre>Public Function RegistrierungsschluesselMitDatum(strBenutzer As String, datEnde As Date) As String\r\n    Dim strEnddatum As String\r\n    strEnddatum = Format(datEnde, &quot;yyyymmdd&quot;)\r\n    RegistrierungsschluesselMitDatum = GetSHA1(strBenutzer &amp; strEnddatum)\r\nEnd Function<\/pre>\n<p>Ein Aufruf &uuml;ber das Direktfenster sieht etwa so aus:<\/p>\n<pre> RegistrierungsschluesselMitDatum(&quot;Andr&eacute; Minhorst&quot;, &quot;1.10.2011&quot;)\r\nB9B555D12CB51D8F77C215CCE2402AF532545630<\/pre>\n<p>Wie aber ermitteln Sie beim Eingeben dieses Registrierungsschl&uuml;ssels in der Anwendung das Enddatum, wenn dieses verschl&uuml;sselt im Registrierungsschl&uuml;ssel steckt &#8211; der eigentlich nicht umkehrbar sein soll<\/p>\n<p>Ganz einfach: Sie durchlaufen einfach alle Daten vom heutigen Datum bis zu einem Datum, das der maximalen Laufzeit entspricht (also etwa 366 Tage f&uuml;r ein Jahr Laufzeit), und ermitteln so das passende Datum.<\/p>\n<p>Diese Aufgabe erledigt die Funktion <b>EnddatumErmitteln<\/b>. Sie erwartet den Benutzernamen und den Registrierungsschl&uuml;ssel als Parameter und durchl&auml;uft in einer Schleife alle Datumsangaben zwischen dem heutigen Datum und dem Datum in 366 Tagen.<\/p>\n<p>Dabei erledigt sie f&uuml;r jeden Tag die gleiche Aufgabe wie beim Erzeugen des Registrierungsschl&uuml;ssels: Sie setzt den Benutzernamen und das formatierte Datum zusammen, ermittelt den Hash-Wert f&uuml;r das jeweilige Datum und vergleicht diesen schlie&szlig;lich mit dem richtigen Hash-Wert. Wenn beide Hash-Werte &uuml;bereinstimmen, wurde das G&uuml;ltigkeitsdatum gefunden.<\/p>\n<p><b>Immer pr&uuml;fen oder nur einmal<\/b><\/p>\n<p>Sie k&ouml;nnen diese Pr&uuml;fung nun zu jedem Start durchf&uuml;hren oder aber nur bei der ersten Registrierung. Sie w&uuml;rden dann das Datum ebenfalls in der Tabelle <b>tblBenutzerdaten <\/b>speichern und k&ouml;nnten dann direkt pr&uuml;fen, ob die richtige Kombination aus Benutzername, Datum und Registrierungsschl&uuml;ssel angegeben wurde. Die Tabelle <b>tblBenutzerdaten<\/b> w&uuml;rden Sie dann wie in Bild 5 erweitern.<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2011_05\/Registrierung-web-images\/pic004.png\" alt=\"pic004.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 5: Erweiterung der Tabelle tblBenutzerdaten um ein Datumsfeld<\/span><\/b><\/p>\n<p>In diesem Fall &auml;ndern Sie die Funktion <b>BenutzerdatenPruefen<\/b>, die beim &Ouml;ffnen des Formulars <b>frmStart <\/b>ausgef&uuml;hrt wird, wie in <span class=\"verweis-ohneumbruch\"><a href=\"#anker-36-anchor\">Listing 5<\/a><\/span>.<\/p>\n<p class=\"listingueberschrift\">Listing 6: Enddatum f&uuml;r die aktuellen Registrierungsdaten ermitteln<\/p>\n<pre>Public Function EnddatumErmitteln(strBenutzer As String, strRegistrierungsschluessel As String) As Date\r\n    Dim datAktuell As Date\r\n    Dim strEnddatum As String\r\n    For datAktuell = Date To Date + 366\r\n        strEnddatum = Format(datAktuell, &quot;yyyymmdd&quot;)\r\n        If GetSHA1(strBenutzer &amp; strEnddatum) = strRegistrierungsschluessel Then\r\n            EnddatumErmitteln = datAktuell\r\n            Exit Function\r\n        End If\r\n    Next datAktuell\r\nEnd Function<\/pre>\n<p>Diese Funktion pr&uuml;ft zun&auml;chst, ob das Feld <b>Enddatum <\/b>der Tabelle <b>tblBenutzerdaten <\/b>bereits einen Wert enth&auml;lt. Falls ja, wird die Kombination aus Benutzername, Registrierungsschl&uuml;ssel und Enddatum mithilfe der Funktion <b>RegistrierungsschluesselMitDatum <\/b>gepr&uuml;ft. Verl&auml;uft diese Pr&uuml;fung positiv, liefert die Funktion <b>BenutzerdatenPruefen <\/b>den Wert <b>True <\/b>zur&uuml;ck.<\/p>\n<p>Ist das Feld <b>Enddatum <\/b>der Tabelle <b>tblBenutzerdaten <\/b>noch nicht gef&uuml;llt, ruft die Routine zun&auml;chst die Funktion <b>EnddatumErmitteln <\/b>auf, um das f&uuml;r diese Kombination aus Benutzername und Registrierungsschl&uuml;ssel g&uuml;ltige Enddatum zu ermitteln (s. <span class=\"verweis-ohneumbruch\"><a href=\"#anker-46-anchor\">Listing 6<\/a><\/span>). Verl&auml;uft dies erfolgreich, wird das Enddatum in die Tabelle <b>tblBenutzerdaten <\/b>eingetragen und der Wert <b>True <\/b>als Funktionswert zur&uuml;ckgeliefert.<\/p>\n<p><b>Zwischenfazit<\/b><\/p>\n<p>Damit haben Sie bereits einen gro&szlig;en Teil der Arbeit erledigt: Unter dem angegebenen Benutzernamen kann die Anwendung nur noch bis zu einem bestimmten Datum verwendet werden.<\/p>\n<p>Nun gibt es noch zwei Baustellen: Die Anwendung kann leicht auf mehreren Rechnern gleichzeitig eingesetzt werden &#8211; auch wenn dies unter ein und demselben Benutzernamen geschieht.<\/p>\n<p>Und au&szlig;erdem kann der Benutzer die Systemzeit seines Rechners zur&uuml;ckstellen und somit die Nutzungsdauer der Anwendung ins Unendliche verl&auml;ngern.<\/p>\n<p><b>Einschr&auml;nkung der registrierten Kopien<\/b><\/p>\n<p>Wenn Sie verhindern m&ouml;chten, dass der Benutzer Ihre Anwendung auf Arbeitspl&auml;tzen in seiner gesamten Firma bereitstellt oder diese gar an Dritte weitergibt, sollten Sie die Registrierungsdaten zum Zeitpunkt der Registrierung einmalig an einen Webserver &uuml;bermitteln.<\/p>\n<p>Dort speichern Sie in einer Datenbank die Anzahl der Registrierungsvorg&auml;nge mit den gleichen Registrierungsdaten.<\/p>\n<p>Beim &Uuml;berschreiten einer bestimmten Anzahl k&ouml;nnen Sie daf&uuml;r sorgen, dass der Benutzer sich bei Ihnen meldet. Wie Sie den Zugriff auf den Webserver erledigen, erfahren Sie im Beitrag <b>Webservice light <\/b>(<b>www.access-im-unternehmen.de\/798<\/b>).<\/p>\n<p><b>Zur&uuml;ckdrehen der Systemzeit erkennen<\/b><\/p>\n<p>Um zu erkennen, ob der Benutzer die Systemzeit zur&uuml;ckgedreht hat, m&uuml;ssen Sie jeweils beim Start das aktuelle Datum speichern. Sollte die Systemzeit dann bei einem sp&auml;teren Start vor dem gespeicherten Datum liegen, w&auml;re ein Anhaltspunkt f&uuml;r eine Benutzung der Anwendung bei manipulierter Systemzeit gegeben.<\/p>\n<p>Das kann allerdings auch durch Manipulation der Systemzeit in Richtung Zukunft ausgel&ouml;st werden: Angenommen, der Benutzer experimentiert gerade mit einer Technik, um die Nutzung seiner Anwendungen durch Benutzerdaten zeitlich einzuschr&auml;nken.<\/p>\n<p>Dieser k&ouml;nnte die Systemzeit auf ein Datum in der Zukunft einstellen, um zu pr&uuml;fen, ob die Anwendung nach dem angegebenen Verfallsdatum noch funktioniert.<\/p>\n<p>Wenn er nun genau zu diesem Zeitpunkt mit Ihrer Anwendung arbeitet, diese das in der Zukunft liegende Systemdatum speichert und der Benutzer dann die Systemzeit wieder zur&uuml;ckstellt, erhalten Sie den gleichen Effekt, als wenn der Benutzer die Anwendung zun&auml;chst regul&auml;r verwendet und dann f&uuml;r einen weiteren Einsatz nach Ablauf des Verfallsdatums die Systemzeit zur&uuml;ckdreht.<\/p>\n<p>Und genauso kann es nat&uuml;rlich vorkommen, dass die Systemzeit gerade ein in der Zukunft liegendes Datum enth&auml;lt und der Benutzer zuf&auml;lligerweise genau dann die Anwendung installiert.<\/p>\n<p>Wenn Sie es wirklich ernst meinen und die zeitliche Beschr&auml;nkung der Nutzung durchsetzen m&ouml;chten, bleibt Ihnen nichts anderes &uuml;brig, als das aktuelle Systemdatum zumindest einmal via Internet etwa von Ihrem eigenen Server einzulesen. Somit k&ouml;nnen Sie zumindest sicherstellen, dass beim Installieren das aktuelle Datum gespeichert wurde.<\/p>\n<p><b>Zusammenfassung und Ausblick<\/b><\/p>\n<p>Mit den hier vorgestellten Techniken erhalten Sie das Handwerkzeug, um die uneingeschr&auml;nkte Weitergabe und Benutzung einer Anwendung zu unterbinden. Grunds&auml;tzlich ist dies zwar m&ouml;glich, aber es w&uuml;rde wohl kaum jemand eine Anwendung mit seinen Registrierungsdaten weitergeben, wenn sein Name damit verbunden ist.<\/p>\n<p><a id=\"anker-anchor\" name=\"anker-anchor\" \/><\/p>\n<p><a id=\"anker-29-anchor\" name=\"anker-29-anchor\" \/><\/p>\n<p><a id=\"anker-44-anchor\" name=\"anker-44-anchor\" \/><\/p>\n<p><a id=\"anker-30-anchor\" name=\"anker-30-anchor\" \/><\/p>\n<p><a id=\"anker-43-anchor\" name=\"anker-43-anchor\" \/><\/p>\n<table>\n<tbody>\n<tr>\n<td>\n<p class=\"listingueberschrift\">Listing 5: Datumsabh&auml;ngige Registrierungsschl&uuml;ssel pr&uuml;fen<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<pre>Private Function BenutzerdatenPruefen() As Boolean\r\n    Dim datEnddatum As Date\r\n    If IsNull(Me!enddatum) Then\r\n        datEnddatum = EnddatumErmitteln(Me!txtBenutzername, Me!txtRegistrierungsschluessel)\r\n        If Not datEnddatum = 0 Then\r\n            Me!enddatum = datEnddatum\r\n            BenutzerdatenPruefen = True\r\n        End If\r\n    Else\r\n        If RegistrierungsschluesselMitDatum(Me!txtBenutzername, Me!enddatum) = Me!txtRegistrierungsschluessel Then\r\n            BenutzerdatenPruefen = True\r\n        End If\r\n    End If\r\nEnd Function<\/pre>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3>Downloads zu diesem Beitrag<\/h3>\n<p>Enthaltene Beispieldateien:<\/p>\n<p>Registrierung.mdb<\/p>\n<p><a href=\"..\/fileadmin\/beispiele\/{D971F485-5449-4463-8DF4-948DCA88BDA9}\/aiu_797.zip\">Download<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Wenn Sie eine Anwendung programmieren und sp&auml;ter als L&ouml;sung verkaufen m&ouml;chten, m&uuml;ssen Sie auf irgendeine Weise sicherstellen, dass nur der jeweilige K&auml;ufer damit arbeiten kann. Anderenfalls passiert es leicht, dass derjenige die Anwendung an andere Nutzer weitergibt &#8211; vielleicht sogar ohne das Bewusstsein, dass er den Hersteller der Software um seinen Lohn bringt. In diesem Beitrag stellen wir Ihnen eine L&ouml;sung vor, mit der Sie Ihre Anwendungen vor der Weitergabe an Dritte sch&uuml;tzen &#8211; und das sogar mit zeitlicher Begrenzung.<\/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":[662011,66052011,44000038],"tags":[],"class_list":["post-55000797","post","type-post","status-publish","format-standard","hentry","category-662011","category-66052011","category-Sicherheit"],"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>Registrierung von Anwendungen - 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\/Registrierung_von_Anwendungen\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Registrierung von Anwendungen\" \/>\n<meta property=\"og:description\" content=\"Wenn Sie eine Anwendung programmieren und sp&auml;ter als L&ouml;sung verkaufen m&ouml;chten, m&uuml;ssen Sie auf irgendeine Weise sicherstellen, dass nur der jeweilige K&auml;ufer damit arbeiten kann. Anderenfalls passiert es leicht, dass derjenige die Anwendung an andere Nutzer weitergibt - vielleicht sogar ohne das Bewusstsein, dass er den Hersteller der Software um seinen Lohn bringt. In diesem Beitrag stellen wir Ihnen eine L&ouml;sung vor, mit der Sie Ihre Anwendungen vor der Weitergabe an Dritte sch&uuml;tzen - und das sogar mit zeitlicher Begrenzung.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-im-unternehmen.de\/Registrierung_von_Anwendungen\/\" \/>\n<meta property=\"og:site_name\" content=\"Access im Unternehmen\" \/>\n<meta property=\"article:published_time\" content=\"2020-05-22T21:58:03+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/vg01.met.vgwort.de\/na\/281682a3b0c24f8dae23ec286bd2b749\" \/>\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=\"14\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Registrierung_von_Anwendungen\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Registrierung_von_Anwendungen\\\/\"},\"author\":{\"name\":\"Andr\u00e9 Minhorst\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\"},\"headline\":\"Registrierung von Anwendungen\",\"datePublished\":\"2020-05-22T21:58:03+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Registrierung_von_Anwendungen\\\/\"},\"wordCount\":2430,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Registrierung_von_Anwendungen\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg01.met.vgwort.de\\\/na\\\/281682a3b0c24f8dae23ec286bd2b749\",\"articleSection\":[\"2011\",\"5\\\/2011\",\"Sicherheit\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Registrierung_von_Anwendungen\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Registrierung_von_Anwendungen\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Registrierung_von_Anwendungen\\\/\",\"name\":\"Registrierung von Anwendungen - Access im Unternehmen\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Registrierung_von_Anwendungen\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Registrierung_von_Anwendungen\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg01.met.vgwort.de\\\/na\\\/281682a3b0c24f8dae23ec286bd2b749\",\"datePublished\":\"2020-05-22T21:58:03+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Registrierung_von_Anwendungen\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Registrierung_von_Anwendungen\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Registrierung_von_Anwendungen\\\/#primaryimage\",\"url\":\"http:\\\/\\\/vg01.met.vgwort.de\\\/na\\\/281682a3b0c24f8dae23ec286bd2b749\",\"contentUrl\":\"http:\\\/\\\/vg01.met.vgwort.de\\\/na\\\/281682a3b0c24f8dae23ec286bd2b749\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Registrierung_von_Anwendungen\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Registrierung von Anwendungen\"}]},{\"@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":"Registrierung von Anwendungen - 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\/Registrierung_von_Anwendungen\/","og_locale":"de_DE","og_type":"article","og_title":"Registrierung von Anwendungen","og_description":"Wenn Sie eine Anwendung programmieren und sp&auml;ter als L&ouml;sung verkaufen m&ouml;chten, m&uuml;ssen Sie auf irgendeine Weise sicherstellen, dass nur der jeweilige K&auml;ufer damit arbeiten kann. Anderenfalls passiert es leicht, dass derjenige die Anwendung an andere Nutzer weitergibt - vielleicht sogar ohne das Bewusstsein, dass er den Hersteller der Software um seinen Lohn bringt. In diesem Beitrag stellen wir Ihnen eine L&ouml;sung vor, mit der Sie Ihre Anwendungen vor der Weitergabe an Dritte sch&uuml;tzen - und das sogar mit zeitlicher Begrenzung.","og_url":"https:\/\/access-im-unternehmen.de\/Registrierung_von_Anwendungen\/","og_site_name":"Access im Unternehmen","article_published_time":"2020-05-22T21:58:03+00:00","og_image":[{"url":"http:\/\/vg01.met.vgwort.de\/na\/281682a3b0c24f8dae23ec286bd2b749","type":"","width":"","height":""}],"author":"Andr\u00e9 Minhorst","twitter_card":"summary_large_image","twitter_misc":{"Verfasst von":"Andr\u00e9 Minhorst","Gesch\u00e4tzte Lesezeit":"14\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/access-im-unternehmen.de\/Registrierung_von_Anwendungen\/#article","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/Registrierung_von_Anwendungen\/"},"author":{"name":"Andr\u00e9 Minhorst","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f"},"headline":"Registrierung von Anwendungen","datePublished":"2020-05-22T21:58:03+00:00","mainEntityOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Registrierung_von_Anwendungen\/"},"wordCount":2430,"commentCount":0,"publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Registrierung_von_Anwendungen\/#primaryimage"},"thumbnailUrl":"http:\/\/vg01.met.vgwort.de\/na\/281682a3b0c24f8dae23ec286bd2b749","articleSection":["2011","5\/2011","Sicherheit"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/access-im-unternehmen.de\/Registrierung_von_Anwendungen\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/access-im-unternehmen.de\/Registrierung_von_Anwendungen\/","url":"https:\/\/access-im-unternehmen.de\/Registrierung_von_Anwendungen\/","name":"Registrierung von Anwendungen - Access im Unternehmen","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Registrierung_von_Anwendungen\/#primaryimage"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Registrierung_von_Anwendungen\/#primaryimage"},"thumbnailUrl":"http:\/\/vg01.met.vgwort.de\/na\/281682a3b0c24f8dae23ec286bd2b749","datePublished":"2020-05-22T21:58:03+00:00","breadcrumb":{"@id":"https:\/\/access-im-unternehmen.de\/Registrierung_von_Anwendungen\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/access-im-unternehmen.de\/Registrierung_von_Anwendungen\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/Registrierung_von_Anwendungen\/#primaryimage","url":"http:\/\/vg01.met.vgwort.de\/na\/281682a3b0c24f8dae23ec286bd2b749","contentUrl":"http:\/\/vg01.met.vgwort.de\/na\/281682a3b0c24f8dae23ec286bd2b749"},{"@type":"BreadcrumbList","@id":"https:\/\/access-im-unternehmen.de\/Registrierung_von_Anwendungen\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/access-im-unternehmen.de\/"},{"@type":"ListItem","position":2,"name":"Registrierung von Anwendungen"}]},{"@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\/55000797","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=55000797"}],"version-history":[{"count":0,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55000797\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/media?parent=55000797"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/categories?post=55000797"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/tags?post=55000797"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}