Je bent nu offline; er wordt gewacht tot er weer een internetverbinding is

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

De ondersteuning voor Office 2003 is beëindigd

De ondersteuning voor Office 2003 is door Microsoft beëindigd op 8 april. Deze wijziging heeft gevolgen voor software-updates en beveiligingsopties. Meer informatie over wat voor gevolgen dit voor u heeft en hoe u beveiligd blijft.

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
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.
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 BooleanOn Error GoTo EH:If CurrentProject.IsConnected ThenDim sTSQL As String    'Create the commandsTSQL = "EXEC sp_addapprole '" & RoleName & "','" & PW & "'"    'Send the commandApplication.CurrentProject.Connection.Execute sTSQLAddNewAppRole = TrueElseAddNewAppRole = FalseEnd IfExit FunctionEH:MsgBox Err.Number & ": " & Err.Description, vbCriticalAddNewAppRole = FalseEnd 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 " & strRoleNameElseMsgBox "ADP must be connected to SQL Server"End IfExit SubEH: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 FalseDim TSQLTSQL = "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 = TSQLlst_approle.RequeryDoCmd.SetWarnings TrueMsgBox "The application Role is now in effect.", vbInformationExit SubEH: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.
Access 2002 reviewdocidACC2003 ACC2007
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

Waarschuwing: dit artikel is automatisch vertaald

Eigenschappen

Artikel-id: 308312 - Laatst bijgewerkt: 09/17/2011 20:48:00 - Revisie: 3.0

Microsoft Office Access 2007, Microsoft Office Access 2003, Microsoft Access 2002 Standard Edition

  • kbexpertiseinter kbinfo kbprogramming kbadp kbvba kbhowto kbmt KB308312 KbMtnl
Feedback