Verwendung von Anwendungsrollen mit Access-Projekten und SQL Server 2000 Desktop Edition

Erweiterte: Erfordert professionelle Codierung, Interoperabilität und Mehrbenutzer wissen.

Dieser Artikel gilt nur für Microsoft Access-Projekt (ADP).


Eine Microsoft Access 2000-Version dieses Artikels finden Sie unter
318816 .

Zusammenfassung

Dieser Artikel beschreibt die Funktionen, die Grenzen und Abhilfemaßnahmen für Microsoft SQL Server-Anwendungsrollen in einem Microsoft Access-Projekt (ADP) verwenden.

Weitere Informationen

Erstellen Sie in SQL Server-Datenbankrollen für einfachere Verwaltung von Berechtigungen in einer Datenbank. Anstatt einzelne Berechtigungen für jeden Benutzer einzeln, können Benutzer mit denselben Berechtigungen gruppieren, dass sie Mitglieder der gleichen regulären Datenbankrolle und Zuweisen von Berechtigungen zur Datenbankrolle selbst. Wenn eine bestimmte Berechtigung an anderer Stelle explizit verweigert wird, erhalten Benutzer Berechtigungen für diese Datenbankrolle.

Reguläre Datenbankrollen Situationen sehr hilfreich sind Benutzer ihre eigenen ad-hoc-Abfragen oder eine Datenbank aktualisiert werden soll, sind sie nicht immer geeignet. Manchmal können Benutzer sollen nur bestimmte Berechtigungen haben, wenn sie eine bestimmte Anwendung verwenden und können Daten außerhalb der Anwendung anzeigen oder ändern möchten.

Eine Methode zum Umgehen dieser häufig ist nur eine SQL Server-Benutzerkonto die erforderlichen Berechtigungen erteilen. Die tatsächlichen Benutzern möglicherweise Berechtigungen mit einer Datenbank verbinden, aber nicht für alle Daten anzeigen oder ändern. Nachdem eine Verbindung zur Datenbank mit einzelnen Benutzerkonto konnte die ADP programmgesteuert schließen Sie mithilfe der Anmeldeinformationen des Benutzerkontos, das berechtigt ist. Während dies wirksam sein kann, können nicht Sie Benutzer in der Datenbank zu oder bestimmen, welche Benutzer eine bestimmte Aktion ausgeführt.

Anwendungsrollen dienen, diese Einschränkung zu umgehen. Anwendungsrollen, im Gegensatz zu regulären Datenbankrollen haben keine Mitglieder. Stattdessen Benutzer SQL Server anmelden und eine Datenbank mit ihren eigenen Anmeldeinformationen an. Nun kann der Sicherheitskontext der Anwendungsrolle programmgesteuert auf eine Verbindung angewendet werden mit Sp_setapprole gespeicherten Prozedur. In SQL Server Benutzer unterscheiden sich noch hingegen Berechtigungen in einer bestimmten Verbindung auf die Berechtigungen der Anwendungsrolle. Individuelle Benutzerberechtigungen, ob weniger oder höher nicht mehr gelten.

Erstellen eine Anwendungsrolle

Microsoft Access-Projekte müssen keine visuellen Entwurfstools für SQL Server-Objekte wie Anwendungsrollen erstellen. Microsoft empfiehlt die Verwendung der Clienttools die reguläre Version von SQL Server oder Microsoft Office XP Developer enthaltenen für die Anwendungsrolle erstellen und Berechtigungen zuweisen. Sie können jedoch weiterhin die Anwendungsrolle erstellen und gewähren sie die erforderlichen Berechtigungen programmgesteuert mithilfe von Transact-SQL (T-SQL) aus einer ADP. Obwohl eine vollständige Erörterung der SQL Server-Sicherheit ist außerhalb des Bereichs dieses Artikels Weitere Informationen finden Sie im SQL Server-Onlinedokumentation anzeigen folgendermaßen das programmgesteuerte Erstellen einer Anwendungsrolle und Berechtigungen der neuen Rolle Wählen Sie eine Tabelle an:
  1. Starten Sie Access.
  2. Öffnen Sie die Nordwind-Beispiel.
  3. Klicken Sie im Datenbankfenster unter Objekteauf Module , und klicken Sie dann auf neu , um ein neues Modul in der Visual Basic-Umgebung öffnen.

    Hinweis Klicken Sie in Access 2007 in der Gruppe auf der Registerkarte Erstellen Modul .
  4. Geben Sie oder fügen Sie den folgenden Code in das neue Modul:
    Public Function AddNewAppRole(RoleName As String, PW As String) As BooleanOn Error GoTo EH:
    If CurrentProject.IsConnected Then
    Dim sTSQL As String
    'Create the command
    sTSQL = "EXEC sp_addapprole '" & RoleName & "','" & PW & "'"
    'Send the command
    Application.CurrentProject.Connection.Execute sTSQL
    AddNewAppRole = True
    Else
    AddNewAppRole = False
    End If
    Exit Function
    EH:
    MsgBox Err.Number & ": " & Err.Description, vbCritical
    AddNewAppRole = False
    End Function

  5. Speichern Sie das Modul und beenden Sie Visual Basic-Umgebung.
  6. Erstellen Sie eine Kopie der Tabelle Customers , und speichern Sie sie als tNewTable. Gehen Sie hierzu folgendermaßen vor:
    1. Klicken Sie im Datenbankfenster mit der rechten Maustaste in der Tabelle Customers und klicken im Kontextmenü auf .

      Hinweis Klicken Sie in Access 2007 auf die Tabelle Customers im Navigationsbereich, klicken Sie auf Microsoft Office darauf Speichernund klicken Sie dann auf Objekt speichern.
    2. Geben Sie im Dialogfeld Speichern unter tNewTable in der Tabelle "Kunden" zu speichern, und klicken Sie auf OK.
  7. Klicken Sie im Datenbankfenster unter Objekteauf Formulare klicken Sie auf neu, und klicken Sie auf OK , um ein neues Formular in der Entwurfsansicht geöffnet.

    Hinweis Klicken Sie in Access 2007 in der Gruppe Formulare auf der Registerkarte Erstellen auf Formularentwurf .
  8. Fügen Sie eine Befehlsschaltfläche auf das Formular.
  9. Legen Sie die OnClick -Eigenschaft der neuen Befehlsschaltfläche auf die folgende Ereignisprozedur:
    On Error GoTo EH:'Code only works if ADP is connected.
    If CurrentProject.IsConnected Then
    Dim bNewAppRole As Boolean, strTSQL As String
    Dim strRoleName As String, strPW As String
    strRoleName = "AppRoleName"
    strPW = "Password"
    'Call function to create app role.
    bNewAppRole = AddNewAppRole(strRoleName, strPW)
    'Test to see if it failed.
    If bNewAppRole = False Then
    Exit Sub
    End If
    MsgBox "New Application role '" & strRoleName & "' created", vbInformation
    'Create command to grant permissions.
    strTSQL = "Grant Select on tNewTable to " & strRoleName
    'Send the command.
    Application.CurrentProject.Connection.Execute strTSQL
    MsgBox "Select permissions granted on tNewTable for " & strRoleName
    Else
    MsgBox "ADP must be connected to SQL Server"
    End If
    Exit Sub
    EH:
    MsgBox Err.Number & ": " & Err.Description, vbCritical

  10. Schließen Sie den Visual Basic-Umgebung zum Formular zurückzukehren.
  11. Speichern Sie das Formular, und öffnen Sie das Formular in der Formularansicht.
  12. Klicken Sie auf die Befehlsschaltfläche, um den zugrunde liegenden Code auszuführen.

    Beachten Sie, dass zwei Meldungsfelder Erfolg angezeigt. Sie erhalten eine Anwendungsrolle erstellt und nach dem tNewTable die neuen Rollenberechtigungen erteilt.

Implementieren der Anwendungsrolle

Das Hauptproblem bei Verwendung von Anwendungsrollen in Access-Projekten ist, dass Access drei Verbindungen zu SQL Server verwendet, um verschiedene Aufgaben. Ideal, um eine Anwendungsrolle für das gesamte Projekt übernehmen, müssten Sie dabei alle drei Anschlüsse Sp_setapprole ausführen. Jede Verbindung behandelt Objekte sind wie folgt:

  1. Die Objekte im Datenbankfenster angezeigt und sonstige Datenbankverwaltungsaufgaben verwendet.

    Zum Öffnen von Tabellen, Ansichten, gespeicherte Prozeduren, Funktionen und die Datenquellen für Formulare und Unterberichte (aber nicht für den Hauptbericht selbst).

    Zum Abrufen von Quellen für Kombinationsfelder, Listenfelder und Berichte.
  2. Zum Öffnen von Tabellen, Ansichten, gespeicherte Prozeduren, Funktionen und die Datenquellen für Formulare und Unterberichte (aber nicht für den Hauptbericht selbst).

    Zum Abrufen von Quellen für Kombinationsfelder, Listenfelder und Berichte.
  3. Zum Abrufen von Quellen für Kombinationsfelder, Listenfelder und Berichte.

Obwohl Verbindungen #2 und #3 problemlos zugegriffen werden können, ist keine Methode zur Ausführung der gespeicherten Prozedur im Kontext der Verbindung #1. Glücklicherweise Verbindung der drei wichtigsten und leicht durch Erstellen der Benutzeroberfläche (z. B. ein Formular Übersichts-Typ) für die Behandlung von Datenbankobjekten anstatt auf integrierte Datenbankfenster umgangen.

Die folgenden Schritte verwenden Access-Beispielprojekt Nordwind veranschaulichen eine Anwendungsrolle für Verbindungen #2 und #3 anwenden:

  1. Klicken Sie im Datenbankfenster unter Objekteauf Formulare klicken Sie auf neu, und klicken Sie auf OK , um ein neues Formular in der Entwurfsansicht geöffnet.

    Hinweis Klicken Sie in Access 2007 in der Gruppe Formulare auf der Registerkarte Erstellen auf Formularentwurf .
  2. Das neu erstellte Formular ein Listenfeld hinzu, und legen Sie die Name -Eigenschaft des Listenfelds auf Lst_AppRole.
  3. Fügen Sie eine Befehlsschaltfläche zum Formular hinzu.
  4. Legen Sie die OnClick -Eigenschaft der neuen Befehlsschaltfläche auf die folgende Ereignisprozedur:
    On Error GoTo EH    'This avoids a message that no records were returned.
    DoCmd.SetWarnings False
    Dim TSQL
    TSQL = "EXEC sp_setapprole 'AppRoleName', {Encrypt N 'Password'}, 'odbc'"
    'This sets the app role on Connection #2.
    Application.CurrentProject.Connection.Execute TSQL
    'This sets the app role on Connection #3.
    lst_approle.RowSource = TSQL
    lst_approle.Requery
    DoCmd.SetWarnings True
    MsgBox "The application Role is now in effect.", vbInformation
    Exit Sub
    EH:
    MsgBox Err.Number & ": " & Err.Description, vbCritical

  5. Schließen Sie den Visual Basic-Umgebung zum Formular zurückzukehren.
  6. Speichern Sie das Formular, und öffnen Sie das Formular in derFormularansicht.
  7. Klicken Sie auf die Befehlsschaltfläche, um den zugrunde liegenden Code auszuführen.

    Beachten Sie, dass Sie eine Meldung angezeigt, die der Vorgang erfolgreich war.
  8. Klicken Sie im Datenbankfenster unter Objekteauf Tabellen , und öffnen Sie die tNewTable -Tabelle.

    Hinweis Doppelklicken Sie in Access 2007 auf tNewTable -Tabelle im Navigationsbereich.
  9. Ändern eines Datensatzes, und versuchen Sie es zu speichern.
Beachten Sie, dass Sie Ihre Änderungen versuchen, eine Fehlermeldung über nicht genügend Berechtigungen erhalten. Dies geschieht, da Sie neue Anwendungsrolle Aktivieren Berechtigung nicht in der Tabelle tNewTable gab
Update -Berechtigung.

Standardmäßig zeigt Access nur Objekte im Datenbankfenster, für die der Benutzer zumindest oder Execute-Berechtigungen. Access verwendet Verbindung #1 bestimmen, welche Objekte ein Benutzer Berechtigungen hat. Nach dem Anwenden der Anwendungsrolle Verbindungen #2 und #3, zeigt das Datenbankfenster noch dieselben Objekte, zuvor, obwohl der Benutzer möglicherweise keine Berechtigungen für die Objekte oder möglicherweise Berechtigungen für mehrere Objekte, die nicht angezeigt werden. Dies führt unerwartetes Verhalten bei Verwendung des Datenbankfensters.

Beispielsweise beim Öffnen der Tabelle tNewTable scheint"es", dass der Benutzer über Berechtigungen zum Bearbeiten und Einfügen von Datensätzen. Einfügen neuer Datensatz Symbol am unteren Rand der Tabelle aktiviert ist, und Benutzer können Sie einen Datensatz im Bearbeitungsmodus. Sie sehen keine visuellen Hinweis an andernfalls erst bei commit bearbeiten oder einfügen, wodurch eine Fehlermeldung. Zugriff glaubt, dass Berechtigungen verfügen, wenn dies tatsächlich nicht der Fall.

Die effektivste Lösung ist eine benutzerdefinierte Schnittstelle für den Benutzer und nicht im Datenbankfenster abhängig. Übersicht-Benutzeroberfläche verwenden, können Sie genau die Objekte Steuern der Benutzer Zugriff hat.

Andere Einschränkungen und Sicherheit

Subforms funktioniert nicht

Anders als bei anderen Datenbankobjekten verwendet Access immer dieselbe Verbindung keine Datenquelle eines Unterformulars abrufen. Access erstellt häufig (aber nicht immer) eine neue Verbindung mit SQL Server nur das Unterformular Recordset behandeln und verknüpfen Felddaten abzurufen, die das Unterformular mit dem Hauptformular verbindet. Da diese Verbindung nicht die Anwendungsrolle angewendet haben, möglicherweise haben Sie keine explizite Berechtigungen für das Datenbankobjekt ein Berechtigungsfehler generiert. Leider bedeutet dies, dass es keine zuverlässige Möglichkeit können gebundene Unterformulare Anwendungsrollen angewendet werden. Die einzige wirksame Lösung ist vollständig Unterformulare mit programmgesteuert behandelt Datenmanipulation aufgehoben haben. Die schwerwiegendsten Einschränkung ist bei Verwendung von Anwendungsrollen in Access

Berichte funktionieren nicht

Wenn Sie ein Objekt wie eine Tabelle oder ein Ansichtsname als Datenquelle für einen Bericht oder Unterbericht aufgeführt, überprüft Access, ob das Objekt im Datenbankfenster aufgelistet ist, bevor Daten aus SQL Server abgerufen. Da im Datenbankfenster eine Verbindung, die nicht die Anwendungsrolle angewendet haben verwendet, wird ein Fehler generiert, besitzen Sie keine explizite Berechtigungen auf der zugrunde liegenden Datenquelle.

Um dieses Problem zu umgehen, verwenden Sie immer Transact-SQL-Anweisung als Datensatzquelle für Formulare und Berichte. Z. B. "Wählen Sie * aus ViewName" statt "ViewName" oder "Exec StoredProcedureName" statt nur "StoredProcedureName". Auf diese Weise Zugriff Transact-SQL-Anweisungen an SQL Server übergeben und die Berechtigungen der Anwendungsrolle Daten abgerufen.

Der Public-Datenbankrolle

Eine Anwendungsrolle übernimmt die Berechtigungen der Public-Datenbankrolle. Die Public-Rolle hat in NordwindCS standardmäßig Vollzugriff auf die meisten Objekte. Daher ist eine Anwendungsrolle in der Regel ineffizient. Beim Erstellen der tNewTable-Tabelle im Abschnitt "Erstellen einer Anwendungsrolle" Public-Rolle erhielt keine Berechtigung für die Tabelle und die Effekte der Anwendung Rolle Sicherheitskontext später sah, in der Tabelle. Anderen Tabellen können zeigen jedoch keine Unterschiede unter der Anwendungsrolle da die Public-Rolle Berechtigungen für die Objekte verfügt.

VBA-Sicherheit

Da das Kennwort für die Anwendungsrolle in die Anwendung eingebettet ist, aus dem sie aufgerufen wird, wäre ein Benutzer den Anwendungsrollennamen und das Kennwort aus dem Quellcode lesen und verwenden Sie diese Informationen aus einer anderen Anwendung auf SQL Server zugreifen. Daher ist es sinnvoll, die ADP in eine ADE-Datei kompilieren, damit der Quellcode nicht sichtbar ist. Erzwingen Sie mindestens ein Kennwort für das VBA-Projekt.

Referenzen

Weitere Informationen zu einer Microsoft Access 2000-Version dieses Artikels finden Sie der Microsoft Knowledge Base:
318816 ACC2000: wie Sie Anwendungsrollen mit Access und SQL Server 2000 Desktop Engine (MSDE 2000)
Weitere Informationen zu gewähren finden Sie in der SQL Server-Onlinedokumentation. SQL Server-Onlinedokumentation steht auf der folgenden Microsoft-Website:
http://www.microsoft.com/sql/techinfo/productdoc/2000/default.asp
Eigenschaften

Artikelnummer: 308312 – Letzte Überarbeitung: 20.01.2017 – Revision: 1

Feedback