Ćwiczenia > Mechanizmy bezpieczeństwa w MS SQL Server 2000 > Role w bazie danych

9.5 Role w bazie danych



Oprócz ról w serwerze (patrz lekcja poprzednia) w MS SQL Server mamy też do czynienia z rolami w bazie danych. W każdej bazie danych istnieje gotowy zestaw ról (każda rola ma oczywiście swoje charakterystyczne uprawnienia). Co różni role w bazie danych od ról w serwerze to zasięg - tylko w bazie danych, w której są utworzone. Poza tym drugą różnicą jest to, że administrator może dodać własne role w bazie danych.

Aby użytkownik mógł pracować z bazą danych oraz aby mógł być członkiem roli w bazie danych, musi on najpierw zostać dodany do listy użytkowników bazy danych (jego login musi zostać zamapowany do odpowiedniej nazwy użytkownika w bazie danych). W niniejszej lekcji dowiesz się, w jaki sposób umożliwić użytkownikowi korzystanie z bazy danych, jak dodawać go do ról w bazie danych oraz jak utworzyć własną rolę w bazie danych.

Krok 1 - Nadaj użytkownikowi prawo dostępu do bazy danych

1. Uruchom program Query Analyzer.
2. Zaloguj się używając uwierzytelnienia systemu Windows.
3. W menu głównym programu wybierz File - Open.
4. W oknie Open Query File wybierz plik demo_9_5_1.sql.
5. Zaznacz i uruchom (klawisz F5) fragment kodu oznaczony w komentarzu jako (1).


-- (1) dodajmy do serwera nowy login
USE Biblioteka
GO

EXEC sp_addlogin 'Tomek', 'password', 'master'
GO


Wynikiem wykonania powyższego kodu jest dodanie loginu SQL Servera o nazwie Tomek, haśle password i domyślnej bazie danych master. O procedurze sp_addlogin mogłeś przeczytać w lekcji poprzedniej.

6. Zaznacz i uruchom (F5) fragment kodu oznaczony w komentarzu jako (2).


-- (2) dajmy uzytkownikowi dostep do bazy Biblioteka
EXEC sp_grantdbaccess 'Tomek', 'Tomasz'
GO


Wynikiem wykonania powyższego kodu jest nadanie uzytkownikowi serwera Tomek dostępu do bazy danych Biblioteka (do aktualnej bazy roboczej; nazwa użytkownika w bazie danych - Tomasz - jak widać nie musi być taka jak login w serwerze). Procedura systemowa sp_grantdbaccess służy do nadawania użytkownikom dostępu do baz danych. Do odebrania użytkownikowi dostępu do bieżącej bazy danych służy procedura sp_revokedbaccess (jako argument podajemy nazwę użytkownika w bazie danych - nie jego login).

Krok 2 - Poznaj istniejące role w bazie danych

Poniższa tabela prezentuje istniejące w każdej bazie danych role i ich uprawnienia.

Rola w bazie danych Członek tej roli może...
db_owner Wykonać wszystkie zadania w bazie danych.
db_accessadmin Dodawać i usuwać użytkowników lub grupy w bazie danych (używać sp_grantdbaccess).
db_securityadmin Zarządzać uprawnieniami rolami, członkostwem, właścicielami obiektów w bazie danych (GRANT, REVOKE, DENY).
db_ddladmin Dodawać, modyfikować i usuwać obiekty w bazie danych (CREATE, ALTER, DROP).
db_backupoperator Uruchamiać komendy DBCC, sporządzać kopie zapasowe bazy danych.
db_datareader Czytać dane ze wszystkich tabel i widoków w bazie danych (SELECT).
db_datawriter Zmieniać i usuwać dane we wszystkich tabelach w bazie danych (INSERT, UPDATE, DELETE).
db_denydatareader Nie może czytać danych w żadnej tabeli ani widoku w bazie danych (brak uprawnień do SELECT).
db_denydatawriter Nie może modyfikować i usuwać danych w żadnej tabeli w bazie danych (brak uprawnień do INSERT, UPDATE i DELETE).


Krok 3 - Dodaj własną rolę w bazie danych

1. Zaznacz i uruchom (F5) fragment kodu oznaczony w komentarzu jako (3).


-- (3) dodajmy w bazie danych
-- nowa role o nazwie Marketing
EXEC sp_addrole 'Marketing'
GO


Wynikiem wykonania powyższego kodu jest dodanie w bieżącej bazie danych (Biblioteka) nowej roli o nazwie Marketing. Procedura systemowa sp_addrole służy do dodawania w bieżącej bazie danych nowych ról. Procedurą systemową o odwrotnym działaniu (usuwanie ról z bieżącej bazy danych) jest procedura sp_droprole.

Krok 4 - Dodaj użytkownika do roli w bazie danych

1. Zaznacz i uruchom (F5) fragment kodu oznaczony w komentarzu jako (4).


-- (4) dodajmy uzytkownika do roli
-- w bazie danych 
EXEC sp_addrolemember 'Marketing', 'Tomasz'
GO


Wynikiem wykonania powyższego kodu jest dodanie użytkownika o nazwie Tomasz (nazwa w bazie danych - nie w serwerze) do roli Marketing w bieżącej bazie danych. Procedura systemowa sp_addrolemember służy do dodawania użytkowników bazy danych do ról w bieżącej bazie danych. Do usuwania ról w bazie danych służy procedura systemowa sp_droprole. Dodatkowo masz do dyspozycji procedurę sp_helprolemember, która wyświetla listę członków wybranej roli w bazie danych.

W tym momencie możesz uruchomić program Enterprise Manager i w bazie danych Biblioteka zajrzeć do zakładek Users oraz Roles. Klikając dwukrotnie na wybranym użytkowniku lub roli możesz zarządzać uprawnieniami do wykonywania poleceń SQL w bazie danych oraz zmieniać przynależność użytkowników do ról.

Ponadto klikając dwukrotnie na dowolnym obiekcie bazy danych (np. tabeli), a następnie klikając na przycisku Permissions... możesz zarządzać uprawnieniami do wykonywania odpowiednich poleceń SQL (patrz rysunek poniżej).



Rys. 9.5.1 Enterprise Manager - zarządzanie uprawnieniami na poziomie obiektu bazy danych


O tym, jak działają uprawnienia pisaliśmy już w lekcji 4.2 Polecenia języka DCL.


Do skryptu uzytkownicy.sql dodanego do projektu Prace dyplomowe wstaw kod dodający odpowiednie, Twoim zdaniem, role w bazie danych oraz kod nadający użytkownikom utworzonym w poprzedniej lekcji dostęp do bazy danych i dodający użytkowników do odpowiednich ról w bazie danych. Używając poleceń języka DCL nadaj użytkownikom i grupom uprawnienia - uzasadnienie uprawnień umieść w dokumentacji projektu.


Przejdź dalej



Ćwiczenia > Mechanizmy bezpieczeństwa w MS SQL Server 2000 > Role w bazie danych