8. Czy bieżący użytkownik może 'na chwilę' dostać większe uprawnienia?
Tak, może. Oczywiście nie on sam sobie te większe uprawnienia nadaje,
tylko programista musi przewidzieć taką sytuację i obsłużyć ją w programie.
Wprawdzie to raczej dość rozpaczliwe działanie, ale w pewnych sytuacjach
taki trik może okazać się przydatny. Np. kiedy zależy nam na tym,
żeby do pewnych obiektów użytkownik miał dostęp wyłącznie
poziomu z naszego kodu, a nie z okna bazy danych.
Poniżej umieściłem procedurę, która nadaje pełne uprawnienia bieżącemu
użytkownikowi bez uprawnień. Cala sztuczka-magiczka polega na tym, aby
utworzyć odpowiedni obiekt Workspace. Przecież to nie user bez praw ma sobie
nadać uprawnienia, tylko programista udostępnia mu je, kiedy potrzeba. W tym celu trzeba
mieć oczywiście jakieś swoje konto z pełnymi uprawnieniami do bazy
i to wystarczy oraz taka przykładowa procedurka.
Sub ChwilowyFullAccess
Dim dbs As Database, wrk As Workspace
Dim ctrTables As Container, ctrTable As Document
Set wrk = DBEngine.CreateWorkspace("", "TwojeKonto", _
"TwojeTajneHaslo", dbUseJet)
Set dbs = wrk.OpenDatabase(CurrentDb.Name)
Set ctrTables = dbs.Containers!Tables
Set ctrTable = ctrTables.Documents("Tabela1")
ctrTable.UserName = CurrentUser
ctrTable.Permissions = dbSecFullAccess
'Teraz bieżący użytkownik ma pełne prawa do tabeli Tabela1
ctrTable.Permissions = dbSecNoAccess
'A teraz znów nie ma praw
End Sub
K. P.