Verwendung von Anwendung Rollen mit Access-Projekte und SQL Server 2000 Desktop Edition

SPRACHE AUSWÄHLEN SPRACHE AUSWÄHLEN
Artikel-ID: 308312 - Produkte anzeigen, auf die sich dieser Artikel bezieht
Erweiterte: Erfordert Experten Codierung und Interoperabilität sowie Mehrbenutzerfähigkeiten.

Die Informationen in diesem Artikel beziehen sich ausschließlich auf Microsoft Access-Projekte (.adp).

Eine Microsoft Access 2000-Version dieses Artikels finden Sie unter 318816.
Alles erweitern | Alles schließen

Zusammenfassung

Dieser Artikel erläutert die Funktionen, die Einschränkungen und Problemumgehungen für die Verwendung von Microsoft SQL Server-Rollen in einer Microsoft Access-Projekt (ADP).

Weitere Informationen

In SQL Server können Sie Datenbankrollen für die einfachere Verwaltung von Berechtigungen in einer Datenbank erstellen. Anstelle von gewähren einzelne Berechtigungen für jeden Benutzer separat, können Sie Benutzer mit der gleichen Berechtigung Anforderungen gruppieren, indem Sie die diese Mitglieder der gleichen reguläre Datenbank-Rolle auswählen und dann Berechtigungen an die Datenbankrolle selbst zuweisen. Wenn eine bestimmte Berechtigung explizit an anderer Stelle verweigert wird, werden Mitglieder die Berechtigungen die Datenbankrolle erteilt erwerben.

Während reguläre Datenbankrollen sehr nützlich für Situationen, in denen Benutzer kann Ihre eigenen ad-hoc-Abfragen oder Aktualisierungen zu einer Datenbank ausgeführt werden sollen, sind Sie nicht immer geeignet. In einigen Fällen sollten Sie die Benutzer nur bestimmte Berechtigungen haben, wenn Sie eine bestimmte Anwendung verwenden, und Sie möchten möglicherweise anzeigen oder Ändern von Daten außerhalb der Anwendung.

Eine Methode, die häufig für die Arbeit dieses verwendet wird ist nur die erforderlichen Berechtigungen eine SQL Server-Benutzerkonto erteilen. Die tatsächlichen Benutzern möglicherweise Berechtigungen eine Verbindung zu einer Datenbank herstellen, aber nicht zum Anzeigen oder Ändern von alle Daten. Nachdem ein Benutzer eine Verbindung mit der Datenbank mithilfe des einzelnen Benutzerkontos hergestellt hat, konnte der ADP programmgesteuert wieder mit den Anmeldeinformationen des Benutzerkontos für die Berechtigungen verfügt. Während dieser effektiver sein kann, lässt es nicht Sie Benutzer in der Datenbank unterscheiden oder bestimmen, welche Benutzer einen bestimmten Aktion durchgeführt.

Anwendungsrollen dienen dazu, diese Einschränkung umgehen. Anwendungsrollen, im Gegensatz zu regulären Datenbankrollen, verfügen nicht über Member selbst. Stattdessen werden Benutzer an einen SQL Server anmelden und Verbinden mit einer Datenbank mit Ihren eigenen Anmeldeinformationen. An diesem Punkt kann der Sicherheitskontext des eine Anwendungsrolle programmgesteuert zu einer vorhandenen Verbindung angewendet werden mithilfe der Prozedur Sp_setapprole gespeichert. In SQL Server einzelne Benutzer noch unterscheiden sich jedoch Berechtigungen, die innerhalb einer bestimmten Verbindung verfügbar sind auf Berechtigungen der Anwendungsrolle beschränkt. Des einzelnen Benutzers Berechtigungen, ob weniger oder höher nicht mehr gelten.

Erstellen eine Anwendungsrolle

Microsoft Access Projekten müssen keine visuellen Entwurfstools zum Erstellen von SQL Server-Objekten wie z. B. Anwendungsrollen. Microsoft empfiehlt, dass die Clienttools zu, die in die reguläre Version von SQL Server oder Microsoft Office XP Developer enthalten sind verwenden, für das Erstellen der Anwendungsrolle und Berechtigungen zugewiesen. Sie können jedoch weiterhin die Anwendungsrolle erstellen und gewähren Sie die notwendigen Berechtigungen programmgesteuert mithilfe von Transact-SQL (T-SQL) aus einer ADP. Obwohl eine vollständige Erörterung der SQL Server-außerhalb des in diesem Artikel, zusätzliche Informationen in der Onlinedokumentation zu SQL Server gefunden werden kann zeigen, die folgenden Schritte wie Sie programmgesteuert eine Anwendungsrolle erstellen und erteilen Sie der neuen Rolle Berechtigungen für eine Tabelle auswählen :
  1. Starten Sie Access.
  2. Öffnen Sie das Access-Beispielprojekt Northwind.
  3. Klicken Sie im Datenbankfenster klicken Sie unter Objekte auf Module , und klicken Sie auf neu , um ein neues Klassenmodul in der Visual Basic-Umgebung zu öffnen.

    Hinweis: Klicken Sie in Access 2007 in der Gruppe andere auf der Registerkarte Erstellen auf Modul .
  4. Geben oder fügen den folgenden Code in das neue Modul:
    Public Function AddNewAppRole(RoleName As String, PW As String) As Boolean
    On 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 der Visual Basic-Umgebung.
  6. Erstellen Sie eine Kopie der Tabelle Customers , und dann als tNewTable speichern. Gehen Sie hierzu folgendermaßen vor:
    1. Klicken Sie im Datenbankfenster klicken Sie mit der rechten Maustaste auf die Tabelle Customers , und im Kontextmenü auf Speichern unter klicken.

      Hinweis: Klicken Sie in Access 2007 auf die Tabelle Customers in den Navigationsbereich, klicken Sie auf Microsoft Office-Schaltfläche , zeigen Sie auf Speichern unter und klicken Sie dann auf Objekt speichern unter .
    2. Geben Sie im Dialogfeld Speichern unter tNewTable im Feld Tabelle 'Kunden' zu speichern , und klicken Sie dann auf OK .
  7. Klicken Sie im Datenbankfenster klicken Sie unter Objekte auf Formulare , klicken Sie auf neu und klicken Sie auf OK , um ein neues Formular in der Entwurfsansicht zu öffnen.

    Hinweis: Klicken Sie in Access 2007 in der Gruppe Formulare auf der Registerkarte Erstellen auf Formularentwurf .
  8. Fügen Sie eine Befehlsschaltfläche hinzu das neue 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 die Visual Basic-Umgebung zum Formular zurückzukehren.
  11. Speichern Sie das Formular, und wechseln Sie dann das Formular in der Formularansicht .
  12. Klicken Sie auf die Befehlsschaltfläche, um den zugrunde liegenden Code auszuführen.

    Beachten Sie, dass Sie zwei Meldungsfelder an Erfolg erhalten. Eine erhalten Sie, nachdem die Anwendungsrolle erstellt und im zweiten Beispiel nach der neuen Rolle Berechtigungen, tNewTable werden erteilt.

Implementieren der Anwendungsrolle

Die wichtigsten Komplikation Wenn Sie Anwendungsrollen in Access-Projekten verwenden ist, dass Access drei Verbindungen zu SQL Server, verwendet um verschiedene Aufgaben behandeln. Um eine Anwendungsrolle für das gesamte Projekt zu übernehmen, müssten Sie idealerweise Sp_setapprole im Kontext aller drei Verbindungen ausführen. Die Objekte behandelt, indem jede Verbindung sind wie folgt:

  1. Zum Bestimmen, welche Objekte in der Datenbank angezeigt werden Fenster und für verschiedene Datenbank-Verwaltungsaufgaben.

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

    Zum Abrufen von die Datenherkünfte für Kombinationsfelder, Listenfelder und Berichten verwendet.
  2. Zum Öffnen von Tabellen, Sichten, gespeicherte Prozeduren, Funktionen und die Datenquellen für Formulare und Unterberichte (jedoch nicht für den Hauptbericht selbst) verwendet.

    Zum Abrufen von die Datenherkünfte für Kombinationsfelder, Listenfelder und Berichten verwendet.
  3. Zum Abrufen von die Datenherkünfte für Kombinationsfelder, Listenfelder und Berichten verwendet.

Zwar Verbindungen # 2 und 3 ziemlich problemlos zugegriffen werden können, ist keine Methode zur Ausführung der gespeicherten Prozedur im Kontext der Verbindung # 1. Glücklicherweise wird diese Verbindung ist am wenigsten wichtig in der drei und leicht durch Erstellen eine eigene Benutzeroberfläche (z. B. ein Formular Übersicht-Typ) für die Behandlung Datenbankobjekte der Standardvorrang im Datenbankfenster integrierte umgangen.

Die folgenden Schritte verwenden die Nordwind-Beispieldatenbank, um wenden Sie eine Anwendungsrolle für Verbindungen # 2 und 3 veranschaulichen:

  1. Klicken Sie im Datenbankfenster klicken Sie unter Objekte auf Formulare , klicken Sie auf neu und klicken Sie auf OK , um ein neues Formular in der Entwurfsansicht zu öffnen.

    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 dann die Name -Eigenschaft des Listenfelds auf Lst_AppRole .
  3. Fügen Sie diesem Formular eine Befehlsschaltfläche 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 die Visual Basic-Umgebung zum Formular zurückzukehren.
  6. Speichern Sie das Formular, und wechseln Sie dann das Formular in der Formularansicht .
  7. Klicken Sie auf die Befehlsschaltfläche, um den zugrunde liegenden Code auszuführen.

    Beachten Sie, dass ein Meldungsfeld angezeigt wird, erfolgreich.
  8. Klicken Sie im Datenbankfenster klicken Sie unter Objekte auf 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, die Änderungen zu speichern.
Beachten Sie, dass während Sie versuchen, Ihre Änderungen, die Sie eine Fehlermeldung zum nicht genügend Berechtigungen erhalten. Dies geschieht, weil Sie aber nicht gegeben neue Anwendungsrolle Select -Berechtigung in der Tabelle tNewTable haben Update Berechtigung.

Standardmäßig zeigt Access nur Objekte im Datenbankfenster für die der Benutzer hat mindestens auswählen oder Ausführen von Berechtigungen. In Access werden # 1-Verbindung verwendet, um welche Objekte ob ein Benutzer Berechtigungen für verfügt. Nach dem Anwenden der Anwendung zeigt Rolle Verbindungen # 2 und 3, die Datenbank-Fenster immer noch die gleichen Objekte, denen, zuvor, obwohl der Benutzer möglicherweise nicht mehr verfügen über Berechtigungen für alle Objekte, oder möglicherweise Berechtigungen weitere Objekte, die nicht angezeigt werden. Dies kann zu unerwartetem Verhalten führen, wenn Sie im Datenbankfenster verwenden.

Beispielsweise beim Öffnen der Tabelle tNewTable "angezeigt es", dass der Benutzer verfügt Berechtigungen zum Bearbeiten und Einfügen von Datensätzen. Das neue einfügen Datensatz Symbol am unteren Rand der Tabelle aktiviert und der Benutzer kann einen Datensatz in Bearbeitungsmodus zu versetzen. Sie sehen keine sichtbaren Hinweis darauf an andernfalls bis Sie versuchen, einen commit der bearbeiten oder einfügen, wodurch ein Fehlermeldung. Zugriff glaubt, dass Sie Berechtigungen haben, wenn Sie eigentlich nicht.

Die effektivste Problemumgehung besteht darin, eine benutzerdefinierte Schnittstelle für den Benutzer bereitzustellen, und nicht im Datenbankfenster abhängig. Mithilfe einer Übersicht-Typ-Benutzeroberfläche können Sie genau die Objekte steuern, die der Benutzer Zugriff hat.

Andere Einschränkungen und Überlegungen zur Sicherheit

Unterformulare funktioniert nicht

Im Gegensatz zu ist mit anderen Datenbankobjekten Access nicht immer dieselbe Verbindung verwenden, um die Datenquelle eines Unterformulars abrufen. Access erstellt häufig (aber nicht immer) eine neue Verbindung zu SQL Server nur auf das Unterformular Recordset behandeln oder die Verknüpfung Felddaten abzurufen, die das Unterformular mit dem Hauptformular verbindet. Da diese neue Verbindung nicht die Anwendung die Funktion verfügt, kann ein Berechtigungen-Fehler generiert werden, wenn Sie keine explizite Berechtigungen zum Datenbankobjekt haben. Leider bedeutet dies, dass es keine zuverlässige Möglichkeit, gebundenen Unterformulare zu verwenden, wenn Anwendungsrollen angewendet werden. Darin, dass nur effektive Problemumgehung vollständig Unterformulare, mit der Datenbearbeitung programmgesteuert behandelt ungebunden sein. Dies ist die schwerwiegendsten Einschränkung bei Verwendung von Anwendungsrollen in Access.

Berichte funktionieren nicht

Wenn Sie ein Objekt z. B. 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 alle Daten aus SQL Server abgerufen. Da im Datenbankfenster eine Verbindung, die keine die Anwendungsrolle angewendet verwendet, wird ein Fehler generiert, wenn Sie keine explizite Berechtigungen auf der zugrunde liegenden Datenquelle haben.

Um dieses Problem zu umgehen, verwenden Sie Transact-SQL-Anweisungen immer als Datensatzquelle für Formulare und Berichte. Z. B. verwenden Sie "Select * von ViewName", anstatt nur "ViewName" oder "Exec StoredProcedureName" anstelle von lediglich "StoredProcedureName". Auf diese Weise Access übergibt die Transact-SQL-Anweisungen direkt an SQL Server und ruft die Daten basierend auf der Berechtigungen der Anwendungsrolle.

die Öffentliche Datenbank-Rolle

Eine Anwendungsrolle erhält die Berechtigungen der public-Datenbankrolle. In NordwindCS erstellt hat standardmäßig die public-Rolle vollständige Berechtigungen zu den meisten Objekten. Daher ist eine Anwendungsrolle im Allgemeinen unwirksam. Wenn Sie die tNewTable-Tabelle im Abschnitt "Erstellen einer Anwendungsrolle" erstellt, der public-Rolle wurde nicht gewährt die Berechtigung für die Tabelle und die Auswirkungen der Anwendung Rolle Sicherheitskontext später in der Tabelle wurde. Andere Tabellen können Differenzen unter der Anwendungsrolle können nicht angezeigt, da der public-Rolle Berechtigungen auf diese Objekte.

VBA-Sicherheit

Da das Kennwort für die Anwendungsrolle in der Anwendung eingebettet ist, von dem aus Sie aufgerufen wird, würde ein erfahrenen Benutzer sein, Lesen von Anwendung Rollenname und Kennwort aus dem Quellcode und dann anhand dieser Informationen aus einer anderen Anwendung auf SQL Server zugreifen können. Daher ist es ratsam, die ADP in eine ADE-Datei kompilieren, damit der Quellcode nicht sichtbar ist. Erzwingen Sie zumindest ein Kennwort für das VBA-Projekt.

Informationsquellen

Weitere Informationen zu einer Microsoft Access 2000-Version dieses Artikels finden Sie die Artikel der Microsoft Knowledge Base:
318816: Acc2000 Verwendung von Anwendungsrollen mit Access-Projekte und SQL Server 2000 Desktop Engine (MSDE 2000)
Weitere Informationen über die GRANT finden Sie unter SQL Server-Onlinedokumentation . SQL Server-Onlinedokumentation steht unter der folgenden Microsoft Website:
http://www.Microsoft.com/sql/techinfo/productdoc/2000/default.ASP

Eigenschaften

Artikel-ID: 308312 - Geändert am: Donnerstag, 29. März 2007 - Version: 6.2
Die Informationen in diesem Artikel beziehen sich auf:
  • Microsoft Office Access 2007
  • Microsoft Office Access 2003
  • Microsoft Access 2002 Standard Edition
Keywords: 
kbmt kbexpertiseinter kbinfo kbprogramming kbadp kbvba kbhowto KB308312 KbMtde
Maschinell übersetzter Artikel
Wichtig: Dieser Artikel wurde maschinell und nicht von einem Menschen übersetzt. Die Microsoft Knowledge Base ist sehr umfangreich und ihre Inhalte werden ständig ergänzt beziehungsweise überarbeitet. Um Ihnen dennoch alle Inhalte auf Deutsch anbieten zu können, werden viele Artikel nicht von Menschen, sondern von Übersetzungsprogrammen übersetzt, die kontinuierlich optimiert werden. Doch noch sind maschinell übersetzte Texte in der Regel nicht perfekt, insbesondere hinsichtlich Grammatik und des Einsatzes von Fremdwörtern sowie Fachbegriffen. Microsoft übernimmt keine Gewähr für die sprachliche Qualität oder die technische Richtigkeit der Übersetzungen und ist nicht für Probleme haftbar, die direkt oder indirekt durch Übersetzungsfehler oder die Verwendung der übersetzten Inhalte durch Kunden entstehen könnten.
Den englischen Originalartikel können Sie über folgenden Link abrufen: 308312
Microsoft stellt Ihnen die in der Knowledge Base angebotenen Artikel und Informationen als Service-Leistung zur Verfügung. Microsoft übernimmt keinerlei Gewährleistung dafür, dass die angebotenen Artikel und Informationen auch in Ihrer Einsatzumgebung die erwünschten Ergebnisse erzielen. Die Entscheidung darüber, ob und in welcher Form Sie die angebotenen Artikel und Informationen nutzen, liegt daher allein bei Ihnen. Mit Ausnahme der gesetzlichen Haftung für Vorsatz ist jede Haftung von Microsoft im Zusammenhang mit Ihrer Nutzung dieser Artikel oder Informationen ausgeschlossen.

Ihr Feedback an uns

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com