Toepassings rollen gebruiken met Access-projecten en SQL Server 2000 Desktop Edition

Vertaalde artikelen Vertaalde artikelen
Artikel ID: 308312 - Bekijk de producten waarop dit artikel van toepassing is.
Geavanceerd: Vereist expert codering, interoperabiliteit en intervals kwalificaties.

Dit artikel geldt alleen voor Microsoft Access-project (. adp).

Voor een Microsoft Access 2000-versie van dit artikel Zie318816.
Alles uitklappen | Alles samenvouwen

Samenvatting

In dit artikel wordt uitgelegd de mogelijkheden, de beperkingen en de oplossingen voor het gebruik van Microsoft SQL Server-toepassing rollen in een Microsoft Access-project (ADP).

Meer informatie

In SQL Server, kunt u data base rollen voor eenvoudiger maken beheer van machtigingen voor een data base. In plaats van individuele verlening machtigingen voor elke gebruiker afzonderlijk, u kunt groeperen gebruikers met dezelfde machtiging moet doordat ze leden van dezelfde normale data base rol, en vervolgens toewijzen machtigingen aan de rol van de data base zelf. Tenzij een specifiek machtiging is elders expliciet geweigerd, krijgen gebruikers de machtigingen voor de data base rol.

Tijdens een normale data base rollen zijn zeer nuttig zijn in situaties waar u wilt dat gebruikers kunnen uitvoeren hun eigen ad hoc query's of updates van een data base zijn niet altijd nodig. Soms kunt u gebruikers alleen bepaalde machtigingen bij gebruik van een bepaalde toepassing en u niet wilt weer geven of gegevens buiten de toepassing wijzigen.

Een methode die vaak wordt gebruikt voor het werken rond dit is de noodzakelijke machtigingen alleen voor één SQL Server-gebruikersaccount. De werkelijke gebruikers mogelijk machtigingen verbinding maakt met een data base maar niet wilt weer geven of wijzigen van gegevens. Nadat een gebruiker verbinding met maakt de data base met behulp van de gebruiker afzonderlijke account, de ADP kan vervolgens softwarematig opnieuw verbinding maken met de referenties van de gebruikersaccount die wordt machtigingen hebben. Hoewel dit effectief zijn kan, niet mogelijk u onderscheid maken tussen gebruikers in de data base of om te bepalen welke gebruiker uitgevoerd een bepaalde actie.

Toepassings rollen zijn ontworpen om te omzeilen Deze beperking. Toepassings rollen, in tegenstelling tot normale data base rollen beschikt niet over leden zelf. In plaats daarvan gebruikers zich aanmelden met een SQL Server en verbinding maken met een data base met hun eigen referenties. Op dat moment de beveiligingscontext van een de functie van toepassings kan programmatisch worden toegepast op een bestaande verbinding met met behulp van desp_setapproleopgeslagen procedure. In SQL Server zijn individuele gebruikers nog steeds maar de machtigingen die beschikbaar binnen een bepaalde zijn gedifferentieerd verbinding is beperkt tot de machtigingen van de toepassings rol. De gebruiker afzonderlijke machtigingen, of kleiner of groter zijn, worden niet langer beschouwd.

De rol van een toepassing maken

Microsoft Accessprojecten hoeven niet alle visuele ontwerp gereedschappen voor het maken van SQL Server Security objecten, zoals toepassings rollen. Microsoft adviseert u de client hulp programma's die zijn opgenomen in de normale versie van SQL Server of Microsoft Office XP Developer voor het maken van de toepassings rollen en machtigingen toewijzen. U kunt echter nog steeds maken de toepassings rol en wordt de juiste machtiging via programmering door met behulp van Transact-SQL (T-SQL) in een ADP. Hoewel een volledige discussie van SQL Beveiliging van de server is buiten het bereik van dit artikel, aanvullende informatie kan worden gevonden inSQL Server Books OnlineDe volgende stappen laten zien hoe via programmering maken een toepassings rol en verleen de nieuwe rolSelecteermachtigingen voor een tabel:
  1. Start Access.
  2. Open het voorbeeldproject Noorden wind.
  3. Klik in het data base vensterModulesonderObjecten, en klik vervolgens opNieuweom een nieuwe module geopend in Visual Basic-omgeving.

    OpmerkingKlik in Access 2007Modulein deAnderegroep op deMakentabblad.
  4. Typ of plak de volgende code in de nieuwe module:
    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. Sla de module op en sluit de Visual Basic Omgeving.
  6. Maak een kopie van deKlantentabel en vervolgens opslaan alstNewTable. Hiertoe gaat u als volgt te werk:
    1. Klik in het data base venster op deKlantentabel en klik vervolgens opOpslaan alsin het snelmenu.

      OpmerkingIn Access 2007 klikt u op deKlantentabel in het navigatie deel venster, klikt u opMicrosoft Office-knop, wijsOpslaan als, en klik vervolgens opObject opslaan als.
    2. In deOpslaan alshet dialoog venster typetNewTablein deTabel Klanten opslaanvak en klik vervolgens opOK.
  7. Klik in het data base vensterFormulierenonderObjecten, klik opNieuwe, en klik vervolgens opOKom een nieuw formulier openen in de ontwerpweergave.

    OpmerkingKlik in Access 2007Formulier ontwerpin deFormulierengroep op deMakentabblad.
  8. Een opdracht knop toevoegen aan het nieuwe formulier.
  9. Stel deOnClickeigenschap van de nieuwe opdracht knop met de volgende gebeurtenis procedure:
    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. Sluit de Visual Basic-omgeving om terug te keren naar het met dit formulier.
  11. Sla het formulier op en schakel vervolgens het formulier deFormulier weergave.
  12. Klik op de opdracht knop de onderliggende code uit te voeren.

    Aankondiging dat er twee bericht vensters aan succes. U ontvangt een na de toepassings rol is gemaakt, en de tweede na de nieuwe rol tNewTable machtigingen zijn toegekend.

De toepassings rol implementeren

De belangrijkste complicatie wanneer u toepassings rollen in Access-projecten is dat toegang tot drie verbindingen met SQL Server gebruikt voor de verwerking verschillende taken. In het ideale geval, een toepassings rol toepassen op het hele project, u uitvoerensp_setapprolein de context van alle drie verbindingen. De objecten verwerkt door elke verbinding zijn als volgt:

  1. Gebruikt om te bepalen welke objecten worden weer gegeven in de data base venster en diverse data base beheerders taken uitvoeren.

    Gebruikt voor tabellen, weergaven, opgeslagen procedures, functies en voor de record bronnen openen formulieren en subreports (maar niet voor het hoofd rapport zelf).

    Gebruikt voor de record bronnen voor keuze lijsten, keuze lijsten en rapporten te verkrijgen.
  2. Gebruikt voor het openen van tabellen, weergaven, opgeslagen procedures, functies en de record bron voor formulieren en subrapporten (maar niet voor de hoofd rapport zelf).

    Voor het verkrijgen van de record bronnen voor keuze vakken, keuze lijsten en rapporten.
  3. Gebruikt voor het verkrijgen van de record bronnen voor keuze lijsten, lijst vensters en rapporten.

Hoewel verbindingen # 2 en # 3 vrij toegankelijk eenvoudig, er is geen methode beschikbaar voor het uitvoeren van de opgeslagen procedure in de context van # 1-verbinding. Gelukkig is deze verbinding het minst belangrijke van de drie en is rond gemakkelijk gewerkt door uw eigen gebruikers interface (bijvoorbeeld een formulier schakel bord type) voor het verwerken van data base objecten in plaats van te vertrouwen op de ingebouwde data base venster.

De volgende stappen het voorbeeldproject Noorden wind gebruikt om aan te tonen hoe een toepassings rol tegen verbindingen # 2 en # 3:

  1. Klik in het data base vensterFormulierenonderObjecten, klik opNieuwe, en klik vervolgens opOKom een nieuw formulier openen in de ontwerpweergave.

    OpmerkingKlik in Access 2007Formulier ontwerpin deFormulierengroep op deMakentabblad.
  2. Een keuze lijst toevoegen aan het nieuwe formulier en stel vervolgens deNaameigenschap van de keuze lijstlst_AppRole.
  3. Een opdracht knop aan het formulier toevoegen.
  4. Stel deOnClickeigenschap van de nieuwe opdracht knop met de volgende gebeurtenis procedure:
    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. Sluit de Visual Basic-omgeving om terug te keren naar het met dit formulier.
  6. Sla het formulier op en schakel vervolgens het formulier deFormulier weergave.
  7. Klik op de opdracht knop de onderliggende code uit te voeren.

    Aankondiging u ontvangt een berichtvenster waarin wordt gemeld dat.
  8. Klik in het data base vensterTabellenonderObjecten, en open vervolgens detNewTabletabel.

    OpmerkingDubbel klik in Access 2007tNewTablede tabel in het navigatie deel venster.
  9. Een record en probeer de wijzigingen op te slaan.
Let op als u probeert de wijzigingen wilt doorvoeren, u ontvangt een foutbericht over niet voldoende machtigingen hebben. Dit gebeurt omdat de door jou de nieuwe toepassings rolSelecteermachtiging voor detNewTabletabel, maar nietUpdatemachtiging.

Het ontwerp bevat toegang alleen objecten in de Data base venster waarop de gebruiker ten minste selecteren heeft of machtigingen voor uitvoeren. # 1-Verbinding wordt gebruikt om te bepalen welke objecten dat de machtigingen van een gebruiker voor. Na het toepassen van de toepassings rol # 2 en 3, de data base verbindingen venster nog steeds dat dezelfde objecten die, hoewel de gebruiker voorheen machtigingen voor de objecten niet langer mogelijk of mogelijk machtigingen meer objecten die niet worden weer gegeven. Dit kan resulteren in onverwacht gedrag wanneer u gebruikt het venster Data base.

Bijvoorbeeld bij het openen van de tNewTable tabel "blijkt" de gebruiker is gemachtigd voor het bewerken en records invoegen. Het pictogram nieuwe record invoegen onderaan in de tabel is ingeschakeld, en de gebruiker kan een record in de bewerkings modus geplaatst. U ziet geen visuele aanwijzing anders aangegeven totdat u probeert te bewerken of invoegen, doorvoeren wat resulteert in een foutbericht. Toegang is van mening dat u beschikt over machtigingen als u eigenlijk niet.

De meest effectieve oplossing is om een aangepaste interface voor de gebruiker en niet afhankelijk zijn van het data base venster. Met behulp van een schakel bord type gebruikersinterface, kunt u bepalen welke objecten precies de gebruiker heeft toegang.

Andere beperkingen en beveiligings overwegingen

Subforms werkt niet

In tegenstelling tot andere data base objecten toegang niet altijd dezelfde verbinding gebruiken voor het ophalen van de gegevensbron van een subformulier. Toegang vaak (maar niet altijd) maakt een nieuwe verbinding met SQL Server alleen op verwerken van het subformulier record set of het koppelings veld gegevens op te halen die verbindt het subformulier aan het hoofd formulier. Omdat deze nieuwe verbinding is niet de toepassings rol toegepast, een machtigings fout kan worden gegenereerd als u geen expliciete machtigingen voor het data base object. Helaas, dit betekent dat er geen betrouwbare manier gebonden subformulieren wanneer toepassing gebruiken rollen worden toegepast. Alleen effectieve oplossing is om volledig hebt losgekoppeld subformulieren met de gegevensmanipulatie via programmering worden verwerkt. Dit is de meest ernstige beperking bij het toepassings rollen gebruiken in Access.

Rapporten werken niet

Wanneer u een object zoals een tabel of een weergaven aam hebt Als de record bron voor een rapport of subrapport wordt weer gegeven, gecontroleerd of het object wordt weer gegeven in het data base venster voordat het ophalen van gegevens in SQL Server. Omdat het data base venster een verbinding die niet wordt gebruikt de toepassings rol is toegepast, wordt een fout gegenereerd als er geen expliciete machtigingen voor de onderliggende gegevensbron.

Omzeilen Dit probleem altijd gebruik Transact-SQL-instructies als record bron voor formulieren en rapporten. Gebruik bijvoorbeeld "Selecteer * uit viewnaam" in plaats van alleen "Viewnaam" of "Exec StoredProcedureName' in plaats van gewoon"StoredProcedureName." Op deze manier toegang geeft de Transact-SQL-instructies rechtstreeks naar SQL Server en de op basis van de machtigingen van de functie van toepassings gegevens worden opgehaald.

De rol van de openbare data base

Een toepassings rol verwerft de machtigingen van de De rol van de openbare data base. NorthwindCS in heeft openbare rol standaard volledige machtigingen voor de meeste objecten. Een toepassings rol is daarom in het algemeen Ineffectieve. Tijdens het maken van de tabel tNewTable in de "maken een Toepassings rol"sectie, de publieke rol is geen machtiging om de tabel en u later gezien de gevolgen van de beveiligingscontext van de toepassings rol in die tabel. Andere tabellen mogen evenwel niet vertonen geen verschil onder de toepassings rol omdat de publieke rol machtigingen die bevat objecten.

VBA-beveiliging

Omdat het wacht woord voor de toepassings rol ingesloten in de toepassing waaruit wordt genoemd, een goed geïnformeerde gebruiker zou kunnen lezen van het toepassings rollen naam en het wacht woord van de bron code en die informatie gebruiken om toegang te krijgen tot SQL Server uit een andere toepassing. Daarom is het een goed idee om de ADP compileren naar een ade-bestand zodat de broncode niet zichtbaar is. Ten minste dwingen een wacht woord op de VBA-project.

Referenties

Voor meer informatie over een Microsoft Access 2000-versie van dit artikel, klikt u op het artikelnummer hieronder naar het artikel in de Microsoft Knowledge Base:
318816Access 2000: Het toepassings rollen gebruiken met Access-projecten en SQL Server 2000 Desktop Engine (MSDE 2000)
Zie voor meer informatie over de verlening, deSQL Server Books Online. HetSQL Server Books Onlineis beschikbaar op de volgende Microsoft-website:
http://www.Microsoft.com/sql/techinfo/productdoc/2000/default.ASP

Eigenschappen

Artikel ID: 308312 - Laatste beoordeling: zaterdag 17 september 2011 - Wijziging: 3.0
De informatie in dit artikel is van toepassing op:
  • Microsoft Office Access 2007
  • Microsoft Office Access 2003
  • Microsoft Access 2002 Standard Edition
Trefwoorden: 
kbexpertiseinter kbinfo kbprogramming kbadp kbvba kbhowto kbmt KB308312 KbMtnl
Automatisch vertaald artikel
BELANGRIJK: Dit artikel is vertaald door de vertaalmachine software van Microsoft in plaats van door een professionele vertaler. Microsoft biedt u professioneel vertaalde artikelen en artikelen vertaald door de vertaalmachine, zodat u toegang heeft tot al onze knowledge base artikelen in uw eigen taal. Artikelen vertaald door de vertaalmachine zijn niet altijd perfect vertaald. Deze artikelen kunnen fouten bevatten in de vocabulaire, zinsopbouw en grammatica en kunnen lijken op hoe een anderstalige de taal spreekt en schrijft. Microsoft is niet verantwoordelijk voor onnauwkeurigheden, fouten en schade ontstaan door een incorrecte vertaling van de content of het gebruik ervan door onze klanten. Microsoft past continue de kwaliteit van de vertaalmachine software aan door deze te updaten.
De Engelstalige versie van dit artikel is de volgende:308312

Geef ons feedback

 

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