{"id":55001315,"date":"2021-08-01T00:00:00","date_gmt":"2021-07-31T10:13:36","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=1315"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"SQL_ServerSecurity_Teil_6_ODBCDatenquellen_und_gespeicherte_Kennwoerter","status":"publish","type":"post","link":"https:\/\/access-im-unternehmen.de\/SQL_ServerSecurity_Teil_6_ODBCDatenquellen_und_gespeicherte_Kennwoerter\/","title":{"rendered":"SQL Server-Security, Teil 6: ODBC-Datenquellen und gespeicherte Kennw&ouml;rter"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/vg07.met.vgwort.de\/na\/c2abfdce275040c599fbaa7f95a47665\" width=\"1\" height=\"1\" alt=\"\"><\/p>\n<p>Bernd Jungbluth, Horn &#8211; www.berndjungbluth.de<\/p>\n<p><b>Die Verbindung von Access zum SQL Server erfolgt in der Regel &uuml;ber ODBC. Hierzu wird vorab eine ODBC-Datenquelle erstellt und unter einem Data Source Name &#8211; kurz DSN &#8211; gespeichert. F&uuml;r den Datenzugriff liefert die ODBC-Datenquelle die Bezeichnung des SQL Servers und den Namen der Datenbank. Der Anmeldename und das Kennwort hingegen kommen direkt aus der Access-Applikation. Dabei sind die in Access gespeicherten Anmeldedaten ein nicht zu untersch&auml;tzendes Sicherheitsrisiko. Dieser Beitrag beschreibt die Risiken und zeigt Mittel und Wege, wie Sie diese vermeiden k&ouml;nnen. <\/b><\/p>\n<h2>Warnung<\/h2>\n<p>Die beschriebenen Aktionen haben Auswirkungen auf Ihre SQL Server-Installation. F&uuml;hren Sie die Aktionen nur in einer Testumgebung aus. Verwenden Sie unter keinen Umst&auml;nden Ihren produktiven SQL Server!<\/p>\n<h2>ODBC-Datenquellen<\/h2>\n<p>Die Definition einer ODBC-Datenquelle f&uuml;r den Zugriff auf eine SQL Server-Datenbank besteht im Wesentlichen aus den Angaben zum SQL Server, zur Datenbank und den Anmeldedaten. Bei Bedarf lassen sich noch weitere Optionen erg&auml;nzen, zum Beispiel zur Verschl&uuml;sselung der Daten&uuml;bertragung. Der ODBC-Datenquelle geben Sie im ODBC-Datenquellen-Editor einen Namen, den sogenannten Data Source Name oder kurz DSN. Mit diesem DSN binden Sie die Tabellen der SQL Server-Datenbank in die Access-Applikation ein und definieren die ODBC-Verbindung der Pass Through-Abfragen.<\/p>\n<p>In der Beispielumgebung verwendet die ODBC-Datenquelle den DSN <b>WaWi_SQL<\/b>. Sind Sie der Installationsanleitung zur Beispielumgebung gefolgt, enth&auml;lt der DSN die Anmeldung <b>WaWiPersonal<\/b>. Sollte dies nicht der Fall sein, passen Sie die Anmeldedaten in der ODBC-Datenquelle an. Nur mit dieser Anmeldung haben Sie Zugriff auf alle Tabellen und gespeicherten Prozeduren. Die Installationsanleitung zur Beispielumgebung finden Sie am Ende des Beitrags.<\/p>\n<h2>Der Data Source Name <\/h2>\n<p>Die ODBC-Datenquelle mit dem DSN <b>WaWi_SQL <\/b>erm&ouml;glicht Ihnen den Zugriff auf die Daten der gleichnamigen SQL Server-Datenbank. Dabei ist es Ihnen &uuml;berlassen, mit welcher Applikation Sie auf die Daten zugreifen. So k&ouml;nnen Sie die Daten unter anderem in Excel auswerten oder in einer eigenen Access-Datenbank verarbeiten. Der Vorgang f&uuml;r den Datenzugriff ist immer der gleiche. Sie w&auml;hlen den DSN der ODBC-Datenquelle und geben das Kennwort zur Anmeldung ein. Beides ist in der Access-Applikation <b>WaWi <\/b>nicht mehr notwendig. Hier haben Sie bereits beim Einbinden der Tabellen den DSN <b>WaWi_SQL <\/b>gew&auml;hlt sowie das Kennwort eingegeben und es in Access gespeichert. Dadurch geh&ouml;rt der DSN mitsamt dem Kennwort zu den Eigenschaften einer eingebundenen Tabelle. Diese k&ouml;nnen Sie sich in der Entwurfsansicht anschauen.<\/p>\n<p>Starten Sie die Access-Applikation <b>WaWi <\/b>und &ouml;ffnen Sie die Tabelle <b>Artikel <\/b>in der Entwurfsansicht. Nach Best&auml;tigen der Meldung mit einem Klick auf <b>Ja <\/b>blenden Sie mit der Taste <b>F4 <\/b>das Eigenschaftenblatt ein. In der Eigenschaft <b>Beschreibung <\/b>sehen Sie die Informationen zur Datenquelle der eingebundenen Tabelle (siehe Bild 1). Neben dem Verweis zum DSN zeigt die <b>Eigenschaft<\/b> noch weitere Angaben:<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2021_04\/Abb. 6.01.png\" alt=\"Beschreibung zur Datenquelle\" width=\"700\" height=\"111,0156\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 1: Beschreibung zur Datenquelle<\/span><\/b><\/p>\n<pre>ODBC; DSN=WaWi_SQL; UID=WaWiPersonal; Trusted_Connection=No; APP=Microsoft Office; DATABASE=WaWi_SQL; ; TABLE=dbo.Artikel <\/pre>\n<p>Mit dem Namen der Datenbank im Parameter <b>DATABASE<\/b>, dem Anmeldenamen unter <b>UID <\/b>sowie der Bezeichnung der Originaltabelle im Parameter <b>TABLE <\/b>enth&auml;lt die Eigenschaft drei wesentliche Informationen zur externen Datenquelle. Der Eintrag <b>Trusted_Connection=No <\/b>zeigt, dass f&uuml;r die Verbindung eine Anmeldung per SQL Server-Authentifizierung verwendet wird. Das Kennwort zur Anmeldung ist an dieser Stelle aus Sicherheitsgr&uuml;nden nicht zu sehen. Als erg&auml;nzende Information ist im Parameter <b>APP <\/b>noch der Name der Applikation aufgef&uuml;hrt. <\/p>\n<p>Neben den eingebundenen Tabellen bieten Ihnen zwei Pass Through-Abfragen den Zugriff auf die Daten der SQL Server-Datenbank. Diese enthalten in ihren Eigenschaften ebenso die Informationen zum DSN der ODBC-Datenquelle. &Ouml;ffnen Sie die Pass Through-Abfrage <b>ptSelectGeburtstagsliste <\/b>in der Entwurfsansicht und aktivieren Sie dort das Eigenschaftenblatt.<\/p>\n<p>Hier ist es die Eigenschaft <b>ODBC-Verbindung<\/b>, die Ihnen die Informationen zur Datenquelle zeigt: <\/p>\n<pre>ODBC; DSN=WaWi_SQL; UID=WaWiPersonal; PWD=SicherIn2020!; Trusted_Connection=No; APP=Microsoft Office; DATABASE=WaWi_SQL;<\/pre>\n<p>Der Eintrag unterscheidet sich zu dem einer eingebundenen Tabelle in zwei Parametern. Zum einen fehlt logischerweise der Verweis zur Originaltabelle und zum anderen ist hier das Kennwort klar und deutlich zu sehen. Im Gegensatz zur Tabelle sind diese Informationen weitaus mehr als eine Beschreibung, sie geh&ouml;ren vielmehr zur Definition der Pass Through-Abfrage. &Uuml;ber die Schaltfl&auml;che am Ende der Eigenschaft <b>ODBC-Verbindung <\/b>k&ouml;nnen Sie diese Definition &auml;ndern. Klicken Sie auf die Schaltfl&auml;che und w&auml;hlen Sie im folgenden Dialog in der Registerkarte <b>Computerdatenquelle <\/b>die ODBC-Datenquelle &uuml;ber den DSN <b>WaWi_SQL <\/b>aus. Beim Anmeldedialog verwenden Sie die Anmelde-ID <b>WaWiMa <\/b>mit dem zugeh&ouml;rigen Kennwort <b>SicherIn2020!<\/b>. Es folgt die Frage, ob Sie das Kennwort speichern m&ouml;chten. Mit einem Klick auf <b>Ja <\/b>&uuml;bernehmen Sie das Kennwort sowie den Verweis zum DSN in die Eigenschaft <b>ODBC-Verbindung<\/b>. Diese zeigt nun folgenden Inhalt: <\/p>\n<pre>ODBC; DSN=WaWi_SQL; UID=WaWiMa; PWD=SicherIn2020!; Trusted_Connection=No; APP=Microsoft Office; DATABASE=WaWi_SQL;<\/pre>\n<p>Sie sehen zum einen den DSN <b>WaWi_SQL <\/b>und zum anderen unter <b>UID <\/b>und <b>PWD <\/b>die Anmeldedaten zur Anmeldung <b>WaWiMa<\/b>. Indirekt stehen nun zwei Anmeldungen zur Verf&uuml;gung, die Anmeldung <b>WaWiPersonal <\/b>im DSN und der direkte Eintrag zur Anmeldung <b>WaWiMa <\/b>in den Eigenschaften der Pass Through-Abfrage. <\/p>\n<p>Welche Anmeldung wird denn nun beim Datenzugriff verwendet Ein Klick auf <b>Ausf&uuml;hren<\/b> beantwortet diese Frage. Anstelle der Geburtstage der Mitarbeiter sehen Sie eine Fehlermeldung. Das ist korrekt und es entspricht der aktuell g&uuml;ltigen Rechtevergabe der Beispielumgebung. Der Anmeldung <b>WaWiMa <\/b>wird das Ausf&uuml;hren der gespeicherten Prozedur <b>pSelectGeburtstagsliste <\/b>verweigert. F&uuml;r den Datenzugriff sind also die Anmeldedaten der Pass Through-Abfrage ma&szlig;gebend. Die im DSN gespeicherten Anmeldedaten hingegen spielen dabei keine Rolle. Eine Abweichung der Anmeldedaten ist auch bei eingebundenen Tabellen m&ouml;glich. Dazu geben Sie beim Einbinden der Tabellen nach der Auswahl der ODBC-Datenquelle einfach andere Anmeldedaten an. <\/p>\n<p>Gerade solche abweichenden Konfigurationen f&uuml;hren schnell zu einer falschen Bewertung des Zugriffsschutzes. So k&ouml;nnte ein Blick in den DSN eine Anmeldung mit geringen Zugriffsrechten zeigen, in Access jedoch wird eine andere Anmeldung mit weitaus h&ouml;heren Rechten verwendet. Also gerade umgekehrt zum aktuellen Beispiel, daf&uuml;r aber mit schlimmeren Folgen. Der Anwender agiert mit mehr Rechten als der Administrator dies nach einem Blick in den DSN vermutet. Wenn das kein gutes Argument ist, in Zukunft auf den DSN zu verzichten!<\/p>\n<h2>Ohne Data Source Name &#8211; DSN-less<\/h2>\n<p>Aktuell stellt der DSN <b>WaWi_SQL <\/b>die Bezeichnungen zum verwendeten Treiber, zu Ihrem SQL Server und zur Datenbank bereit. F&uuml;r einen Datenzugriff werden diese Informationen mit den in Access gespeicherten Anmeldedaten erg&auml;nzt und in einer Verbindungszeichenfolge zusammengefasst. Diese ebenso als Connection-String bekannte Verbindungszeichenfolge ist die Basis f&uuml;r die Verbindung zur externen Datenquelle. Sie beinhaltet im Grunde genommen die Wegbeschreibung, in diesem Fall die Route zur Ihrem SQL Server und dort zur Datenbank <b>WaWi_SQL<\/b>. Dabei enth&auml;lt sie eigentlich nur Informationen, die Sie ebenso gut direkt in Access speichern k&ouml;nnen. Sie kennen den verwendeten ODBC-Treiber, Ihren SQL Server und die Datenbank. Es fehlt Ihnen nur noch die Syntax der Verbindungszeichenfolge.<\/p>\n<p>Die Syntax l&auml;sst sich recht einfach ermitteln. Dazu erstellen Sie eine weitere ODBC-Datenquelle, dieses Mal jedoch als Datei-DSN. &Ouml;ffnen Sie den ODBC-Datenquellen-Editor in der bew&auml;hrten Art und Weise &uuml;ber die Windows-Taste und der Eingabe <b>ODBC<\/b>. Das Suchergebnis zeigt zwei Eintr&auml;ge. Hier w&auml;hlen Sie je nach installierter Access-Version den Eintrag <b>ODBC-Datenquellen (32-Bit) <\/b>oder <b>ODBC-Datenquellen (64-Bit)<\/b>.<\/p>\n<p>Im ODBC-Datenquellen-Administrator wechseln Sie zur Registerkarte <b>Datei-DSN<\/b>. Dort klicken Sie auf <b>Hinzuf&uuml;gen <\/b>und w&auml;hlen im folgenden Dialog den Treiber <b>ODBC Driver 17 for SQL Server <\/b>aus. Informationen zu diesem Treiber finden Sie in der Installationsanleitung der Beispielumgebung. Nach einem Klick auf <b>Weiter <\/b>legen Sie den Speicherort und Dateinamen fest. Vielleicht nennen Sie die Datei <b>WaWi_SQL <\/b>und speichern sie im Ordner der Beispieldateien. Best&auml;tigen Sie die bisherigen Angaben mit einem Klick auf <b>Weiter <\/b>und anschlie&szlig;end mit der Schaltfl&auml;che <b>Fertig stellen<\/b>. <\/p>\n<p>Jetzt beginnt die eigentliche Definition der ODBC-Datenquelle. Dabei geben Sie im ersten Schritt im Eingabefeld <b>Server <\/b>den Namen Ihres SQL Servers ein. In Schritt 2 legen Sie mit der dritten Option die Anmeldung per SQL Server-Authentifizierung fest und erg&auml;nzen diese Auswahl mit dem Anmeldenamen <b>WaWiPersonal <\/b>im Eingabefeld <b>Anmelde-ID <\/b>und dem zugeh&ouml;rigen Kennwort im Eingabefeld <b>Kennwort<\/b>. Die Datenbank <b>WaWi_SQL <\/b>w&auml;hlen Sie in Schritt 3 aus, nachdem Sie dort die Option <b>Die Standarddatenbank &auml;ndern auf <\/b>aktiviert haben. Mit einem Klick auf <b>Weiter <\/b>und anschlie&szlig;end auf <b>Fertig stellen <\/b>schlie&szlig;en Sie die Definition der ODBC-Datenquelle ab. Es folgt der Dialog zum Test der Verbindung. Nach einem letzten Klick auf <b>OK <\/b>beenden Sie das Erstellen der Datei-DSN.<\/p>\n<p>Nun &ouml;ffnen Sie die Datei-DSN mit einem Texteditor. Sie sehen die einzelnen Parameter zur Verbindungszeichenfolge (siehe Bild 2). Bevor Sie diese Informationen in Access nutzen k&ouml;nnen, sind noch ein paar Anpassungen notwendig. Als Erstes l&ouml;schen Sie die eckigen Klammern rund um den Begriff <b>ODBC<\/b>. Danach entfernen Sie die Eintr&auml;ge der Parameter <b>TrustServerCertificate<\/b>, <b>WSID <\/b>und <b>APP<\/b>. Jetzt f&uuml;gen Sie an jedes Zeilenende ein Semikolon ein und l&ouml;schen den Zeilenumbruch. Als Ergebnis sehen Sie die Verbindungszeichenfolge in einer einzelnen Zeile. Diese erg&auml;nzen Sie mit dem Parameter <b>PWD <\/b>und dem Kennwort <b>SicherIn2020!<\/b>. Mit Ausnahme des Werts im Parameter <b>Server <\/b>m&uuml;sste Ihre Verbindungszeichenfolge nun der in Bild 3 entsprechen.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2021_04\/Abb. 6.03.png\" alt=\"Die Verbindungszeichenfolge\" width=\"700\" height=\"63,17691\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 2: Die Verbindungszeichenfolge<\/span><\/b><\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2021_04\/Abb. 6.02.png\" alt=\"Inhalt einer Datei-DSN\" width=\"299,7115\" height=\"202,1864\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 3: Inhalt einer Datei-DSN<\/span><\/b><\/p>\n<p>Kopieren Sie die Verbindungszeichenfolge und gehen Sie zur&uuml;ck zur Access-Applikation <b>WaWi<\/b>. Dort &ouml;ffnen Sie die Pass Through-Abfrage <b>ptSelectGeburtstagsliste <\/b>in der Entwurfsansicht und &uuml;berschreiben den Inhalt der Eigenschaft <b>ODBC-Verbindung <\/b>mit der kopierten Verbindungszeichenfolge.  Speichern Sie die &Auml;nderungen und klicken Sie auf <b>Ausf&uuml;hren<\/b>. Als Ergebnis sehen Sie die Geburtstage der Mitarbeiter &#8211; und das ohne DSN.<\/p>\n<p>Wenn Sie schon dabei sind, &auml;ndern Sie doch direkt noch die Pass Through-Abfrage <b>ptSelectAnsprechpartnerZuMitarbeiter<\/b>. &Uuml;berschreiben Sie hier ebenfalls die Eigenschaft <b>ODBC-Verbindung <\/b>mit dem Inhalt Ihrer Datei-DSN. Gl&uuml;ckwunsch! Ab jetzt erfolgt der Datenzugriff der Pass Through-Abfragen ohne Verweis zu einem DSN. Beide arbeiten nun DSN-less. Alle f&uuml;r den Datenzugriff notwendigen Informationen sind direkt in den Pass Through-Abfragen gespeichert. Leider enth&auml;lt die Eigenschaft <b>ODBC-Verbindung <\/b>immer noch das Kennwort im Klartext. Doch dazu sp&auml;ter mehr. <\/p>\n<p>Vorher soll das Prinzip <b>DSN-less <\/b>noch bei den eingebundenen Tabellen angewendet werden. Nur ist das hier nicht so einfach wie bei den Pass Through-Abfragen. Zwar enth&auml;lt eine eingebundene Tabelle ebenfalls den Verweis zum DSN, dieser l&auml;sst sich dort aber nicht &auml;ndern.<\/p>\n<p>Die Entwurfsansicht eingebundener Tabellen ist schreibgesch&uuml;tzt. Zudem zeigt die Eigenschaft <b>Beschreibung <\/b>lediglich eine Dokumentation zur Datenquelle. Der eigentliche Speicherort der Verbindungszeichenfolge ist die Spalte <b>Connect <\/b>in der Access-Systemtabelle <b>MSysObjects<\/b>. Dort gibt es zu jeder eingebundenen Tabelle den folgenden Eintrag &#8211; und an dieser Stelle sogar mit lesbarem Kennwort.<\/p>\n<pre>DSN=WaWi_SQL; UID=WaWiPersonal; PWD=SicherIn2020!; Trusted_Connection=No; APP=Microsoft Office; DATABASE=WaWi_SQL;<\/pre>\n<p>Die Daten sind hier ebenfalls schreibgesch&uuml;tzt. Die Verbindungszeichenfolge k&ouml;nnen Sie nur &auml;ndern, indem Sie die Tabellen neu einbinden. Doch da gibt es gleich die n&auml;chste H&uuml;rde. Die Dialoge &uuml;ber den Men&uuml;punkt <b>Externe Daten <\/b>bieten keine M&ouml;glichkeit, die Tabellen ohne einen DSN einzubinden. In den Access-Versionen 2019 und 365 hat der Tabellenverkn&uuml;pfungs-Manager jedoch eine L&ouml;sung f&uuml;r Sie.<\/p>\n<h2>DSN-less per Tabellenverkn&uuml;pfungs-Manager <\/h2>\n<p>Mit dem neuen Tabellenverkn&uuml;pfungs-Manager l&auml;sst sich der DSN recht einfach mit einer eigenen Verbindungszeichenfolge ersetzen. Starten Sie den Tabellenverkn&uuml;pfungs-Manager &uuml;ber das Ribbon <b>Externe Daten<\/b>, aktivieren Sie dort den Eintrag <b>ODBC <\/b>(siehe Bild 4) und klicken Sie auf <b>Bearbeiten<\/b>.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2021_04\/Abb. 6.04.png\" alt=\"Der Tabellenverkn&uuml;pfungs-Manager\" width=\"649,7115\" height=\"407,2819\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 4: Der Tabellenverkn&uuml;pfungs-Manager<\/span><\/b><\/p>\n<p>Im folgenden Dialog &uuml;berschreiben Sie das Eingabefeld <b>Verbindungszeichenfolge <\/b>mit dem Inhalt Ihrer Datei-DSN (siehe Bild 5) und best&auml;tigen dies mit einem Klick auf <b>Speichern<\/b>. Zur&uuml;ck im Tabellenverkn&uuml;pfungs-Manager klicken Sie auf <b>Aktualisieren<\/b>. Das war es schon. Sie k&ouml;nnen den Tabellenverkn&uuml;pfungs-Manager wieder schlie&szlig;en. <\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2021_04\/Abb. 6.05.png\" alt=\"DSN-less per Tabellenverkn&uuml;pfungs-Manager\" width=\"424,7115\" height=\"283,4488\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 5: DSN-less per Tabellenverkn&uuml;pfungs-Manager<\/span><\/b><\/p>\n<p>Der Datenzugriff &uuml;ber eine eingebundene Tabelle erfolgt jetzt ebenfalls ohne DSN. Testen Sie es einmal. &Ouml;ffnen Sie die Tabelle <b>Kunden <\/b>in der Entwurfsansicht und schauen Sie in die Eigenschaft <b>Beschreibung<\/b>. Dort sehen Sie Ihre Verbindungszeichenfolge. Das Kennwort wird aus Sicherheitsgr&uuml;nden weiterhin nicht angezeigt. <\/p>\n<p>Der neue Tabellenverkn&uuml;pfungs-Manager macht vieles einfacher. Sollten Sie noch eine &auml;ltere Version von Access verwenden, bleibt Ihnen diese M&ouml;glichkeit verwehrt. Alternativ k&ouml;nnen Sie die Tabellen per VBA einbinden.<\/p>\n<h2>DSN-less per VBA<\/h2>\n<p>Zum Einbinden der Tabellen mit einer eigenen Verbindungszeichenfolge bietet Ihnen die neue Version der Access-Applikation <b>WaWi <\/b>die Funktion <b>fTabellenEinbinden<\/b>. Schauen Sie sich einmal die Funktion an. Sie finden sie im Modul <b>Tabellen<\/b>.<\/p>\n<p>Die Funktion legt zuerst die Verbindungszeichenfolge fest. Dies erfolgt mit einer weiteren Funktion namens <b>fOdbcPerFunction<\/b>.<\/p>\n<p>Mit einem Rechtsklick auf den Funktionsnamen und anschlie&szlig;ender Auswahl des Eintrags <b>Definition <\/b>wechseln Sie direkt zur Funktion im Modul <b>ODBC<\/b>. Hier &uuml;berschreiben Sie den Eintrag Ihre Verbindungszeichenfolge mit dem Inhalt Ihrer Datei-DSN (siehe Bild 6). Ein erneuter Rechtsklick und der Auswahl des Eintrags <b>Letzte Position<\/b> bringt Sie wieder zur&uuml;ck zur Funktion <b>fTabellenEinbinden<\/b>. <\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2021_04\/Abb. 6.06.png\" alt=\"Die Funktion fOdbcPerFunction\" width=\"424,7115\" height=\"183,0549\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 6: Die Funktion fOdbcPerFunction<\/span><\/b><\/p>\n<p>Dort wird Ihre Verbindungszeichenfolge in der Variablen <b>strODBC <\/b>gespeichert. Anschlie&szlig;end l&ouml;schen die folgenden Zeilen alle eingebundenen Tabellen und aktualisieren danach den neuen Stand der Tabellendefinitionen:<\/p>\n<pre>For Each tdf In CurrentDb.TableDefs\r\n     <span style=\"color:blue;\">If <\/span><span style=\"color:blue;\">Left<\/span>(tdf.Connect, 5) = \"ODBC;\"<span style=\"color:blue;\"> Then<\/span>\r\n         CurrentDb.TableDefs.Delete tdf.Name\r\n     <span style=\"color:blue;\">End If<\/span>\r\n<span style=\"color:blue;\">Next<\/span>\r\nCurrentDb.TableDefs.Refresh<\/pre>\n<p>Es folgt das Neueinbinden der Tabellen. Die Bezeichnungen der Tabellen liefert eine tempor&auml;re Pass Through-Abfrage. <\/p>\n<pre><span style=\"color:blue;\">Set<\/span> ptqry = CurrentDb.CreateQueryDef(\"\")\r\n<span style=\"color:blue;\">With<\/span> ptqry\r\n     .Connect = strODBC\r\n     .SQL = \" SELECT [name]<span style=\"color:blue;\"> As <\/span>Tabelle, SCHEMA_NAME( [schema_id]) + ''.'' + [name]<span style=\"color:blue;\"> As <\/span>Originaltabelle  FROM sys.objects WHERE [type] = ''U'';\"\r\n     .ReturnsRecords = <span style=\"color:blue;\">True<\/span>\r\nEnd <span style=\"color:blue;\">With<\/span><\/pre>\n<p>Die Pass Through-Abfrage verwendet als Verbindungszeichenfolge den Inhalt der Variablen <b>strODBC <\/b>und f&uuml;hrt somit auf Ihrem SQL Server in der Datenbank <b>WaWi_SQL <\/b>diese SQL-Anweisung aus: <\/p>\n<pre>SELECT [name]<span style=\"color:blue;\"> As <\/span>Tabelle, SCHEMA_NAME([schema_id]) + ''.''  + [name]<span style=\"color:blue;\"> As <\/span>Originaltabelle  FROM sys.objects WHERE [type] = ''U'';<\/pre>\n<p>Die <b>SELECT<\/b>-Anweisung ermittelt in der Tabelle <b>sys.objects <\/b>alle Systemobjekte vom Typ <b>U<\/b>. <b>U <\/b>steht an dieser Stelle f&uuml;r <b>User<\/b>-Table und kennzeichnet die vom Datenbankentwickler erstellten Tabellen. Das Ergebnis umfasst zwei Spalten, den Namen der Tabelle ohne Schema und den Namen der Tabelle mit Schema. <\/p>\n<p>Sie m&ouml;chten sich diese Daten einmal anschauen Dann &ouml;ffnen Sie das SQL Server Management Studio und melden Sie sich dort mit der Anmeldung <b>WaWiPersonal <\/b>an. Eventuell m&uuml;ssen Sie hierzu den Anmeldetyp in <b>SQL Server-Authentifizierung <\/b>&auml;ndern (siehe Bild 7).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2021_04\/Abb. 6.07.png\" alt=\"Die Anmeldung am SSMS\" width=\"424,7115\" height=\"280,4699\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 7: Die Anmeldung am SSMS<\/span><\/b><\/p>\n<p>Nach der Anmeldung erweitern Sie den Objekt-Explorer, markieren die Datenbank <b>WaWi_SQL <\/b>mit der rechten Maustaste und w&auml;hlen aus dem Kontextmen&uuml; den Eintrag <b>Neue Abfrage<\/b>. Sie erhalten eine leere Registerkarte, in der Sie die <b>SELECT<\/b>-Anweisung eingeben und dann mit der Taste <b>F5 <\/b>ausf&uuml;hren. Das Ergebnis listet alle Tabellen auf, zu denen die Anmeldung <b>WaWiPersonal <\/b>entsprechende Zugriffsrechte besitzt (siehe Bild 8). Dabei enth&auml;lt die Spalte <b>Originaltabelle <\/b>neben dem Tabellennamen auch den Namen des Schemas. Das ist in der aktuellen Beispieldatenbank das Standardschema <b>dbo<\/b>. Welche Vorteile Sie bei der Verwendung verschiedener Schemata haben, erfahren Sie in einer der n&auml;chsten Ausgaben.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2021_04\/Abb. 6.08.png\" alt=\"Die Tabellen der Anmeldung WaWiPersonal\" width=\"549,7115\" height=\"263,2502\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 8: Die Tabellen der Anmeldung WaWiPersonal<\/span><\/b><\/p>\n<p>Die Definition der tempor&auml;ren Pass Through-Abfrage endet mit der Zuweisung <b>ReturnsRecords = True<\/b>. Diese sorgt f&uuml;r die R&uuml;ckgabe der ermittelten Daten zur Weiterverarbeitung in VBA. Die n&auml;chste Anweisung erstellt das Recordset <b>rsObjekte <\/b>und f&uuml;llt es mit den Daten der Pass Through-Abfrage:<\/p>\n<pre><span style=\"color:blue;\">Set<\/span> rsObjekte = ptqry.OpenRecordset<\/pre>\n<p>Zu jedem Eintrag des Recordsets wird dann eine neue Tabellendefinitionen erstellt. <\/p>\n<pre><span style=\"color:blue;\">Do While<\/span> <span style=\"color:blue;\">Not<\/span> rsObjekte.EOF\r\n     ''Tabelle einbinden\r\n     <span style=\"color:blue;\">On Error GoTo<\/span> 0\r\n     <span style=\"color:blue;\">Set<\/span> tdf = CurrentDb.CreateTableDef(rsObjekte!Tabelle,  dbAttachSavePWD, rsObjekte!Originaltabelle,  strODBC)\r\n     CurrentDb.TableDefs.Append tdf\r\n     CurrentDb.TableDefs(rsObjekte!Tabelle).RefreshLink\r\n     rsObjekte.Move<span style=\"color:blue;\">Next<\/span>\r\n<span style=\"color:blue;\">Loop<\/span><\/pre>\n<p>Die Parameter der Anweisung <b>CurrentDb.CreateTableDef <\/b>beinhalten alle wichtigen Informationen f&uuml;r den sp&auml;teren Datenzugriff. Dabei &uuml;bergibt der Parameter <b>rsObjekte!Tabelle <\/b>den Namen, unter dem die eingebundene Tabelle sp&auml;ter in Access zu sehen ist, w&auml;hrend der Parameter <b>dbAttachSavePWD <\/b>das Kennwort der Anmeldedaten in Access speichert. Die Bezeichnung der Originaltabelle liefert der Parameter <b>rsObjekte!Originaltabelle <\/b>und den Weg dorthin beschreibt die Verbindungszeichenfolge im Parameter <b>strODBC<\/b>. <\/p>\n<p>Mit den n&auml;chsten beiden Anweisungen wird die Tabellendefinition der Access-Applikation hinzugef&uuml;gt und die Informationen zur neu eingebundenen Tabelle aktualisiert:<\/p>\n<pre>CurrentDb.TableDefs.Append tdf\r\nCurrentDb.TableDefs(rsObjekte!Name). RefreshLink<\/pre>\n<p>Dieser Vorgang wiederholt sich nun f&uuml;r alle Tabellen, die mit der Pass Through-Abfrage ermittelt wurden. Dabei spielt die Verbindungszeichenfolge der Pass Through-Abfrage eine wichtige Rolle. Mit den Anmeldedaten der Anmeldung <b>WaWiPersonal <\/b>werden alle Tabellen der Datenbank eingebunden. Bei der Anmeldung <b>WaWiMa <\/b>hingegen sind es nur acht Tabellen. Im aktuellen Berechtigungskonzept ist dieser Anmeldung der Zugriff auf die Tabellen <b>Bewerber<\/b>, <b>Mitarbeiter <\/b>und <b>Stellen <\/b>verweigert &#8211; und ohne Rechte kann die Pass Through-Abfrage diese Tabellen nicht ermitteln. Die Funktion bindet also nur die Tabellen ein, zu denen die dabei verwendete Anmeldung entsprechende Zugriffsrechte besitzt. Ein nicht zu untersch&auml;tzender Sicherheitsaspekt.<\/p>\n<p><!--30percent--><\/p>\n<p>Nachdem alle Tabellen der Datenbank hinzugef&uuml;gt sind, wird der Navigationsbereich aktualisiert und die offenen Objekte geschlossen:<\/p>\n<pre>Application.RefreshDatabaseWindow\r\nrsObjekte.Close\r\n<span style=\"color:blue;\">Set<\/span> rsObjekte = Nothing\r\nptqry.Close\r\n<span style=\"color:blue;\">Set<\/span> ptqry = Nothing<\/pre>\n<p>Soweit die Theorie, es folgt die Praxis. Dazu aktivieren Sie per Tastenkombination <b>Strg + G <\/b>den VBA-Direktbereich und f&uuml;hren dort die Funktion <b>fTabellenEinbinden <\/b>aus. Anschlie&szlig;end wechseln Sie zum Navigationsbereich in Access und &ouml;ffnen die Tabelle <b>Kunden <\/b>in der Entwurfsansicht. Die Eigenschaft <b>Beschreibung <\/b>enth&auml;lt jetzt Ihre Verbindungszeichenfolge. Ein Klick auf die Datenblattansicht liefert Ihnen die Daten der Kunden. Sie sehen, der Datenzugriff &uuml;ber eingebundene Tabellen funktioniert auch ohne DSN. Wodurch die ODBC-Datenquelle <b>WaWi_SQL <\/b>f&uuml;r die Beispielapplikation entbehrlich ist. Sie kann gel&ouml;scht werden. Nat&uuml;rlich nur, wenn Sie diese nicht in anderen Applikationen wie Excel oder weiteren Access-Datenbanken verwenden. <\/p>\n<p>F&uuml;r eine Installation der Access-Applikation <b>WaWi <\/b>auf einem neuen Rechner ist die ODBC-Datenquelle nicht mehr erforderlich. In Zukunft m&uuml;ssen Sie dort lediglich den ODBC-Treiber und die Access-Applikation installieren. Das reduziert nicht nur den Arbeits- und Pflegeaufwand, es schlie&szlig;t gleich noch eine Sicherheitsl&uuml;cke. Denn ohne die ODBC-Datenquelle sind auch keine unerw&uuml;nschten Datenzugriffe m&ouml;glich. Apropos Sicherheitsl&uuml;cke: Ihre Datei-DSN enth&auml;lt das Kennwort im Klartext und da Sie die Datei nicht mehr ben&ouml;tigen, sollten Sie diese umgehend l&ouml;schen.<\/p>\n<h2>Das Kennwort zur Anmeldung<\/h2>\n<p>Kennwort ist ein gutes Stichwort. Aktuell ist das Kennwort zur Anmeldung in der Funktion <b>fObdcPerFunction <\/b>hinterlegt und somit f&uuml;r jeden sichtbar, der in den Quellcode schauen darf. Das muss nicht sein, denn das Kennwort l&auml;sst sich recht einfach verstecken. <\/p>\n<p>Die Access-Applikation <b>WaWi <\/b>arbeitet bereits mit einem versteckten Kennwort. Im Formular <b>Artikel <\/b>erfolgt die Datenermittlung per ADO. Die hierf&uuml;r notwendige Verbindungszeichenfolge setzt die Funktion <b>fAdoPerTabelle <\/b>zusammen. Diese ermittelt in der lokalen Tabelle <b>ADO <\/b>die Bezeichnung des SQL Servers, den Namen der Datenbank und die Anmeldedaten.<\/p>\n<p>Die Tabelle ist als Systemobjekt definiert. Dadurch ist sie zum einen schreibgesch&uuml;tzt und zum anderen im Navigationsbereich nicht ohne weiteres zu sehen. Zus&auml;tzlich ist das Kennwort in der Tabelle mit dem Eingabeformat <b>Kennwort <\/b>maskiert und daher in der Datenblattansicht nicht lesbar.<\/p>\n<p>Ein perfektes Szenario, das sich ebenso gut zum Einbinden der Tabellen per ODBC verwenden l&auml;sst. Dann ist allerdings der Name <b>ADO <\/b>nicht mehr so treffend. Aus diesem Grund wurde die Tabelle in <b>Datenquellen <\/b>umbenannt. <\/p>\n<p>Um das Einbinden der Tabellen an die neue Vorgehensweise anzupassen, m&uuml;ssen Sie lediglich die Funktion zum Erstellen der Verbindungszeichenfolge austauschen. So wird in der Funktion <b>fTabellenEinbinden <\/b>aus der Zeile <b>strODBC = fOdbcPerFunction <\/b>die Zeile <b>strODBC = fOdbcPerTabelle <\/b>(siehe Bild 9). Die Funktion <b>fOdbcPerTabelle <\/b>ermittelt in der Tabelle <b>Datenquellen<\/b> die Informationen zur Verbindung und erstellt die Verbindungszeichenfolge. Alles weitere bleibt unver&auml;ndert.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2021_04\/Abb. 6.09.png\" alt=\"Einbinden mit fOdbcPerTabelle\" width=\"424,7115\" height=\"242,1253\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 9: Einbinden mit fOdbcPerTabelle<\/span><\/b><\/p>\n<p>Die Bezeichnung Ihres SQL Servers haben Sie bereits bei der Installation der Beispielumgebung in die Tabelle <b>Datenquellen<\/b> eingetragen. Sie k&ouml;nnen die &Auml;nderung also direkt testen. Dazu f&uuml;hren Sie im VBA-Direktbereich die Funktion <b>fTabellenEinbinden <\/b>erneut aus. Anschlie&szlig;end klicken Sie auf die einzelnen Schaltfl&auml;chen im Formular <b>Start<\/b>. Da Sie die Anmeldung <b>WaWiPersonal <\/b>verwenden, liefert Ihnen jede Schaltfl&auml;che die entsprechenden Daten. <\/p>\n<p>Das Kennwort liegt jetzt gesch&uuml;tzt in einer versteckten Tabelle. So richtig vollst&auml;ndig ist der Kennwortschutz aber noch nicht. Dazu m&uuml;ssen Sie erst noch die Funktion <b>fOdbcPerFunction <\/b>l&ouml;schen. Denn dort ist das Kennwort immer noch zu sehen. <\/p>\n<h2>Die gespeicherte Anmeldung<\/h2>\n<p>F&uuml;r den Datenzugriff per ADO und f&uuml;r das Einbinden der Tabellen mag das Kennwort zwar gut versteckt sein. Nach dem Einbinden der Tabellen steht es aber wieder lesbar in der Spalte <b>Connect <\/b>der Systemtabelle <b>MSysObjects<\/b>. Eine einfache <b>DLookup<\/b>-Anweisung auf diese Systemtabelle liefert Ihnen die Verbindungszeichenfolge inklusive Kennwort (siehe Bild 10). In der Eigenschaft <b>ODBC-Verbindung <\/b>der beiden Pass Through-Abfragen ist es ebenfalls zu sehen. Aktuell l&auml;sst sich das nicht vermeiden.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2021_04\/Abb. 6.10.png\" alt=\"Das Kennwort zur eingebundenen Tabelle\" width=\"700\" height=\"52,83017\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 10: Das Kennwort zur eingebundenen Tabelle<\/span><\/b><\/p>\n<p>F&uuml;r einen direkten Datenzugriff ist das gespeicherte Kennwort sowohl bei den eingebundenen Tabellen wie auch bei den Pass Through-Abfragen erforderlich. Ohne gespeichertes Kennwort m&uuml;sste es beim &Ouml;ffnen einer eingebundenen Tabelle wie beim Ausf&uuml;hren einer Pass-Through-Abfrage erst einmal vom Anwender eingegeben werden. Es ist eher unwahrscheinlich, dass bei dieser Vorgehensweise das Kennwort besser gesch&uuml;tzt ist. <\/p>\n<p>Dennoch ist es kein schlechter Gedanke, auf das Speichern des Kennworts zu verzichten. Access verlangt zwar dann beim Zugriff auf die Daten die Eingabe des Kennworts, dies allerdings nur beim ersten Datenzugriff nach dem Start der Access-Applikation. Mit dem eingegebenen Kennwort wird die Verbindungszeichenfolge erg&auml;nzt und anschlie&szlig;end die Verbindung zum SQL Server hergestellt. Genau diese Verbindung speichert Access und verwendet sie f&uuml;r alle folgenden Datenzugriffe. <\/p>\n<p>In der aktuellen Version wird das Kennwort noch beim Einbinden der Tabellen gespeichert. Um dies zu &auml;ndern, wechseln Sie zur Funktion <b>fTabellenEinbinden <\/b>und ersetzen in der Anweisung den Parameter <b>dbAttachSavePWD <\/b>mit <b>dbAppendOnly <\/b>(siehe Bild 11):<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2021_04\/Abb. 6.11.png\" alt=\"Einbinden der Tabellen ohne Kennwort\" width=\"700\" height=\"118,6956\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 11: Einbinden der Tabellen ohne Kennwort<\/span><\/b><\/p>\n<pre><span style=\"color:blue;\">Set<\/span> tdf = CurrentDb.CreateTableDef(rsObjekte!Name, dbAttachSavePWD, rsObjekte!Tabelle, strODBC)<\/pre>\n<p>Danach f&uuml;hren Sie im VBA-Direktbereich die Funktionen <b>fTabellenEinbinden <\/b>und <b>fPassThroughVerbindungen <\/b>aus. Die Funktion <b>fPassThroughVerbindungen <\/b>kennen Sie bereits aus der Installationsanleitung der Beispielumgebung. Sie &uuml;bertr&auml;gt die Verbindungszeichenfolge einer eingebundenen Tabelle in die Eigenschaften der Pass Through-Abfragen. Nachdem Sie die beiden Funktionen ausgef&uuml;hrt haben, ist das Kennwort weder in den Eigenschaften der eingebundenen Tabellen noch in denen der Pass Through-Abfragen gespeichert. Jetzt starten Sie Access neu und &ouml;ffnen die Tabelle <b>Kunden <\/b>mit einem Doppelklick. Sie erhalten den Anmeldedialog aus Bild 12.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2021_04\/Abb. 6.12.png\" alt=\"Der Anmelde-Dialog beim ersten Datenzugriff\" width=\"424,7115\" height=\"167,4174\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 12: Der Anmelde-Dialog beim ersten Datenzugriff<\/span><\/b><\/p>\n<p>Hier tragen Sie den Anmeldenamen <b>WaWiPersonal <\/b>mitsamt dem zugeh&ouml;rigen Kennwort ein und best&auml;tigen die Eingabe mit einem Klick auf <b>OK<\/b>. Mit diesen Anmeldedaten wird jetzt eine Verbindung zum SQL Server hergestellt und die Daten der Tabelle <b>Kunden <\/b>ermittelt. Das Ergebnis sehen Sie in der Datenblattansicht. Access verwendet die eben erstellte Verbindung nun f&uuml;r alle weiteren Datenzugriffe. Ein Doppelklick auf die Tabelle <b>Mitarbeiter <\/b>liefert Ihnen ebenso Daten wie ein Doppelklick auf die Pass Through-Abfrage <b>ptSelectGeburtstagsliste<\/b>.<\/p>\n<p>So weit so gut. Nur geht die Verbindung bei einem Neustart von Access verloren. Starten Sie die Access-Applikation <b>WaWi <\/b>noch einmal und klicken Sie auf die Schaltfl&auml;che <b>Artikel<\/b>. Wider Erwarten sehen Sie direkt die Daten der <b>Artikel<\/b>. Eine Anmeldung wurde nicht verlangt. Ist die Verbindung doch noch gespeichert Nein. Die Eingabe der Anmeldedaten ist in diesem Fall nicht notwendig. Im Formular <b>Artikel <\/b>erfolgt der Datenzugriff per ADO. Alle erforderlichen Informationen f&uuml;r eine Verbindung per ADO liefert die lokale Tabelle <b>Datenquellen<\/b>. <\/p>\n<p>Die Kennworteingabe wird nur bei einem Datenzugriff &uuml;ber eine eingebundene Tabelle oder einer Pass Through-Abfrage verlangt, wie ein Klick auf die Schaltfl&auml;che <b>Auftr&auml;ge <\/b>beweist: Hier erhalten Sie den erwarteten Anmeldedialog. Erst nach der Eingabe der Anmeldedaten sehen Sie die Auftr&auml;ge. Danach liefern Ihnen alle anderen Schaltfl&auml;chen die gew&uuml;nschten Daten und das ohne weitere Anmeldungen. <\/p>\n<p>Soweit ist das doch recht komfortabel. Sie m&uuml;ssen nur noch diesen Anmeldedialog loswerden. Kein Problem. Alles, was Sie dazu ben&ouml;tigen ist ein Anmeldevorgang am SQL Server kurz nach dem Start der Access-Applikation. Ein einfacher kleiner Zugriff auf den SQL Server reicht vollkommen aus und sei es nur zum Ermitteln der aktuellen Uhrzeit. Sie k&ouml;nnen die erste Verbindung nat&uuml;rlich auch f&uuml;r etwas Sinnvolleres nutzen. Warum nicht zum Einbinden der Tabellen Dann erfolgt der erste Datenzugriff immer mit der tempor&auml;ren Pass Through-Abfrage, die in der SQL Server-Datenbank die Bezeichnungen der einzubindenden Tabellen ermittelt. Die hierzu erforderliche Verbindungszeichenfolge ergibt sich aus den Daten der lokalen Tabelle <b>Datenquellen<\/b>. So wie es beim Datenzugriff per ADO der Fall ist. Die dabei erstellte Verbindung liefert Ihnen nicht nur die Tabellen, die den Zugriffsrechten der verwendeten Anmeldung entsprechen, vielmehr steht sie danach mit denselben Rechten f&uuml;r alle weiteren Datenzugriffe zur Verf&uuml;gung.<\/p>\n<p>Das ist doch einen Test wert. Starten Sie die Access-Applikation <b>WaWi <\/b>erneut und wechseln Sie direkt zum VBA-Direktbereich. Dort f&uuml;hren Sie die Funktionen <b>fTabellenEinbinden <\/b>und <b>fPassThroughVerbindungen <\/b>aus. Danach wechseln Sie zum <b>Start<\/b>-Formular und klicken auf die Schaltfl&auml;che <b>Mitarbeiter<\/b>. Sie sehen die Daten der Mitarbeiter &#8211; und das ohne eine Kennworteingabe. Perfekt. Jetzt m&uuml;ssen Sie nur noch daf&uuml;r sorgen, dass die Funktion <b>fTabellenEinbinden <\/b>immer als erstes ausgef&uuml;hrt wird. Am besten abh&auml;ngig vom angemeldeten Anwender. Das l&auml;sst sich mit recht wenig Aufwand realisieren. <\/p>\n<p>Doch vorher noch ein Hinweis zur gespeicherten Verbindung. Denn dieser Vorteil kann ebenso gut ein Nachteil sein. M&ouml;glicherweise bietet Ihre Access-Applikation einen Anmeldedialog. &Uuml;ber diesen melden sich mehrere Anwender abwechselnd mit Benutzernamen und Kennwort an, ohne dabei Access neu zu starten. Nach dem Anmeldevorgang werden die Tabellen eingebunden und durch eine Benutzersteuerung die entsprechenden Formulare, Men&uuml;s und Schaltfl&auml;chen angeboten. Nun mag die Benutzersteuerung daf&uuml;r sorgen, dass der Anwender sich im richtigen Bereich der Applikation bewegt. Die Datenzugriffe erfolgen jedoch immer noch mit den Rechten der Anmeldung, die bei der ersten Verbindung zum SQL Server verwendet wurde. Ein tats&auml;chlicher Wechsel der Anmeldung und somit der Zugriffsrechte findet erst nach einem Neustart von Access statt. Dabei reicht das einfache Schlie&szlig;en der Datenbank innerhalb einer aktiven Access-Session nicht aus. Sie m&uuml;ssen Access komplett beenden. Erst dann existiert die Verbindung nicht mehr. Leider l&auml;sst sich dieser Neustart nicht umgehen. Aktuell ist keine Methode bekannt, mit der eine bestehende Verbindung getrennt und mit anderen Anmeldedaten wieder neu erstellt werden kann. <\/p>\n<h2>Eine Applikation f&uuml;r alle<\/h2>\n<p>Der erste Datenzugriff nach dem Start der Access-Applikation soll beim Einbinden der Tabellen erfolgen und zwar mit der Anmeldung, die zum Benutzerkonto des aktuellen Anwenders passt. Diese Funktionalit&auml;t bietet die Access-Applikation <b>WaWi v2<\/b>. Die Erweiterungen dieser Version sind schnell beschrieben. Gekennzeichnet durch die Spalte <b>DatenquellenID <\/b>enth&auml;lt die Tabelle <b>Datenquellen <\/b>jetzt die Anmeldedaten beider Anmeldungen (siehe Bild 13).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2021_04\/Abb. 6.13.png\" alt=\"Die Tabelle Datenquellen\" width=\"499,7115\" height=\"71,99235\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 13: Die Tabelle Datenquellen<\/span><\/b><\/p>\n<p>In der neuen lokalen Tabelle <b>Benutzer <\/b>sind die Benutzerkonten der Anwender hinterlegt und &uuml;ber die Spalte <b>DatenquellenID <\/b>einer Datenquelle und somit einer Anmeldung zugeordnet (siehe Bild 14). Die Tabelle <b>Benutzer <\/b>ist wie die Tabelle <b>Datenquellen <\/b>als Systemobjekt definiert.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2021_04\/Abb. 6.14.png\" alt=\"Die Tabelle Benutzer\" width=\"349,7115\" height=\"78,43135\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 14: Die Tabelle Benutzer<\/span><\/b><\/p>\n<p>Das Erstellen der Verbindungszeichenfolge findet weiterhin in den Funktionen <b>fOdbcPerTabelle <\/b>und <b>fAdoPerTabelle <\/b>statt. Jedoch werden die Daten zur Anmeldung nicht mehr direkt in der Tabelle <b>Datenquellen <\/b>ermittelt, sondern mit der Access-Abfrage Anmeldedaten (siehe Bild 15). Dort liefert die Funktion <b>fOSUserName <\/b>das Benutzerkonto des angemeldeten Anwenders und filtert mit diesem Wert die Eintr&auml;ge der Tabelle <b>Benutzer<\/b>. Das Ergebnis wird &uuml;ber die Verkn&uuml;pfung zur Tabelle <b>Datenquellen <\/b>mit den zugeh&ouml;rigen Anmeldedaten erg&auml;nzt. In der Beispielumgebung ist das die Anmeldung <b>WaWiMa <\/b>f&uuml;r Frau Bienlein und <b>WaWiPersonal <\/b>f&uuml;r Herrn Stromberg.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2021_04\/Abb. 6.15.png\" alt=\"Die Abfrage Anmeldedaten\" width=\"549,7115\" height=\"372,8696\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 15: Die Abfrage Anmeldedaten<\/span><\/b><\/p>\n<p>Nach dem Start der Access-Applikation wird automatisch das unsichtbare Formular <b>Verbindung <\/b>ge&ouml;ffnet. Dessen Ereignis <b>Form_Open <\/b>f&uuml;hrt die Funktion <b>fTabellenEinbinden <\/b>mitsamt der Funktion <b>fPassThroughVerbindungen <\/b>aus. Die hierzu g&uuml;ltige Verbindungszeichenfolge liefert die Funktion <b>fOdbcPerTabelle <\/b>anhand der Abfrage <b>Anmeldedaten<\/b>. So ist sichergestellt, dass nur die Tabellen eingebunden werden, mit denen der Anwender tats&auml;chlich arbeiten darf. Nach dem Einbinden der Tabellen und dem Anpassen der Pass Through-Abfragen wird das Formular <b>Start <\/b>ge&ouml;ffnet und das unsichtbare Formular Verbindung geschlossen.<\/p>\n<p>Bevor Sie nun das neue Anmeldeverfahren testen, m&uuml;ssen Sie zuerst die Daten der Tabellen <b>Benutzer <\/b>und <b>Datenquellen <\/b>an Ihre Umgebung anpassen. Starten Sie die Access-Applikation <b>WaWi v2 <\/b>und &ouml;ffnen Sie die beiden Tabellen. Der Einfachheit halber sind diese noch nicht als Systemobjekte definiert. In der Tabelle <b>Benutzer <\/b>geben Sie Ihr Benutzerkonto ein. Die Anmeldedaten mit den h&ouml;chsten Rechten erhalten Sie mit dem Wert <b>1 <\/b>in der Spalte <b>DatenquellenID<\/b>. Anschlie&szlig;end &uuml;berschreiben Sie in der Tabelle <b>Datenquellen <\/b>noch die Inhalte der Spalte <b>Server <\/b>mit der Bezeichnung Ihres SQL Servers.<\/p>\n<p>Jetzt sind Sie bereit f&uuml;r den Test. Beenden Sie die Access-Applikation <b>WaWi v2 <\/b>und starten Sie sie direkt wieder. Ein Klick auf die Schaltfl&auml;che <b>Geburtstagsliste <\/b>im <b>Start<\/b>-Formular zeigt die Geburtstage der Mitarbeiter. F&uuml;r einen Test der Anmeldung <b>WaWiMa <\/b>&ouml;ffnen Sie nochmals die Tabelle <b>Benutzer<\/b>. Dort &auml;ndern Sie in dem Datensatz mit Ihrem Benutzerkonto den Wert der Spalte <b>DatenquellenID <\/b>in <b>2<\/b>. Nach einem weiteren Neustart der Access-Applikation klicken Sie auf die Schaltfl&auml;che <b>Geburtstagsliste<\/b>. Jetzt erhalten Sie entsprechend der Rechtevergabe eine Fehlermeldung (siehe Bild 16).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2021_04\/Abb. 6.16.png\" alt=\"Fehler beim Datenzugriff\" width=\"424,7115\" height=\"186,7654\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 16: Fehler beim Datenzugriff<\/span><\/b><\/p>\n<p>&Ouml;ffnen Sie die Tabelle <b>Benutzer <\/b>ein weiteres Mal und setzen Sie den Wert der Datenquellen-ID zur&uuml;ck auf <b>1<\/b>. So haben Sie nach dem n&auml;chsten Start der Access-Applikation wieder die vollen Zugriffsrechte. Vor dem Neustart definieren Sie noch die beiden Tabellen <b>Benutzer <\/b>und <b>Datenquellen <\/b>als Systemtabellen. Dazu f&uuml;hren Sie im VBA-Direktbereich nacheinander die folgenden Anweisungen aus:<\/p>\n<pre>fTabelleAlsSystemObjekt \"Benutzer\", <span style=\"color:blue;\">True<\/span> \r\nfTabelleAlsSystemObjekt \"Datenquellen\", <span style=\"color:blue;\">True<\/span> <\/pre>\n<p>Im Vergleich zur urspr&uuml;nglichen Version reduziert die Version <b>WaWi v2 <\/b>den Installationsaufwand und die Fehleranf&auml;lligkeit enorm. Es ist nicht mehr notwendig, pro Abteilung eine Access-Applikation zu erstellen und dabei die Tabellen mit der zugeh&ouml;rigen Anmeldung einzubinden. Ebenso entf&auml;llt das Anpassen der Anmeldedaten in der lokalen Tabelle <b>Datenquellen<\/b>. Mit der Version <b>WaWi v2 <\/b>haben Sie eine Access-Applikation f&uuml;r alle Abteilungen. Sie m&uuml;ssen lediglich die Tabelle <b>Benutzer <\/b>auf dem aktuellen Stand halten. <\/p>\n<h2>Ein verschl&uuml;sseltes Kennwort<\/h2>\n<p>Ein maskiertes Kennwort in einer versteckten Tabelle ist Ihnen nicht sicher genug Das ist eine gute Einstellung. Immerhin l&auml;sst sich das Kennwort trotz des bisherigen Aufwands recht einfach ermitteln. Alles was Sie dazu ben&ouml;tigen, ist ein Texteditor. &Ouml;ffnen Sie die ACCDB der Access-Applikation <b>WaWi v2 <\/b>doch einmal in einem Texteditor und suchen Sie dort nach dem Anmeldenamen <b>WaWiPersonal<\/b>. Gleich der erste Treffer zeigt Ihnen den Inhalt der Tabelle <b>Datenquellen <\/b>(siehe Bild 17). Um das Kennwort zu ermitteln, muss ein Angreifer also lediglich einen der Anmeldenamen kennen. Dazu reicht in der Regel ein Blick in die gespeicherten ODBC-Datenquellen.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2021_04\/Abb. 6.17.png\" alt=\"Die ACCDB im Texteditor\" width=\"549,7115\" height=\"176,5874\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 17: Die ACCDB im Texteditor<\/span><\/b><\/p>\n<p>Ein weiterer guter Grund sich davon zu trennen. Selbst wenn dem Angreifer der Anmeldename nicht bekannt ist, liefern die Suchergebnisse nach den Begriffen <b>Kennwort <\/b>und <b>K e n n w o r t <\/b>hilfreiche Hinweise. Versuchen Sie es mal. Sie werden erstaunt sein, welche Informationen Sie so entdecken. <\/p>\n<p>Es wird nicht lange dauern, bis der Angreifer den Begriff <b>Kennwort <\/b>als Spalte der Tabelle <b>Datenquellen <\/b>erkennt. Den Rest liefert die Access-Applikation selbst. Dazu ist nur die folgende <b>DLookup<\/b>-Anweisung im VBA-Direktbereich auszuf&uuml;hren:<\/p>\n<pre>  DLookup(\"Kennwort\",\"Datenquellen\") <\/pre>\n<p>Das Ergebnis zeigt das Kennwort des ersten Datensatzes im Klartext. Nebenbei bemerkt ist die Suche im Texteditor wie das Ausf&uuml;hren von Funktionen im VBA-Direktbereich ebenso gut in einer ACCDE m&ouml;glich. Ein besserer Schutz des Kennworts ist also eine sehr gute Idee. Mit ein wenig Aufwand l&auml;sst es sich verschl&uuml;sselt in einer lokalen Tabelle speichern. Eine Sicherheitsma&szlig;nahme, die in der Praxis oft und gerne angewendet wird.<\/p>\n<p>In der Access-Applikation <b>WaWi v2 <\/b>&uuml;bernimmt die Verschl&uuml;sselung des Kennworts die Funktion <b>fKennwortErstellen<\/b>. Der Einfachheit halber besteht die Verschl&uuml;sselungsmethode aus dem Reversieren des Kennworts. So wird aus <b>SicherIn2020! <\/b>der Wert <b>!0202nIrehciS<\/b>. Dazu f&uuml;hren Sie im VBA-Direktbereich die Funktion <b>fKennwortErstellen <\/b>wie folgt aus:<\/p>\n<pre>  fKennwortErstellen(\"SicherIn2020!\", \"WaWiMa\")<\/pre>\n<p>Die Funktion verschl&uuml;sselt das Kennwort und schreibt den verschl&uuml;sselten Wert in den Datensatz zur Anmeldung <b>WaWiMa <\/b>der Tabelle <b>Datenquellen<\/b>. Wiederholen Sie den Vorgang doch gleich noch f&uuml;r die Anmeldung <b>WaWiPersonal<\/b>. Anschlie&szlig;end lassen Sie sich das verschl&uuml;sselte Kennwort mit dieser <b>DLookup<\/b>-Anweisung ausgeben (siehe Bild 18). <\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2021_04\/Abb. 6.18.png\" alt=\"Das verschl&uuml;sselte Kennwort\" width=\"349,7115\" height=\"65,4346\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 18: Das verschl&uuml;sselte Kennwort<\/span><\/b><\/p>\n<pre>DLookup(\"Kennwort\",\"Datenquellen\",\"Benutzer=\"\"WaWiPersonal\"\"\") <\/pre>\n<p>Vor dem Erstellen der Verbindungszeichenfolge muss der verschl&uuml;sselte Wert nat&uuml;rlich wieder entschl&uuml;sselt werden. Dazu erweitern Sie die beiden Funktionen <b>fAdoPerTabelle<\/b> und <b>fOdbcPerTabelle <\/b>mit der Funktion <b>fKennwortLesen<\/b>. Bild 19 zeigt diese Erg&auml;nzung exemplarisch in der Funktion <b>fOdbcPerTabelle<\/b>. Die Funktion <b>fKennwortLesen <\/b>erh&auml;lt als Eingabeparameter den verschl&uuml;sselten Wert aus der Tabelle <b>Datenquellen <\/b>und liefert als Ergebnis das Kennwort im Klartext. <\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2021_04\/Abb. 6.19.png\" alt=\"Die Anpassung in fOdbcPerTabelle\" width=\"624,7115\" height=\"208,9035\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 19: Die Anpassung in fOdbcPerTabelle<\/span><\/b><\/p>\n<p>Das war es schon. Speichern Sie die &Auml;nderungen und schlie&szlig;en Sie die Access-Applikation. Nach einem Neustart stellen Sie keine Besonderheiten fest. Jede Schaltfl&auml;che des Start-Formulars liefert wie gewohnt die angeforderten Daten. Dennoch hat sich etwas gravierend ver&auml;ndert. Die lokale Tabelle <b>Datenquellen <\/b>speichert das Kennwort nicht mehr im Klartext.<\/p>\n<p>Ob Sie in die Tabelle Datenquellen schauen, es per <b>DLookup <\/b>im VBA-Direktbereich oder gar mit einem Texteditor direkt in der ACCDB versuchen, Sie sehen lediglich das verschl&uuml;sselte Kennwort. Wie stark Sie das Kennwort verschl&uuml;sseln, ist Ihnen freigestellt. Sie m&uuml;ssen nur die Funktionen <b>fKennwortErstellen <\/b>und <b>fKennwortLesen <\/b>an Ihren Verschl&uuml;sselungsalgorithmus anpassen.<\/p>\n<h2>Der Fall Bienlein<\/h2>\n<p>Es gibt eine neue Version. <b>WaWi v2<\/b>. H&ouml;rt sich an wie eine Rakete, denkt Frau Bienlein und &ouml;ffnet erwartungsvoll die Applikation. Entt&auml;uscht stellt sie keinerlei &Auml;nderungen fest. Alles sieht aus wie bisher. Es gibt nichts Neues zu entdecken. Ob das noch die alte Version ist Frau Bienlein ruft in der IT-Abteilung an und fragt nach der neuen Version. Irgendwie scheint es in ihrer aktuellen Installation keine neuen Funktionen zu geben. Der IT-Mitarbeiter beruhigt sie und erkl&auml;rt, dass es dieses Mal nur technische &Auml;nderungen gibt. Unter anderem habe man das Anmeldeverfahren vereinfacht. F&uuml;r Frau Bienlein sind das schon mehr Informationen als sie sich erhofft hatte. Sie bedankt sich und beendet das Gespr&auml;ch.<\/p>\n<p>Das Anmeldeverfahren wurde also ge&auml;ndert. Ob die Anmeldung in Ihrer Datenbank davon betroffen ist Sie &ouml;ffnet ihre eigene Access-Datenbank und klickt doppelt auf die eingebundene Tabelle <b>dbo_Mitarbeiter<\/b>. Das hatte sie bef&uuml;rchtet. Anstelle der Daten sieht sie eine Fehlermeldung (siehe Bild 20). Ok, den Fall hatte sie schon &ouml;fter. Routiniert klickt sie sich durch <b>Externe Daten|Neue Datenquelle|Aus Datenbank|Aus SQL Server <\/b>zum Dialog <b>Externe Daten &#8211; ODBC Datenbank <\/b>und aktiviert dort die zweite Option. Nach einem Klick auf <b>OK <\/b>sieht sie den Dialog <b>Datenquelle ausw&auml;hlen <\/b>und wechselt dort zur Registerkarte <b>Computerdatenquelle<\/b>. Jetzt noch schnell den Eintrag <b>WaWi_SQL <\/b>ausw&auml;hlen und schon lassen sich die Anmeldedaten pr&uuml;fen. Aber wo ist der Eintrag Die Datenquelle <b>WaWi_SQL <\/b>wird nicht mehr angezeigt.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2021_04\/Abb. 6.20.png\" alt=\"Fehlermeldung f&uuml;r Frau Bienlein\" width=\"349,7115\" height=\"117,9379\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 20: Fehlermeldung f&uuml;r Frau Bienlein<\/span><\/b><\/p>\n<p>Frau Bienlein bricht die Aktion ab. Ihre Vermutung wurde aufs &Uuml;belste best&auml;tigt. Wie soll sie nur ohne die Datenquelle an die Personaldaten kommen Und wie funktioniert dieses neue Anmeldeverfahren Alles was Sie braucht, ist die Tabelle <b>Mitarbeiter <\/b>und die zugeh&ouml;rigen Anmeldedaten. Sie &ouml;ffnet die Access-Applikation <b>WaWi v2 <\/b>mit gedr&uuml;ckter Umschalt-Taste. Im Navigationsbereich schaut sie nach der Tabelle <b>Mitarbeiter<\/b>. Nichts. Weder die Tabelle <b>Mitarbeiter <\/b>noch die anderen Tabellen der Personalabteilung sind in der Auflistung enthalten. <\/p>\n<p>Wie sieht es mit den Anmeldedaten aus Beim letzten Mal hatte sie den Anmeldenamen und das Kennwort in den Eigenschaften der Pass Through-Abfragen entdeckt. Sie erweitert den Ordner <b>Abfragen <\/b>und &ouml;ffnet eine der Pass Through-Abfragen in der Entwurfsansicht. Doch von Anmeldedaten ist hier nichts zu sehen. Die zweite Pass Through-Abfrage enth&auml;lt ebenfalls keine Informationen zu einer Anmeldung. Neben den beiden Pass Through-Abfragen entdeckt Frau Bienlein eine neue Access-Abfrage. Ob die weiterhilft Ein Doppelklick auf die Abfrage zeigt ihr einen Datensatz mit Informationen zur Anmeldung <b>WaWiMa <\/b>(siehe Bild 22). Sie wechselt zur Entwurfsansicht der Abfrage und entdeckt das Filterkriterium <b>fOsUserName<\/b>.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2021_04\/Abb. 6.21.png\" alt=\"Die Anmeldedaten der Kollegen\" width=\"524,7115\" height=\"57,49015\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 21: Die Anmeldedaten der Kollegen<\/span><\/b><\/p>\n<p>Frau Bienlein sieht gerne das gro&szlig;e Ganze. Sie entfernt den Filter und f&uuml;hrt die Abfrage erneut aus. Die Datenblattansicht listet jetzt alle Anmeldedaten auf. Dort entdeckt sie den Eintrag <b>WaWiPersonal<\/b>. Eine erste Spur. Ihr ist bekannt, dass die Personalabteilung mit dieser Anmeldung arbeitet. Genau diese Anmeldung hatte sie vor ein paar Monaten in den Eigenschaften der Pass Through-Abfragen entdeckt. Seitdem konnte sie problemlos auf die Daten der Personalabteilung zugreifen. Bis diese &auml;rgerliche neue Version kam. <\/p>\n<p>Jetzt fehlt ihr noch das Kennwort. Zwar enth&auml;lt die Datenblattansicht eine Spalte namens <b>Kennwort<\/b>, der Inhalt ist aber nicht lesbar. Das ist kein Problem f&uuml;r Frau Bienlein. Sie kennt die Option, mit der die Ausgabe einer Spalte maskiert wird. Sie muss nur die zugeh&ouml;rige Tabelle finden und die Maskierung entfernen. Zur&uuml;ck in der Entwurfsansicht erkennt sie, dass die Anmeldedaten aus der Tabelle <b>Datenquellen <\/b>stammen. Sie erweitert den Navigationsbereich und sucht die Tabelle <b>Datenquellen<\/b>. Ohne Erfolg. Dort gibt es die Tabelle nicht. <\/p>\n<p>Dann muss es halt die Abfrage hergeben. Frau Bienlein erg&auml;nzt die Ausgabe mit allen Spalten der Tabelle <b>Benutzer<\/b>. In der Datenblattansicht erkennt sie den Zusammenhang. Der Datensatz mit ihrem Namen zeigt die Datenquellen-ID <b>2<\/b>. Dieser ID ist die Anmeldung <b>WaWiMa <\/b>zugeordnet. Beim Kollegen Stromberg aus der Personalabteilung enth&auml;lt der Datensatz den Anmeldenamen <b>WaWiPersonal <\/b>und in der Spalte <b>DatenquellenID <\/b>den Wert <b>1 <\/b>(siehe Bild 21). Sehr sch&ouml;n. Die Anmeldung <b>WaWiPersonal <\/b>wird also weiterhin in der Personalabteilung verwendet.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2021_04\/Abb. 6.22.png\" alt=\"Die Anmeldedaten f&uuml;r Frau Bienlein\" width=\"599,7115\" height=\"66,72285\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 22: Die Anmeldedaten f&uuml;r Frau Bienlein<\/span><\/b><\/p>\n<p>Ob sich die Datenquellen-ID in ihrem Datensatz &uuml;berschreiben l&auml;sst Sie &auml;ndert den Wert von <b>2 <\/b>in <b>1<\/b>. Ohne zu speichern schlie&szlig;t sie die Abfrage und startet sie erneut mit einem Doppelklick. Der Datensatz zeigt nun den Anmeldenamen <b>WaWiPersonal<\/b>. Und jetzt Reboot tut gut, denkt Frau Bienlein und startet die Access-Applikation neu. Dabei h&auml;lt sie die Umschalt-Taste gedr&uuml;ckt. Nach dem Neustart schaut sie erwartungsvoll in den Navigationsbereich. Doch die Tabelle <b>Mitarbeiter <\/b>ist immer noch nicht zu sehen. Wom&ouml;glich hatte die &Auml;nderung der Datenquellen-ID doch keine Auswirkung oder liegt es vielleicht an der Umschalt-Taste<\/p>\n<p>Frau Bienlein startet die Access-Applikation noch einmal. Jetzt ohne die Umschalt-Taste. Sie sieht das <b>Start<\/b>-Formular wie gewohnt mit den aktiven Schaltfl&auml;chen f&uuml;r den Vertrieb und den inaktiven f&uuml;r die Personalabteilung (siehe Bild 23). Wieder nichts. Insgeheim hatte sie gehofft, dass durch die &Auml;nderung der Datenquellen-ID die Schaltfl&auml;chen der Personalabteilung verf&uuml;gbar w&auml;ren. <\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2021_04\/Abb. 6.23.png\" alt=\"Frau Bienleins Start-Formular\" width=\"424,7115\" height=\"227,7901\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 23: Frau Bienleins Start-Formular<\/span><\/b><\/p>\n<p>Sie startet die Access-Applikation aufs Neue. Dabei h&auml;lt sie nochmal die Umschalt-Taste gedr&uuml;ckt. Ohne gro&szlig;e Erwartungen erweitert sie den Navigationsbereich. Was ist das denn Jetzt zeigt der Navigationsbereich die Tabelle <b>Mitarbeiter<\/b>. Sogar die beiden anderen Tabellen der Personalabteilung sind zu sehen. Irgendetwas muss sich seit dem letzten Start der Access-Applikation ver&auml;ndert haben. Vielleicht hat es ja doch etwas mit der Umschalt-Taste zu tun<\/p>\n<p>Egal, Frau Bienlein ist viel mehr an der Tabelle <b>Mitarbeiter <\/b>interessiert. Aber ein Doppelklick auf die Tabelle bremst sie erneut aus. Anstelle der Daten sieht sie nur einen Anmeldedialog mit ihrem Namen (siehe Bild 24). Sie denkt kurz nach. Was sagte der IT-Kollege Das Anmeldeverfahren wurde ge&auml;ndert Von den Anmeldedaten war keine Rede. Frau Bienlein &uuml;berschreibt Ihren Namen mit <b>WaWiPersonal <\/b>und gibt dann das Kennwort ein, das sie bisher f&uuml;r ihre geheimen Zugriffe verwendet hat. <\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2021_04\/Abb. 6.24.png\" alt=\"Frau Bienlein kurz vor dem Ziel\" width=\"424,7115\" height=\"167,4174\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 24: Frau Bienlein kurz vor dem Ziel<\/span><\/b><\/p>\n<p>Sie klickt gespannt auf <b>OK <\/b>&#8211; und kann sich das Grinsen nicht verkneifen. Die Tabelle <b>Mitarbeiter <\/b>zeigt alle Daten. Frau Bienlein navigiert direkt zur Spalte <b>AktuellesGehalt <\/b>und erh&ouml;ht ihr Gehalt erneut um 5 Euro. Danach &ouml;ffnet sie die Tabelle <b>Bewerber <\/b>und &auml;ndert den Vornamen des Bewerbers <b>Meier <\/b>von <b>Brigitte <\/b>in <b>Klaus<\/b>. Bei dem Bewerbungsgespr&auml;ch w&auml;re sie nur zu gerne dabei.<\/p>\n<p>Um ihre Spuren zu verwischen, &ouml;ffnet Sie die Abfrage <b>Anmeldedaten <\/b>im Entwurfsmodus und erg&auml;nzt die Ausgabe mit der Spalte <b>DatenquellenID <\/b>der Tabelle <b>Benutzer<\/b>. Anschlie&szlig;end f&uuml;hrt sie die Abfrage aus und &auml;ndert die Datenquellen-ID von <b>2 <\/b>in <b>1<\/b>. Danach beendet Sie die Abfrage ohne ihre &Auml;nderungen zu speichern und startet sie per Doppelklick erneut. Das Ergebnis zeigt jetzt ihren Namen zusammen mit der Anmeldung <b>WaWiMa<\/b>. Der Urzustand w&auml;re somit wiederhergestellt. Zufrieden schlie&szlig;t sie die Access-Applikation und geht auf einen Plausch zu den Kollegen in die Personalabteilung. <\/p>\n<h2>Fazit und Bewertung<\/h2>\n<p>Dieses Mal haben Sie das Sicherheitsniveau der Access-Applikation gleich um drei Stufen erh&ouml;ht. Mit Stufe 1 vermeiden Sie die ODBC-Datenquelle <b>WaWi_SQL <\/b>auf den Rechnern der Anwender. Das verhindert unerlaubte Datenzugriffe mit nicht gew&uuml;nschten Applikationen. Durch Stufe 2 wird das Kennwort nicht mehr in den Eigenschaften der eingebundenen Tabellen und Pass Through-Abfragen gespeichert. Stufe 3 sorgt zudem daf&uuml;r, dass das Kennwort f&uuml;r den Datenzugriff verschl&uuml;sselt in einer versteckten Tabelle liegt. <\/p>\n<p>Alle Informationen f&uuml;r den Datenzugriff sind nun in der Access-Applikation gespeichert. Abh&auml;ngig vom angemeldeten Anwender werden beim ersten Datenzugriff die Anmeldedaten sowie die Bezeichnung des SQL Servers und der Name der Datenbank in einer Verbindungszeichenfolge zusammengestellt. Mit dieser erfolgt die Verbindung zum SQL Server und das anschlie&szlig;ende Einbinden der Tabellen. Die dabei erstellte Verbindung bleibt danach f&uuml;r alle weiteren Datenzugriffe bestehen. <\/p>\n<p>Trotz der erh&ouml;hten Sicherheit gibt es noch eine Schwachstelle. Die Access-Applikation selbst ist nicht ausreichend gesch&uuml;tzt. Frau Bienlein konnte recht einfach die Abfrage in der Entwurfsansicht &ouml;ffnen und sich so die notwendigen Informationen f&uuml;r die weitere Vorgehensweise verschaffen. Das Ausblenden des Navigationsbereichs alleine ist kein wirksamer Schutz. Vielmehr sollte die Access-Applikation mit weiteren Ma&szlig;nahmen abgesichert werden. Ob Sie nun eine ACCDE verwenden, die Access-Funktionstasten und die Umschalt-Taste unterbinden, es stehen Ihnen einige M&ouml;glichkeiten zur Verf&uuml;gung. Leider lassen sich diese allesamt umgehen, wie Sie bereits im ersten Teil dieser Beitragsreihe erfahren haben.<\/p>\n<p>Solange das Kennwort in der Access-Applikation gespeichert ist, l&auml;sst es sich dort mit etwas Ehrgeiz auch ermitteln. Dazu m&uuml;ssen Sie lediglich die ACCDB oder ACCDE in einem Texteditor &ouml;ffnen. Sie haben bereits gesehen, wie einfach sich dort entsprechende Hinweise finden lassen. In der ACCDB der Access-Applikation <b>WaWi v2 <\/b>liefern Ihnen die Suchbegriffe <b>Kennwort <\/b>und <b>K e n n w o r t <\/b>zum einen das Ergebnis <b>fKennwortLesen <\/b>und zum anderen im <b>UPDATE<\/b>-Befehl der Funktion <b>fKennwortErstellen <\/b>den Namen der Tabelle <b>Datenquellen<\/b>. Eine weitere Suche nach dem Begriff <b>D a t e n q u e l l e n <\/b>verr&auml;t Ihnen die Bezeichnung des SQL Servers und den der Datenbank sowie den Anmeldenamen und das verschl&uuml;sselte Kennwort. Es braucht nur ein wenig Fantasie und Kombinationsgabe, um letztendlich im VBA-Direktbereich mit der Funktion <b>fKennwortLesen <\/b>das Kennwort zu entschl&uuml;sseln. Das Lesen der ACCDB oder ACCDE in einem Texteditor k&ouml;nnen Sie recht einfach verhindern. Dazu sch&uuml;tzen Sie die Access-Applikation mit einem Datenbank-Kennwort. In einem Texteditor sehen Sie dann nur noch den verschl&uuml;sselten Inhalt. Suchvorg&auml;nge nach bestimmten Begriffen sind hier erfolglos. Leider hat auch diese Variante eine Schwachstelle. Um mit der Access-Applikation arbeiten zu k&ouml;nnen, muss der Anwender das Datenbank-Kennwort eingeben. Es ist eine Frage der Sensibilisierung der Mitarbeiter, wie sicher diese mit dem Datenbank-Kennwort umgehen. F&auml;llt es in die falschen H&auml;nde, l&auml;sst sich das Kennwort zur SQL Server-Anmeldung mit ein wenig krimineller Energie innerhalb der Access-Applikation ermitteln. Das hierzu keine speziellen technischen Kenntnisse erforderlich sind, haben Sie ebenfalls im ersten Teil dieser Beitragsreihe erfahren.<\/p>\n<p>Alles in allem ist der Schutz des Kennworts zur SQL Server-Anmeldung mit einem hohen Aufwand verbunden &#8211; und dennoch ist es nicht ausreichend gesch&uuml;tzt. Dabei k&ouml;nnten Sie sich eigentlich den ganzen Aufwand sparen und einfach auf das Kennwort verzichten.<\/p>\n<p>Der SQL Server bietet hierzu die Windows-Authentifizierung. Die Vorteile dieser Authentifizierungsmethode lernen Sie im n&auml;chsten Teil dieser Beitragsreihe kennen.<\/p>\n<h2>Installationsanleitung der Beispielumgebung<\/h2>\n<p>SQL Server &#8211; Wechsel in den Gemischten Modus:<\/p>\n<ul>\n<li>Starten Sie das SQL Server Management Studio.<\/li>\n<li>Melden Sie sich mit einer Anmeldung mit administrativen Rechten an.<\/li>\n<li>Klicken Sie mit der rechten Maustaste auf den ersten Eintrag im Objekt-Explorer.<\/li>\n<li>W&auml;hlen Sie den Men&uuml;punkt <b>Eigenschaften<\/b> und wechseln Sie im Dialog zur Seite <b>Sicherheit<\/b>.<\/li>\n<li>Aktivieren Sie die Option <b>SQL Server- und Windows-Authentifizierung<\/b>.<\/li>\n<\/ul>\n<p>Sollte diese Option bereits aktiviert sein, k&ouml;nnen Sie die &Auml;nderung hier abbrechen. Die folgenden Schritte m&uuml;ssen Sie dann nicht ausf&uuml;hren.<\/p>\n<ul>\n<li>Speichern Sie die &Auml;nderung mit <b>OK<\/b>.<\/li>\n<li>Klicken Sie mit der rechten Maustaste auf den ersten Eintrag im Objekt-Explorer.<\/li>\n<li>W&auml;hlen Sie den Eintrag <b>Neu starten <\/b>und best&auml;tigen Sie die folgenden Meldungen.<\/li>\n<\/ul>\n<p>Installation der Beispieldatenbank <b>WaWi_SQL<\/b><\/p>\n<ul>\n<li>Starten Sie das SQL Server Management Studio.<\/li>\n<li>&Ouml;ffnen Sie &uuml;ber <b>Datei|&Ouml;ffnen|Datei <\/b>das Skript <b>WaWi_SQL.sql<\/b>.<\/li>\n<li>Klicken Sie in der Symbolleiste auf die Schaltfl&auml;che <b>Ausf&uuml;hren<\/b>.<\/li>\n<li>Das Anlegen der Datenbank ist abgeschlossen, wenn Sie im unteren Bereich die Ausgabe <b>Fertig! <\/b>sehen.<\/li>\n<\/ul>\n<p>ODBC-Datenquelle <b>WaWi_SQL<\/b><\/p>\n<ul>\n<li>&Ouml;ffnen Sie den ODBC-Datenquelleneditor 32-bit oder 64-bit je nach verwendeter Access-Version.<\/li>\n<li>Wechseln Sie zur Registerkarte <b>System-DSN <\/b>und klicken Sie auf <b>Hinzuf&uuml;gen<\/b>.<\/li>\n<li>W&auml;hlen Sie den Treiber <b>ODBC Driver 17 for SQL Server <\/b>aus.<\/li>\n<\/ul>\n<p>Wenn Sie den Treiber in der Auswahl nicht sehen, m&uuml;ssen Sie diesen zun&auml;chst installieren. Sie finden den Treiber im Microsoft Downloadbereich unter dem Suchbegriff <b>ODBC Driver 17 for SQL Server<\/b>.<\/p>\n<ul>\n<li>Geben Sie im Eingabefeld <b>Name <\/b>die Bezeichnung <b>WaWi_SQL <\/b>ein.<\/li>\n<li>W&auml;hlen Sie in der Auswahlliste <b>Server <\/b>Ihren SQL Server aus oder tragen Sie den Namen direkt ein. Den Namen Ihres SQL Servers sehen Sie als ersten Eintrag im Objekt-Explorer im SQL Server Management Studio. Alternativ &ouml;ffnen Sie im SQL Server Management Studio mit einem Klick auf die Schaltfl&auml;che <b>Neue Abfrage <\/b>eine neue Registerkarte und geben dort den Befehl <b>SELECT @@Servername <\/b>ein. Nach einem Klick auf <b>Ausf&uuml;hren <\/b>sehen Sie als Ergebnis den Namen Ihres SQL Servers.<\/li>\n<li>Klicken Sie im ODBC-Datenquelleneditor auf <b>Weiter<\/b>.<\/li>\n<li>Aktivieren Sie die dritte Option mit der Bezeichnung <b>Mit SQL Server-Authentifizierung <\/b>anhand der vom Benutzer eingegebenen Anmelde-ID und des Kennworts.<\/li>\n<li>Geben Sie <b>WaWiPersonal <\/b>im Eingabefeld <b>Anmelde-ID <\/b>und das Kennwort <b>SicherIn2020! <\/b>im Feld <b>Kennwort <\/b>ein.<\/li>\n<li>Klicken Sie auf <b>Weiter<\/b>.<\/li>\n<p>[50045]<\/p>\n<li>Aktivieren Sie die Option <b>Die Standarddatenbank &auml;ndern auf <\/b>und w&auml;hlen Sie die Datenbank <b>WaWi_SQL <\/b>aus. Sollten Sie eine Fehlermeldung erhalten, haben Sie sich vielleicht beim Kennwort vertippt. Mit einem Klick auf <b>Zur&uuml;ck <\/b>k&ouml;nnen Sie die Eingabe wiederholen.<\/li>\n<p>[50069]<\/p>\n<li>Klicken Sie <b>Weiter <\/b>und anschlie&szlig;end auf <b>Fertig stellen<\/b>.<\/li>\n<p>[50325]<\/p>\n<li>Beenden Sie die Konfiguration mit einem Klick auf <b>OK<\/b>.<\/li>\n<p>[50381]<\/ul>\n<p>Beispielapplikation <b>WaWi<\/b><\/p>\n<p>[50435]<\/p>\n<ul>\n<li>Starten Sie die Access-Beispielapplikation <b>WaWi<\/b>.<\/li>\n<p>[50460]<\/p>\n<li>&Ouml;ffnen Sie &uuml;ber <b>Externe Daten|Neue Datenquelle|Aus Datenbank|Aus SQL Server <\/b>den Dialog <b>Externe Daten &#8211; ODBC-Datenbank<\/b>.<\/li>\n<p>[50509]<\/p>\n<li>Aktivieren Sie die zweite Option und klicken Sie auf <b>OK<\/b>.<\/li>\n<p>[50628]<\/p>\n<li>Wechseln Sie im Dialog <b>Datenquelle ausw&auml;hlen <\/b>zur Registerkarte <b>Computerdatenquelle<\/b>.<\/li>\n<p>[50685]<\/p>\n<li>W&auml;hlen Sie die ODBC-Datenquelle <b>WaWi_SQL <\/b>aus.<\/li>\n<p>[50769]<\/p>\n<li>Geben Sie das Kennwort <b>SicherIn2020! <\/b>zur Anmeldung <b>WaWiPersonal <\/b>ein und klicken Sie auf <b>OK<\/b>.<\/li>\n<p>[50815]<\/p>\n<li>Markieren Sie alle Tabellen mit dem Pr&auml;fix <b>dbo<\/b>.<\/li>\n<p>[50907]<\/p>\n<li>Aktivieren Sie die Option <b>Kennwort speichern <\/b>und klicken Sie auf <b>OK<\/b>.<\/li>\n<p>[50955]<\/p>\n<li>Best&auml;tigen Sie jede der folgenden Meldungen mit <b>Kennwort speichern<\/b>.<\/li>\n<p>[51024]<\/p>\n<li>&Ouml;ffnen Sie mit der Tastenkombination <b>Strg + G <\/b>den Direktbereich im VBA-Editor.<\/li>\n<p>[51092]<\/p>\n<li>F&uuml;hren Sie im Direktbereich zuerst die Funktion <b>fTabellenUmbenennen <\/b>und dann <b>fPassThroughVerbindungen <\/b>aus. Diese Funktionen passen die Access-Objekte an Ihre Umgebung an.<\/li>\n<p>[51171]<\/p>\n<li>F&uuml;hren Sie im Direktbereich die Anweisung <b>fTabelleAlsSystemObjekt &#8222;Datenquellen&#8220;, False <\/b>aus.<\/li>\n<p>[51342]<\/p>\n<li>Wechseln Sie zu Access und erweitern Sie den Navigationsbereich.<\/li>\n<p>[51435]<\/p>\n<li>&Ouml;ffnen Sie die lokale Tabelle <b>Datenquellen<\/b>.<\/li>\n<p>[51500]<\/p>\n<li>Tragen Sie in der Spalte <b>Server <\/b>den Namen Ihres SQL Servers ein, in <b>Benutzer <\/b>den Anmeldenamen <b>WaWiPersonal <\/b>und in <b>Kennwort <\/b>das Kennwort <b>SicherIn2020! <\/b>ein.<\/li>\n<p>[51544]<\/p>\n<li>Schlie&szlig;en Sie die Tabelle <b>Datenquellen <\/b>und wechseln Sie per <b>Strg + G <\/b>zum Direktbereich.<\/li>\n<p>[51699]<\/p>\n<li>F&uuml;hren Sie im Direktbereich die Anweisung <b>fTabelleAlsSystemObjekt &#8222;Datenquellen&#8220;, True <\/b>aus.<\/li>\n<p>[51787]<\/p>\n<li>Testen Sie den Datenzugriff mit den Schaltfl&auml;chen des Formulars <b>Start<\/b>.<\/li>\n<p>[51879]<\/p>\n<h2>Downloads zu diesem Beitrag<\/h2>\n<p>Enthaltene Beispieldateien:<\/p>\n<p>WaWi v2.accdb<\/p>\n<p>WaWi.accdb<\/p>\n<p>WaWi_SQL.sql<\/p>\n<p><a href=\"..\/fileadmin\/beispiele\/7291F37C-D06E-46BF-8BC5-B30E26DC713F\/aiu_1315.zip\">Download<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Die Verbindung von Access zum SQL Server erfolgt in der Regel &uuml;ber ODBC. Hierzu wird vorab eine ODBC-Datenquelle erstellt und unter einem Data Source Name &#8211; kurz DSN &#8211; gespeichert. F&uuml;r den Datenzugriff liefert die ODBC-Datenquelle die Bezeichnung des SQL Servers und den Namen der Datenbank. Der Anmeldename und das Kennwort hingegen kommen direkt aus der Access-Applikation. Dabei sind die in Access gespeicherten Anmeldedaten ein nicht zu untersch&auml;tzendes Sicherheitsrisiko. Dieser Beitrag beschreibt die Risiken und zeigt Ihnen Mittel und Wege, wie Sie diese vermeiden 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":[662021,66042021,44000022],"tags":[],"class_list":["post-55001315","post","type-post","status-publish","format-standard","hentry","category-662021","category-66042021","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>SQL Server-Security, Teil 6: ODBC-Datenquellen und gespeicherte Kennw&ouml;rter - Access im Unternehmen<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/access-im-unternehmen.de\/SQL_ServerSecurity_Teil_6_ODBCDatenquellen_und_gespeicherte_Kennwoerter\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"SQL Server-Security, Teil 6: ODBC-Datenquellen und gespeicherte Kennw&ouml;rter\" \/>\n<meta property=\"og:description\" content=\"Die Verbindung von Access zum SQL Server erfolgt in der Regel &uuml;ber ODBC. Hierzu wird vorab eine ODBC-Datenquelle erstellt und unter einem Data Source Name - kurz DSN - gespeichert. F&uuml;r den Datenzugriff liefert die ODBC-Datenquelle die Bezeichnung des SQL Servers und den Namen der Datenbank. Der Anmeldename und das Kennwort hingegen kommen direkt aus der Access-Applikation. Dabei sind die in Access gespeicherten Anmeldedaten ein nicht zu untersch&auml;tzendes Sicherheitsrisiko. Dieser Beitrag beschreibt die Risiken und zeigt Ihnen Mittel und Wege, wie Sie diese vermeiden k&ouml;nnen.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-im-unternehmen.de\/SQL_ServerSecurity_Teil_6_ODBCDatenquellen_und_gespeicherte_Kennwoerter\/\" \/>\n<meta property=\"og:site_name\" content=\"Access im Unternehmen\" \/>\n<meta property=\"article:published_time\" content=\"2021-07-31T10:13:36+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/vg07.met.vgwort.de\/na\/c2abfdce275040c599fbaa7f95a47665\" \/>\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=\"41\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/SQL_ServerSecurity_Teil_6_ODBCDatenquellen_und_gespeicherte_Kennwoerter\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/SQL_ServerSecurity_Teil_6_ODBCDatenquellen_und_gespeicherte_Kennwoerter\\\/\"},\"author\":{\"name\":\"Andr\u00e9 Minhorst\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\"},\"headline\":\"SQL Server-Security, Teil 6: ODBC-Datenquellen und gespeicherte Kennw&ouml;rter\",\"datePublished\":\"2021-07-31T10:13:36+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/SQL_ServerSecurity_Teil_6_ODBCDatenquellen_und_gespeicherte_Kennwoerter\\\/\"},\"wordCount\":7975,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/SQL_ServerSecurity_Teil_6_ODBCDatenquellen_und_gespeicherte_Kennwoerter\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg07.met.vgwort.de\\\/na\\\/c2abfdce275040c599fbaa7f95a47665\",\"articleSection\":[\"2021\",\"4\\\/2021\",\"SQL Server und Co.\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/SQL_ServerSecurity_Teil_6_ODBCDatenquellen_und_gespeicherte_Kennwoerter\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/SQL_ServerSecurity_Teil_6_ODBCDatenquellen_und_gespeicherte_Kennwoerter\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/SQL_ServerSecurity_Teil_6_ODBCDatenquellen_und_gespeicherte_Kennwoerter\\\/\",\"name\":\"SQL Server-Security, Teil 6: ODBC-Datenquellen und gespeicherte Kennw&ouml;rter - Access im Unternehmen\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/SQL_ServerSecurity_Teil_6_ODBCDatenquellen_und_gespeicherte_Kennwoerter\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/SQL_ServerSecurity_Teil_6_ODBCDatenquellen_und_gespeicherte_Kennwoerter\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg07.met.vgwort.de\\\/na\\\/c2abfdce275040c599fbaa7f95a47665\",\"datePublished\":\"2021-07-31T10:13:36+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/SQL_ServerSecurity_Teil_6_ODBCDatenquellen_und_gespeicherte_Kennwoerter\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/SQL_ServerSecurity_Teil_6_ODBCDatenquellen_und_gespeicherte_Kennwoerter\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/SQL_ServerSecurity_Teil_6_ODBCDatenquellen_und_gespeicherte_Kennwoerter\\\/#primaryimage\",\"url\":\"http:\\\/\\\/vg07.met.vgwort.de\\\/na\\\/c2abfdce275040c599fbaa7f95a47665\",\"contentUrl\":\"http:\\\/\\\/vg07.met.vgwort.de\\\/na\\\/c2abfdce275040c599fbaa7f95a47665\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/SQL_ServerSecurity_Teil_6_ODBCDatenquellen_und_gespeicherte_Kennwoerter\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"SQL Server-Security, Teil 6: ODBC-Datenquellen und gespeicherte Kennw&ouml;rter\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\",\"name\":\"Access im Unternehmen\",\"description\":\"Das Magazin f\u00fcr Datenbankentwickler auf Basis von Microsoft Access\",\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/access-im-unternehmen.de\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"de\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\",\"name\":\"Andr\u00e9 Minhorst Verlag\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/wp-content\\\/uploads\\\/2019\\\/09\\\/aiu_wp.png\",\"contentUrl\":\"https:\\\/\\\/access-im-unternehmen.de\\\/wp-content\\\/uploads\\\/2019\\\/09\\\/aiu_wp.png\",\"width\":370,\"height\":111,\"caption\":\"Andr\u00e9 Minhorst Verlag\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\",\"name\":\"Andr\u00e9 Minhorst\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"caption\":\"Andr\u00e9 Minhorst\"}}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"SQL Server-Security, Teil 6: ODBC-Datenquellen und gespeicherte Kennw&ouml;rter - Access im Unternehmen","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/access-im-unternehmen.de\/SQL_ServerSecurity_Teil_6_ODBCDatenquellen_und_gespeicherte_Kennwoerter\/","og_locale":"de_DE","og_type":"article","og_title":"SQL Server-Security, Teil 6: ODBC-Datenquellen und gespeicherte Kennw&ouml;rter","og_description":"Die Verbindung von Access zum SQL Server erfolgt in der Regel &uuml;ber ODBC. Hierzu wird vorab eine ODBC-Datenquelle erstellt und unter einem Data Source Name - kurz DSN - gespeichert. F&uuml;r den Datenzugriff liefert die ODBC-Datenquelle die Bezeichnung des SQL Servers und den Namen der Datenbank. Der Anmeldename und das Kennwort hingegen kommen direkt aus der Access-Applikation. Dabei sind die in Access gespeicherten Anmeldedaten ein nicht zu untersch&auml;tzendes Sicherheitsrisiko. Dieser Beitrag beschreibt die Risiken und zeigt Ihnen Mittel und Wege, wie Sie diese vermeiden k&ouml;nnen.","og_url":"https:\/\/access-im-unternehmen.de\/SQL_ServerSecurity_Teil_6_ODBCDatenquellen_und_gespeicherte_Kennwoerter\/","og_site_name":"Access im Unternehmen","article_published_time":"2021-07-31T10:13:36+00:00","og_image":[{"url":"http:\/\/vg07.met.vgwort.de\/na\/c2abfdce275040c599fbaa7f95a47665","type":"","width":"","height":""}],"author":"Andr\u00e9 Minhorst","twitter_card":"summary_large_image","twitter_misc":{"Verfasst von":"Andr\u00e9 Minhorst","Gesch\u00e4tzte Lesezeit":"41\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/access-im-unternehmen.de\/SQL_ServerSecurity_Teil_6_ODBCDatenquellen_und_gespeicherte_Kennwoerter\/#article","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/SQL_ServerSecurity_Teil_6_ODBCDatenquellen_und_gespeicherte_Kennwoerter\/"},"author":{"name":"Andr\u00e9 Minhorst","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f"},"headline":"SQL Server-Security, Teil 6: ODBC-Datenquellen und gespeicherte Kennw&ouml;rter","datePublished":"2021-07-31T10:13:36+00:00","mainEntityOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/SQL_ServerSecurity_Teil_6_ODBCDatenquellen_und_gespeicherte_Kennwoerter\/"},"wordCount":7975,"commentCount":0,"publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/SQL_ServerSecurity_Teil_6_ODBCDatenquellen_und_gespeicherte_Kennwoerter\/#primaryimage"},"thumbnailUrl":"http:\/\/vg07.met.vgwort.de\/na\/c2abfdce275040c599fbaa7f95a47665","articleSection":["2021","4\/2021","SQL Server und Co."],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/access-im-unternehmen.de\/SQL_ServerSecurity_Teil_6_ODBCDatenquellen_und_gespeicherte_Kennwoerter\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/access-im-unternehmen.de\/SQL_ServerSecurity_Teil_6_ODBCDatenquellen_und_gespeicherte_Kennwoerter\/","url":"https:\/\/access-im-unternehmen.de\/SQL_ServerSecurity_Teil_6_ODBCDatenquellen_und_gespeicherte_Kennwoerter\/","name":"SQL Server-Security, Teil 6: ODBC-Datenquellen und gespeicherte Kennw&ouml;rter - Access im Unternehmen","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/SQL_ServerSecurity_Teil_6_ODBCDatenquellen_und_gespeicherte_Kennwoerter\/#primaryimage"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/SQL_ServerSecurity_Teil_6_ODBCDatenquellen_und_gespeicherte_Kennwoerter\/#primaryimage"},"thumbnailUrl":"http:\/\/vg07.met.vgwort.de\/na\/c2abfdce275040c599fbaa7f95a47665","datePublished":"2021-07-31T10:13:36+00:00","breadcrumb":{"@id":"https:\/\/access-im-unternehmen.de\/SQL_ServerSecurity_Teil_6_ODBCDatenquellen_und_gespeicherte_Kennwoerter\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/access-im-unternehmen.de\/SQL_ServerSecurity_Teil_6_ODBCDatenquellen_und_gespeicherte_Kennwoerter\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/SQL_ServerSecurity_Teil_6_ODBCDatenquellen_und_gespeicherte_Kennwoerter\/#primaryimage","url":"http:\/\/vg07.met.vgwort.de\/na\/c2abfdce275040c599fbaa7f95a47665","contentUrl":"http:\/\/vg07.met.vgwort.de\/na\/c2abfdce275040c599fbaa7f95a47665"},{"@type":"BreadcrumbList","@id":"https:\/\/access-im-unternehmen.de\/SQL_ServerSecurity_Teil_6_ODBCDatenquellen_und_gespeicherte_Kennwoerter\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/access-im-unternehmen.de\/"},{"@type":"ListItem","position":2,"name":"SQL Server-Security, Teil 6: ODBC-Datenquellen und gespeicherte Kennw&ouml;rter"}]},{"@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\/55001315","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=55001315"}],"version-history":[{"count":0,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55001315\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/media?parent=55001315"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/categories?post=55001315"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/tags?post=55001315"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}