Použití rolí aplikace s projekty aplikace Access a SQL Server 2000 Desktop Edition

Překlady článku Překlady článku
ID článku: 308312 - Produkty, které se vztahují k tomuto článku.
Upřesnit: Vyžaduje odborných kódování interoperability a víceuživatelské dovedností.

Tento článek se vztahuje pouze na projektu aplikace Microsoft Access (ADP).

Aplikace Microsoft Access 2000 verzi tohoto článku v tématu 318816.
Rozbalit všechny záložky | Minimalizovat všechny záložky

Souhrn

Tento článek vysvětluje možnosti, omezeních a zástupná pomocí aplikace Microsoft SQL Server role v projektu aplikace Microsoft Access (ADP).

Další informace

Na serveru SQL Server můžete vytvořit databázové role pro snadnější správu oprávnění v databázi. Namísto samostatně udělení jednotlivých oprávnění každého uživatele, můžete seskupit tak, že je členové stejnou roli na standardní databázi a oprávnění přiřadit role databáze sám uživatelům se stejné oprávnění potřebami. Není-li zvláštní oprávnění je výslovně odepřen jinde, bude členské uživatele získat oprávnění přidělených k této roli databáze.

Pravidelné databázové role jsou velmi užitečné v situacích, kde chcete, aby uživatelé budou moci provést vlastní dotazy ad hoc nebo aktualizace do databáze, nejsou vždy vhodná. V některých případech můžete uživatelům pouze určitá oprávnění li používají určité aplikace, a není budete moci zobrazit nebo upravit data mimo aplikaci.

Jeden metodu, která se často používá pro pracovní kolem tohoto je poskytnout pouze potřebná oprávnění k jednomu uživatelskému účtu serveru SQL Server. Aktuální uživatelé pravděpodobně mají oprávnění k připojení k databázi, ale není k zobrazení nebo upravovat libovolná data. Znovu po připojení uživatele k databázi pomocí jednotlivých uživatelského účtu, ADP mohl programově připojit pomocí pověření uživatelského účtu, který nemá oprávnění. Mohou být účinné, neumožňuje rozlišovat mezi uživatele v databázi nebo zjistit, který uživatel provést určitou akci.

Role aplikace jsou navrženy tak, aby možné obejít toto omezení. Role aplikace, na rozdíl od pravidelné databázové role členy samy o sobě nemají. Místo toho uživatelé přihlášení k serveru SQL a připojení k databázi pomocí vlastní pověření. V daném okamžiku role aplikačního kontextu zabezpečení lze použít programově existující připojení pomocí sp_setapprole uložené procedury. V serveru SQL Server jednotlivých uživatelů jsou rozlišeny stále ale oprávnění, která jsou k dispozici v rámci konkrétní připojení, které jsou omezeny na oprávnění role aplikací. Jednotlivé uživatele oprávnění, zda nižší nebo vyšší, jsou nadále považována za.

Vytváření roli aplikace

Aplikace Microsoft Access projektů nemají žádné vizuální návrhové nástroje pro vytváření objektů zabezpečení serveru SQL, jako je například role aplikace. Společnost Microsoft doporučuje, používat klienta nástroje, které jsou součástí pravidelné verze serveru SQL Server nebo Microsoft Office XP Developer pro vytváření role aplikačního a jeho přiřazení oprávnění. Můžete však stále vytvořit role aplikačního a udělte ji nezbytné oprávnění programově pomocí jazyka Transact-SQL (T-SQL) z ADP. Sice plně diskusi o zabezpečení serveru SQL mimo oblast působnosti tohoto článku, Další informace najdete v Dokumentaci SQL Server Books Online následující kroky ukázat vám, jak programově vytvářet role aplikačního a udělovat nové role Vybrat oprávnění pro tabulku:
  1. Spusťte aplikaci Access.
  2. Otevřete projekt Access Northwind vzorku.
  3. V okně Databáze klepněte moduly v oblasti objekty a potom na příkaz Nový otevřete nový modul v prostředí aplikace Visual Basic.

    Poznámka: V aplikaci Access 2007 klepněte na tlačítko modulu ve skupině jiné na kartě vytvořit.
  4. Zadejte nebo vložte následující kód do nového modulu:
    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. Uložte modul a poté ukončete program Visual Basic Environment).
  6. Vytvoření kopie tabulky Zákazníci a uložte ji jako tNewTable. Chcete-li to provést, postupujte takto:
    1. V okně Databáze klepněte pravým tlačítkem myši na tabulku Zákazníci a potom v místní nabídce klepněte na příkaz Uložit jako.

      Poznámka: V aplikaci Access 2007 klepněte na tabulku Zákazníci v navigačním podokně, klepněte na Tlačítko Microsoft Office, přejděte na příkaz Uložit jako a potom klepněte na příkaz Uložit objekt jako.
    2. V dialogovém okně Uložit jako zadejte tNewTable v tabulce "Zákazníci" do seznamu a potom klepněte na tlačítko OK.
  7. V okně Databáze klepněte na objektyformuláře, klepněte na příkaz Nový a klepnutím na tlačítko OK otevřete nový formulář v návrhovém zobrazení.

    Poznámka: V aplikaci Access 2007 klepněte na tlačítko Návrh formuláře ve skupině formuláře na kartě vytvořit.
  8. Přidání příkazového tlačítka do nového formuláře.
  9. Vlastnost Při klepnutí příkazového tlačítka Nový na následující proceduru události:
    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. Ukončete prostředí jazyka Visual Basic, chcete-li se vrátit k formuláři.
  11. Uložte formulář a pak přepnete do formuláře do formulářového zobrazení.
  12. Klepněte na příkazové tlačítko spustit základní kód.

    Všimněte si, že obdržíte dvě pole zprávu označující úspěch. Zobrazí se jedna po role aplikace je vytvořena, a druhý po nové role oprávnění k tNewTable jsou udělena.

Implementaci role aplikací

Hlavní complication při použití aplikace roli v projektech aplikace Access je, že aplikace Access používá tři připojení k serveru SQL Server k zpracovávat různé úkoly. V ideálním případě použít role aplikačního celého projektu, je třeba spustit v kontextu všech tří připojení sp_setapprole. Objekty, zpracována všechna připojení jsou následující:

  1. Použita pro stanovení, které objekty se zobrazují v databázi okno a pro různé databáze úkoly správy.

    Použít pro otevření tabulky, zobrazení, uložené procedury, funkce a zdroje záznamů pro formuláře a podsestav (ale ne pro hlavní sestavě samotného).

    Použít pro získání zdrojů záznamů u polí se seznamem, seznamy a sestavy.
  2. Použít pro otevření tabulky, zobrazení, uložené procedury, funkce a zdroje záznamů pro formuláře a podsestav (ale ne pro hlavní sestavě samotného).

    Použít pro získání zdrojů záznamů u polí se seznamem, seznamy a sestavy.
  3. Použít pro získání zdrojů záznamů u polí se seznamem, seznamy a sestavy.

Přestože připojení # 2 a # 3 lze poměrně snadno získat přístup, je k dispozici žádná metoda pro spuštění uložené procedury v rámci připojení # 1. Naštěstí je nejméně důležité tři toto připojení a je snadno odpracovaných kolem sestavením vlastní uživatelské rozhraní (například formulář přepínacího panelu typu) pro manipulaci s objekty databáze namísto vestavěné okno databáze.

V následujících krocích se používá k prokázání toho, jak aplikovat role aplikačního proti připojení # 2 a # 3 projekt Access Northwind vzorku:

  1. V okně Databáze klepněte na objektyformuláře, klepněte na příkaz Nový a klepnutím na tlačítko OK otevřete nový formulář v návrhovém zobrazení.

    Poznámka: V aplikaci Access 2007 klepněte na tlačítko Návrh formuláře ve skupině formuláře na kartě vytvořit.
  2. Přidejte pole se seznamem do nově vytvořené formuláře a poté nastavte vlastnost název seznamu na lst_AppRole.
  3. Přidání příkazového tlačítka do formuláře.
  4. Vlastnost Při klepnutí příkazového tlačítka Nový na následující proceduru události:
    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. Ukončete prostředí jazyka Visual Basic, chcete-li se vrátit k formuláři.
  6. Uložte formulář a pak přepnete do formuláře do formulářového zobrazení.
  7. Klepněte na příkazové tlačítko spustit základní kód.

    Všimněte si, které se zobrazí okno se zprávou, které označuje úspěch.
  8. V okně databáze v oblasti objekty klepněte na tlačítko tabulky a potom otevřete tabulku tNewTable.

    Poznámka: V aplikaci Access 2007 poklepejte na tNewTable tabulku v navigačním podokně.
  9. Změna záznamu a pokuste se uložit změny.
Všimněte si, že jako pokusíte potvrdit změny, chybová zpráva o nemají dostatečná oprávnění. K tomu dochází, protože jste se zasíláním nové role aplikace Vybrat oprávnění v tabulce tNewTable nikoli oprávnění Aktualizovat.

Záměrné zobrazí aplikace Access pouze objekty v okně databáze, pro které má alespoň vybrat uživatele nebo oprávnění spouštět. Aplikace Access je pomocí připojení # 1, objektů, které má uživatel oprávnění. Po použití aplikace roli oknu připojení # 2 a 3 #, databáze stále zobrazena stejné objekty, které stejně, přestože uživatel pravděpodobně již nemáte oprávnění ke všem objektům nebo mohou mít oprávnění k další objekty, které nejsou zobrazeny. To může mít za následek neočekávané chování při použití okna databáze.

Například při otevření tabulky tNewTable jej zobrazí "se", že uživatel nemá oprávnění pro úpravy a vložit záznamy. Vložit nový záznam ikonu dole v tabulce je povolena a uživatel je možné vložit záznam do režimu úprav. Nebudou zobrazeny žádné vizuální indikují jinak označíte, dokud se při pokusu o potvrzení, úpravy nebo vložení, výsledkem je chybová zpráva. Přístup domnívá, že máte oprávnění ve skutečnosti nejsou.

Nejúčinnější řešením je poskytnout vlastní rozhraní pro uživatele a nikoli na vycházet z okna databáze. Pomocí uživatelského rozhraní typu přepínací panel, můžete řídit přesně objektů, které má uživatel přístup.

Jiná omezení a důležité informace o zabezpečení

Podformuláře nefunguje

Na rozdíl od s dalšími objekty databáze aplikace Access vždy nepoužívá stejné připojení načíst zdroj dat pro podformulář. Přístup k často (ale ne vždy) vytvoří nové připojení k serveru SQL Server pouze zpracovat podformuláře záznamů nebo načtení propojovací pole dat spojující podformuláře v hlavním formuláři. Protože toto nové připojení nemá roli aplikace použita, mohou být generovány chybu oprávnění, pokud explicitní oprávnění k objektu databáze. Bohužel to znamená, že tam žádné spolehlivé způsobem použití vázaného podformuláře při použití aplikace roli. Je pouze účinné zástupné řešení mít zcela nevázané podformulářů, s manipulace s data zpracovat programově. To je nejvážnější omezení, pokud používáte aplikaci role v aplikaci Access.

Sestavy nefungují

Pokud máte nějaký objekt, například tabulky nebo název zobrazení v seznamu uveden jako zdroj záznamů sestavy nebo podsestavy, Access zkontroluje, zda objekt je uvedeno v okně databáze před načtením všech dat ze serveru SQL Server. Vzhledem k tomu, že v okně databáze používá připojení, které nemá roli aplikace použita, bude generován chybu, jestliže nemáte k dispozici explicitní oprávnění do podkladového zdroje dat.

Chcete-li tento problém vyřešit, pro vždy používejte příkazy jazyka Transact-SQL jako zdroj záznamů formuláře a sestavy. Například pomocí "Vybrat * z ViewName" namísto pouze "ViewName" nebo "StoredProcedureName exec" namísto pouze „ StoredProcedureName. „ Tímto způsobem Access předává příkazy jazyka Transact-SQL přímo k serveru SQL Server a načítá data založená na oprávněních role aplikace.

Role veřejné databáze

Role aplikačního získá oprávnění role veřejné databáze. Standardně v NorthwindCS roli Public má úplná oprávnění pro většinu objektů. Role aplikačního tedy obecně neúčinné. Jste vytvořili v tabulce tNewTable v části "Vytváření aplikace role", roli Public nebyla poskytnuta oprávnění do tabulky a později pily účinky kontextu zabezpečení role aplikace tuto tabulku. Však ostatní tabulky pravděpodobně se nezobrazí případný rozdíl podle role aplikačního vzhledem k tomu, že veřejné role má oprávnění k těmto objektům.

Zabezpečení VBA

Protože heslo pro roli aplikace vložený do aplikace, ze kterého je volána, dobře informovaného uživatele by mohl číst ze zdrojového kódu aplikace roli jméno a heslo a potom pomocí tyto informace k získání přístupu k serveru SQL Server z jiné aplikace. Proto je vhodné ke kompilaci ADP do souboru ADE, tak, aby nebyl zobrazit zdrojový kód. Alespoň vynutit hesla v projektu VBA.

Odkazy

Další informace o verzi tohoto článku v aplikaci Microsoft Access 2000 získáte článku znalostní báze Microsoft Knowledge Base:
318816ACC2000: Jak používat role aplikací s projekty aplikace Access a SQL Server 2000 Desktop Engine (MSDE 2000)
Další informace o GRANT naleznete Dokumentaci SQL Server Books Online. SQL Server Books Online je k dispozici na následujícím webu společnosti Microsoft:
http://www.microsoft.com/SQL/techinfo/productdoc/2000/default.ASP

Vlastnosti

ID článku: 308312 - Poslední aktualizace: 29. března 2007 - Revize: 6.2
Informace v tomto článku jsou určeny pro produkt:
  • Microsoft Office Access 2007
  • Microsoft Office Access 2003
  • Microsoft Access 2002 Standard Edition
Klíčová slova: 
kbmt kbexpertiseinter kbinfo kbprogramming kbadp kbvba kbhowto KB308312 KbMtcs
Strojově přeložený článek
Důležité: Tento článek byl přeložen pomocí software společnosti Microsoft na strojový překlad, ne profesionálním překladatelem. Společnost Microsoft nabízí jak články přeložené překladatelem, tak články přeložené pomocí software na strojový překlad, takže všechny články ve Znalostní databázi (Knowledge Base) jsou dostupné v češtině. Překlad pomocí software na strojový překlad ale není bohužel vždy dokonalý. Obsahuje chyby ve skloňování slov, skladbě vět, nebo gramatice, podobně jako když cizinci dělají chyby při mluvení v češtině. Společnost Microsoft není právně zodpovědná za nepřesnosti, chyby nebo škody vzniklé chybami v překladu, nebo při použití nepřesně přeložených instrukcí v článku zákazníkem. Společnost Microsoft aktualizuje software na strojový překlad, aby byl počet chyb omezen na minimum.
Projděte si také anglickou verzi článku:308312

Dejte nám zpětnou vazbu

 

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