20. Czy można zmienić właściciela bazy danych?

Według helpa, a także innych opracowań Microsoftu (np. MSDN Library), jedyną metodą na zmianę właściciela bazy jest utworzenie nowej bazy i zaimportowanie wszystkich obiektów.

Nie jest to jednak pełna prawda. Wprawdzie rzeczywiście nie można zmienić właściciela bazy z poziomu interfejsu Accessa (odpowiednia opcja jest wyszarzona), jednak nie ma przeszkód, żeby wpisać nowego właściciela w kodzie. Można w tym celu posłużyć się poniższym zapisem, który ustawia Admina jako nowego właściciela bazy:

CurrentDb.Containers("Databases")("MSysDb").Owner = "Admin"

Ale to nie koniec niespodzianek! Okazuje sie, że właścicielem bazy może być także grupa robocza. Oto przykład:

CurrentDb.Containers("Databases")("MSysDb").Owner = "Users"

Teraz każdy użytkownik ma prawa właściciela bazy, bo do grupy Users należą (zwykle) wszyscy użytkownicy.

Uwaga 1: Jeśli wcześniej zalogowaliśmy się na użytkownika Engine w sposób opisany w punkcie 19 niniejszego działu, to zwykle uda nam się zmienić właściciela, także w bazie zabezpieczonej na poziomie użytkownika, bo raczej nikt tam nie ustawiał ograniczeń dla użytkownika Engine. Chciałbym jednak ostudzić tych, co wypatrzyli w tym możliwość ominięcia ograniczeń wynikających z określonych uprawnień do bazy. Prawidłowo zabezpieczona baza nie zostanie w ten sposób odblokowana. Właściciel bazy nie oznacza właściciela jej obiektów. Nie należy go też mylić z twórcą bazy, który zawsze zachowuje pełne prawa do bazy, bez względu na zawarte w niej zabezpieczenia.

Uwaga 2: Pełne i nieusuwalne uprawnienia do bazy ma także każdy członek grupy Admins, zdefiniowanej w tym pliku MDW, na którym została utworzona baza accessowa. Dlatego zabezpieczonej bazy nigdy nie powinniśmy udostępniać razem z oryginalnym plikiem MDW. Gwarantuje to nam, że ustawiony w wyżej opisany sposób nowy właściciel naszej bazy musi pochodzić z innego pliku MDW niż nasz i na pewno nie uzyska uprawnień grupy Admins z oryginalnego pliku MDW.

K. P.