Opcje dostępu do bazy danych dla użytkowników SINGLE_USER, MULTI_USER, RESTRICTED_USER (db user access options)

13-lut-2011

Opcje dostępu użytkowników do bazy danych kontrolują, kto może korzystać z bazy danych. Używa się ich zwłaszcza podczas wykonywania prac administracyjnych na bazach danych. Ot po prostu, kiedy chcesz coś zrobić, a się nie da, bo są zalogowani inni użytkownicy, masz szansę ich wyrzucić i zostać jedynym władcą swojej bazy danych.

Ale po kolei. Owe stany dostępu to:

  • MULTI_USER – domyślny stan. Każdy użytkownik z odpowiednimi uprawnieniami może się połączyć z bazą danych.
  • RESTRICTED_USER – opcja 'dla mnie i kolegów’. Pozwala pracować na bazie danych wyłącznie użytkownikom administracyjnym czyli db_owner, db_creator, sysadmin. Nie ma limitu co do ilości połączeń, tzn może pracować wielu administratorów, ale połączenia innych użytkowników będą odrzucane. Ale hola, hola! Co z istniejącymi połączeniami zwykłych użytkowników? Zostaną wyrzuceni, czy zostaną!?
    Tak na prawdę sam możesz to określić, a decyduje o tym tzw. termination clause. Kiedy baza danych zmienia stan może się to odbyć natychmiast i powinieneś wtedy dopisać
       WITH ROLLBACK IMMEDIATE
    lub po określonym czasie (tu 10 sekund):
       WITH ROLLBACK AFTER 10 SECONDS
  • SINGLE_USER – najbardziej egoistyczna opcja, pozwalająca pracować tylko jednemu użytkownikowi (oczywiście mamy na myśli tego, który wydał to polecenie). Gdyby inni użytkownicy w tym czasi byli podłączeni do bazy danych to… sobie poczekasz, no chyba, że przypomnisz sobie o termination clause opisanym wyżej. Jeśli po wykonaniu czynności administracyjnych, nie przywrócisz bazy danych do poprzedniego stanu, to do bazy może się nadal zalogować tylko jeden użytkownik. Tak więc kto pierwszy ten lepszy! Co gorsza, tym jedynym użytkownikiem może się w takim przypadku stać np proces synchronizujący statystyki, zaleca się więc wyłączenie tej opcji w takim przypadku, ale o tym dokładniej opowiada help.

No dobrze. Kilka przykładów:

  • Przełączenie bazy danych w SINGLE_USER
ALTER DATABASE AdventureWorks2008 SET SINGLE_USER
GO
  • Przełączenie bazy danych w SINGLE_USER z natychmiastowym wyrzuceniem innych użytkowników
ALTER DATABASE AdventureWorks2008 SET SINGLE_USER WITH ROLLBACK IMMEDIATE
GO
  • Przełączenie bazy danych w MULTI_USER
ALTER DATABASE AdventureWorks2008 SET MULTI_USER
GO

A teraz jeszcze jedno ważne pytanie. Jak sprawdzić w jakim stanie znajduje się obecnie baza danych (SINGLE MULTI czy RESTRICTED)?

Informacje o opcjach bazy danych można zawsze uzyskać z widoku systemowego sys.databases. Polecenie poniżej bada jak to wygląda w bazie danych AdventureWorks2008 wyświetla nazwę bazy danych, wartość opcji dostępu do bazy danych użytkowników i jej oznaczenie opisowe:

SELECT
       name, user_access, user_access_desc
FROM
       sys.databases
WHERE
       name = 'AdventureWorks2008′

A oto wynik:

Sprawdzenia możesz też dokonać komendą:

SELECT DATABASEPROPERTYEX(’AdventureWorks2008′,’UserAccess’)

Komentarze są wyłączone

Autor: Rafał Kraik