Jak korzystać z ról aplikacji z projektów programu Access i SQL Server 2000 Desktop Edition

Tłumaczenia artykułów Tłumaczenia artykułów
Numer ID artykułu: 308312 - Zobacz jakich produktów dotyczą zawarte w tym artykule porady.
Zaawansowane: Wymaga ekspertów kodowania, interoperacyjności i wielodostępne umiejętności.

W tym artykule dotyczą tylko projektu programu Microsoft Access (.adp).

Wersja dla programu Microsoft Access 2000 w tym artykule zobacz 318816.
Rozwiń wszystko | Zwiń wszystko

Streszczenie

W tym artykule opisano możliwości ograniczenia, i rozwiązania dotyczące korzystania z ról aplikacji Microsoft SQL Server w Projekt programu Microsoft Access (ADP).

Więcej informacji

W programie SQL Server można utworzyć role bazy danych dla łatwiejszego Administracja uprawnień w bazie danych. Zamiast przyznawania indywidualnych uprawnienia do każdego użytkownika osobno, można zgrupować użytkowników o tej samej uprawnienie musi poprzez ich członkami tej samej roli zwykłej bazy danych i następnie przypisywać uprawnienia roli bazy danych sam. O ile określonego jawnie udzielono gdzie indziej, zdobędzie użytkowników uprawnienia do tej roli bazy danych.

Podczas zwykłej bazy danych role są bardzo przydatne w sytuacji, gdy użytkownicy będą mogli wykonać własne kwerend ad hoc lub aktualizacja bazy danych nie są one zawsze jest to właściwe. Czasami może być tylko użytkownikom i mieć określone uprawnienia gdy korzystają z określonej aplikacji i nie chcesz mieć możliwość wyświetlania lub modyfikowanie danych poza aplikacji.

Jedną metodę, która jest zwykle używana w przypadku pracy metod obejścia tego problemu jest tylko nadać uprawnienia niezbędne do jednego programu SQL Konto użytkownika serwera. Rzeczywiste użytkownicy mogą mieć uprawnienia, aby połączyć się z Baza danych, ale nie do wyświetlania lub modyfikowania danych. Po połączeniu się z użytkownikiem bazy danych przy użyciu pojedynczego konta, ADP może następnie ponownie programowo przy użyciu poświadczeń konta użytkownika, które uprawnienia. Mogą być skuteczne, nie pozwala na rozróżnienie między użytkowników w bazie danych lub, aby określić, które użytkownik wykona dana akcja.

Role aplikacji zaprojektowano w celu obejścia to ograniczenie. Nie ma ról aplikacji, w przeciwieństwie do ról zwykłej bazy danych samych członków. Zamiast tego użytkownicy zalogować się do programu SQL Server i połączyć się z bazy danych przy użyciu poświadczeń użytkownika. W tym punkcie kontekstu zabezpieczeń Rola aplikacji mogą programowo stosowane do istniejącego połączenia przez za pomocą sp_setapprole Procedura przechowywana. W programie SQL Server poszczególnych użytkowników są nadal zróżnicowana ale uprawnienia, które są dostępne w ramach danego połączenia są ograniczone uprawnienia roli aplikacji. Użytkownika indywidualne uprawnienia, czy mniejszym lub większym, są już uważany za.

Tworzenie roli aplikacji

Program Microsoft Access projekty nie ma żadnych projekt visual narzędzia do tworzenia zabezpieczeń serwera SQL obiektów, takich jak role aplikacji. Firma Microsoft zaleca używanie narzędzi klienta, które są dołączone regularne wersji programu SQL Server lub Microsoft Office XP Developer tworzenia Rola aplikacji oraz przypisując mu uprawnienia. Jednak nadal można utworzyć Rola aplikacji i udzielić odpowiednich uprawnień programowo przez przy użyciu języka Transact-SQL (T-SQL) z ADP. Chociaż pełne omówienie programu SQL Server Zabezpieczenia serwera wykracza poza zakres tego artykułu, dodatkowe informacje można znaleźć w Dokumentacji SQL Server Books Online Poniższe kroki pokazują jak programowo utworzyć Rola aplikacji i przyznania nowej roli Wybierz uprawnienia w tabeli:
  1. Uruchom program Access.
  2. Otwórz przykładowy projekt Northwind programu Access.
  3. W oknie Baza danych kliknij przycisk Moduły w obszarze Obiekty, a następnie kliknij przycisk Nowy Aby otworzyć nowy moduł w środowisku Visual Basic.

    Uwaga W programie Access 2007 kliknij przycisk Moduł w Inne Grupa na Tworzenie Karta.
  4. Wpisz lub wklej następujący kod do nowego modułu:
    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. Zapisz moduł, a następnie zamknij języka Visual Basic Środowisko.
  6. Utwórz kopię Klienci Tabela, a następnie zapisz go jako tNewTable. Aby to zrobić, wykonaj następujące kroki:
    1. W oknie Baza danych kliknij prawym przyciskiem myszy Klienci Tabela, a następnie kliknij Zapisz jako w menu skrótów.

      Uwaga W programie Access 2007 kliknij przycisk Klienci tabelę w okienku nawigacji, kliknij przycisk Przycisk Microsoft Office, wskaż polecenie Zapisz jako, a następnie kliknij przycisk Zapisanie obiektu jako.
    2. W Zapisz jako okno dialogowe, typ tNewTable w Zapisz tabelę "Odbiorcy" a następnie kliknij przycisk OK.
  7. W oknie Baza danych kliknij przycisk Formularze w obszarze Obiekty, kliknij przycisk Nowy, a następnie kliknij przycisk OK Aby otworzyć nowy formularz w widoku Projekt.

    Uwaga W programie Access 2007 kliknij przycisk Projekt formularza w Formularze Grupa na Tworzenie Karta.
  8. Dodać przycisk polecenia do nowego formularza.
  9. Ustaw OnClick Właściwość nowy przycisk polecenia, aby następujące zdarzenie: Procedura:
    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. Zamknij środowisko języka Visual Basic, aby powrócić do w formularzu.
  11. Zapisz formularz, a następnie przejdź do formularza Formularz Widok.
  12. Kliknij przycisk polecenia, aby uruchomić kod.

    Ogłoszenia Aby otrzymywać dwóch okien komunikatów do wskazania sukcesu. Po wyświetleniu Rola aplikacji jest tworzony, a druga po nowej roli przyznawane są uprawnienia do tNewTable.

Rola aplikacji wykonawczej

Główne complication podczas korzystania z ról aplikacji Projekty programu Microsoft Access jest, że program Access używa trzy połączenia z serwerem SQL Server do obsługi różne zadania. Najlepiej, aby zastosować rola aplikacji do całego projektu można może być uruchomienie sp_setapprole w kontekście wszystkie trzy połączenia. Obiekty obsługiwane przez Każde połączenie, są następujące:

  1. Przy ustalaniu, które obiekty pojawiają się w bazie danych okna i zadaniami administracyjnymi, różne bazy danych.

    Używane do otwieranie tabel, widoków, procedur przechowywanych, funkcji i źródeł rekordów dla formularze i subreports (ale nie dla głównego przedstawia się).

    Używane do Uzyskiwanie źródła rekordów dla pola kombi, pól listy i raporty.
  2. Otwarcie tabele, widoki, procedury przechowywane, Funkcje i źródła rekordów dla formularzy i podraportów (ale nie dla Raport główny sam).

    Służył źródła rekordów dla kombi pól, pól listy i raportów.
  3. Służył źródła rekordów dla pola kombi, listy pola i raportów.

Chociaż połączenia # 2 i # 3 możliwy jest dość łatwe, nie istnieje metoda dostępna dla wykonywania procedury przechowywanej w kontekst połączenia # 1. Na szczęście połączenie to jest najmniej ważne trzech i łatwo przepracowanych wokół tworząc własne użytkownika Interfejs (na przykład, formularz panelu przełączania typ) do obsługi obiektów bazy danych Zamiast wpisywać w oknie bazy danych wbudowanego.

Następujące kroki służy do demonstrowania sposobu zastosowania przykładowy projekt Northwind programu Access Rola aplikacji przed połączeń # 2 i 3:

  1. W oknie Baza danych kliknij przycisk Formularze w obszarze Obiekty, kliknij przycisk Nowy, a następnie kliknij przycisk OK Aby otworzyć nowy formularz w widoku Projekt.

    Uwaga W programie Access 2007 kliknij przycisk Projekt formularza w Formularze Grupa na Tworzenie Karta.
  2. Dodawanie pola listy do nowo utworzonego formularza, a następnie ustaw Nazwa Właściwości pola listy, aby lst_AppRole.
  3. Dodać przycisk polecenia do formularza.
  4. Ustaw OnClick Właściwość nowy przycisk polecenia, aby następujące zdarzenie: Procedura:
    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. Zamknij środowisko języka Visual Basic, aby powrócić do w formularzu.
  6. Zapisz formularz, a następnie przejdź do formularzaFormularz Widok.
  7. Kliknij przycisk polecenia, aby uruchomić kod.

    Ogłoszenia że pojawi się okno komunikatu, który oznacza sukces.
  8. W oknie Baza danych kliknij przycisk Tabele w obszarze Obiekty, a następnie otwórz tNewTable Tabela.

    Uwaga W programie Access 2007 kliknij dwukrotnie tNewTable tabelę w okienku nawigacji.
  9. Modyfikowanie rekordu i spróbuj zapisać zmiany.
Zauważ, że podczas próby przekazania zmian, zostanie wyświetlony komunikat o błędzie dotyczący nie ma wystarczających uprawnień. Jest tak dlatego, która została nadana Nowa rola aplikacji Wybierz uprawnienie do tNewTable Tabela, ale nie Aktualizacja uprawnienie.

Zgodnie z projektem programu Access wyświetlane są tylko obiekty Dla którego użytkownik ma wybrać przynajmniej oknie Baza danych lub uprawnienia wykonywania. Program Access używa połączenia # 1, aby ustalić, które obiekty, że użytkownik ma uprawnienia dla. Po zastosowaniu rola aplikacji do połączeń # 2 i 3 #, bazy danych Okno nadal pokazuje takie same obiekty, że samo przed, nawet jeśli użytkownik nie masz już uprawnienia do wszystkich obiektów lub może mieć uprawnień więcej obiektów, które nie są wyświetlane. Może to doprowadzić do nieoczekiwanego zachowania podczas okno bazy danych.

Na przykład, gdy otwarto Tabela tNewTable "wydaje" że użytkownik ma uprawnienia do edycji i Wstawianie rekordów. Wstaw nowy rekord ikona na dole tabeli jest włączone, a użytkownik będzie mógł umieścić rekordu w trybie edycji. Nie widać żadnych wizualny sygnał, aby wskazać, w przeciwnym razie aż spróbuj dokonać edycji lub Wstaw, efektem jest komunikat o błędzie. Dostęp wierzy, mają uprawnienia po w rzeczywistości przeciwnym.

Najbardziej skutecznym rozwiązaniem jest zapewnienie niestandardowy interfejs użytkownika, a nie polegać na okno bazy danych. Za pomocą Interfejs użytkownika typu panel przełączania, można kontrolować dokładnie, które obiekty użytkownik ma dostęp.

Inne ograniczenia i zagadnienia dotyczące zabezpieczeń

Subforms nie działa

W odróżnieniu od z innymi obiektami bazy danych programu Access nie obsługuje Zawsze używaj tego samego połączenia pobrać źródła danych podformularza. Dostęp często (ale nie zawsze) tworzy nowe połączenie z serwerem SQL Server po prostu do dojście rekordów podformularza lub pobierania danych pola łączące, łączy podformularz formularza głównego. Ponieważ nie obsługuje tego nowego połączenia rolę aplikacji stosowane, jeśli może być wygenerowany błąd uprawnień użytkownika nie mieć jawne uprawnienia do obiektu bazy danych. Niestety to oznacza nie niezawodnym sposobem korzystać z podformularzy związanego, gdy zastosowanie role są stosowane. Tylko skutecznym rozwiązaniem jest zostały całkowicie niezwiązane Podformularze z manipulowania danymi obsługiwane programowe. Jest to najbardziej poważne ograniczenia przy użyciu ról aplikacji w programie Access.

Raporty nie działa

Jeśli używasz obiekt, taki jak tabeli lub nazwie widoku na liście jako źródła rekordów dla raportu lub podraportu, program Access sprawdza czy obiekt ma na liście w oknie bazy danych przed pobraniem jakichkolwiek danych z programu SQL Server. Ponieważ połączenie, które nie korzysta z okna Baza danych stosowane rolę aplikacji, zostanie wygenerowany błąd, jeśli nie masz jawne uprawnienia do źródła danych.

W celu obejścia Ten problem, zawsze instrukcji użycia języka Transact-SQL jako źródła rekordów dla formularzy i raportów. Na przykład użyć zamiast po prostu "Wybierz * z ViewName" "viewname" lub "Exec StoredProcedureName" zamiast po prostu "StoredProcedureName". W ten sposób dostęp przekazuje instrukcji Transact-SQL bezpośrednio do programu SQL Server i pobiera dane, na podstawie uprawnień roli aplikacji.

Rola publicznego bazy danych

Rola aplikacji nabywa uprawnienia Rola publicznego bazy danych. Domyślnie w NorthwindCS publicznych rola ma pełny uprawnienia do większości obiektów. W związku z tym rola aplikacji jest zazwyczaj nieskuteczne. Podczas tworzenia tabeli tNewTable w "Tworzenie Sekcja "rola aplikacji roli publicznej nie zostało przyznane uprawnienie do Tabela, a później piły efekty kontekst aplikacji roli zabezpieczeń w tej tabeli. Jednakże inne tabele nie mogą wykazywać wszelkie różnice w obszarze Rola aplikacji, ponieważ rola publicznego ma uprawnienia do tych obiekty.

VBA zabezpieczeń

Ponieważ hasło dla roli aplikacji osadzona w aplikacji, z którego jest ona wywoływana, użytkownik znający to zagadnienie będzie w stanie odczytać źródła aplikacji roli nazwy i hasła kod, a następnie wykorzystać te informacje do uzyskania dostępu do programu SQL Server z innego aplikacja. Dlatego jest dobrze kompilacji w pliku ADE ADP tak, aby kod źródłowy nie jest widoczny. Co najmniej wymuszania hasła Projekt VBA.

Materiały referencyjne

Aby uzyskać dodatkowe informacje informacje o wersji programu Microsoft Access 2000 w tym artykule kliknij numer artykułu poniżej w celu wyświetlenia tego artykułu z bazy wiedzy Microsoft Knowledge Base:
318816 ACC2000: Jak korzystać z ról aplikacji z projektów programu Access i SQL Server 2000 Desktop Engine (MSDE 2000)
Aby uzyskać więcej informacji o dotacji, zobacz Dokumentacji SQL Server Books Online. W Dokumentacji SQL Server Books Online jest dostępna w następującej witrynie firmy Microsoft w sieci Web:
http://www.microsoft.com/SQL/techinfo/productdoc/2000/default.asp

Właściwości

Numer ID artykułu: 308312 - Ostatnia weryfikacja: 17 września 2011 - Weryfikacja: 3.0
Informacje zawarte w tym artykule dotyczą:
  • Microsoft Office Access 2007
  • Microsoft Office Access 2003
  • Microsoft Access 2002 Standard Edition
Słowa kluczowe: 
kbexpertiseinter kbinfo kbprogramming kbadp kbvba kbhowto kbmt KB308312 KbMtpl
Przetłumaczone maszynowo
WAŻNE: Ten artykuł nie został przetłumaczony przez człowieka, tylko przez oprogramowanie do tłumaczenia maszynowego firmy Microsoft. Firma Microsoft oferuje zarówno artykuły tłumaczone przez ludzi, jak i artykuły tłumaczone maszynowo, dzięki czemu każdy użytkownik może uzyskać dostęp do całej zawartości bazy wiedzy Knowledge Base we własnym języku. Prosimy jednak pamiętać, że artykuły przetłumaczone maszynowo nie zawsze są doskonałe. Mogą zawierać błędy słownictwa, składni i gramatyki, przypominające błędy robione przez osoby, dla których język użytkownika nie jest językiem ojczystym. Firma Microsoft nie odpowiada za wszelkie nieścisłości, błędy lub szkody spowodowane nieprawidłowym tłumaczeniem zawartości oraz za wykorzystanie tej zawartości przez klientów. Oprogramowanie do tłumaczenia maszynowego jest często aktualizowane przez firmę Microsoft.
Anglojęzyczna wersja tego artykułu to:308312

Przekaż opinię

 

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