Jesteś obecnie w trybie offline. Czekamy na ponowne połączenie z Internetem.

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

Zakończono świadczenie pomocy technicznej dla pakietu Office 2003

Firma Microsoft zakończyła świadczenie pomocy technicznej dla pakietu Office 2003 8 kwietnia 2014. Ta zmiana wpłynęła na Twoje aktualizacje oprogramowania i opcje zabezpieczeń. Dowiedz się, co to oznacza dla Ciebie i jak zapewnić sobie kontynuację ochrony.

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
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.
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 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. 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 " & strRoleNameElseMsgBox "ADP must be connected to SQL Server"End IfExit SubEH: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 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. 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.
Acc2002 reviewdocidACC2003 ACC2007
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

Ostrzeżenie: ten artykuł przetłumaczono automatycznie

Właściwości

Identyfikator artykułu: 308312 — ostatni przegląd: 09/17/2011 22:03:00 — zmiana: 3.0

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

  • kbexpertiseinter kbinfo kbprogramming kbadp kbvba kbhowto kbmt KB308312 KbMtpl
Opinia
mTracker.init();