Vous êtes sur la page 1sur 47

Serwer SQL 2008.

Administracja
i programowanie
Autor: Danuta Mendrala, Pawe Potasiski,
Marcin Szeliga, Damian Widera
ISBN: 978-83-246-2033-3
Format: 158x235, stron: 488

Poznaj nowoczesne technologie zarzdzania bazami danych


Jak zainstalowa i skonfigurowa SQL Server 2008?
W jaki sposb monitorowa wydajno i bezpieczestwo serwera bazy danych?
Jak tworzy oprogramowanie wsppracujce z SQL Serverem?

System zarzdzania bazami danych MS SQL Server zyska sobie zasuon renom
wrd projektantw baz danych i programistw. Stabilna i wydajna platforma, dostpna
w kilku edycjach, rnicych si moliwociami i zastosowaniami, wykorzystywana jest
w aplikacjach biznesowych, portalach internetowych i aplikacjach mobilnych.
Jej najnowsza wersja, oznaczona symbolem 2008, to potna platforma do zarzdzania
danymi, umoliwiajca nie tylko przechowywanie ich w tabelach, ale take
przetwarzanie, analizowanie, udostpnianie i zabezpieczanie. Pozwala ona take na
skadowanie danych nierelacyjnych obiektw binarnych i danych geograficznych.
Ksika Serwer SQL 2008. Administracja i programowanie zawiera szczegowe
omwienie moliwoci najnowszej wersji tej platformy bazodanowej. Zarwno
administratorzy, jak i programici znajd w niej wiele przydatnych informacji. Opisano
w niej poszczeglne edycje SQL Servera 2008, sposb ich instalacji, konfiguracji
i administrowania, techniki optymalizacji wydajnoci oraz zabezpieczania i analizowania
danych. Dziki niej dowiesz si, jakie nowe funkcje wprowadzono w wersji 2008,
jak korzysta z jzyka T-SQL i przechowywa dane nierelacyjne. Przeczytasz take
o integracji z platform CLR oraz korzystaniu z technologii SOA.
Instalacja SQL Servera 2008
Administrowanie serwerem bazy danych
Optymalizacja dostpnoci i wydajnoci
Nowe funkcje SQL Servera 2008
Monitorowania pracy serwera
Zabezpieczanie danych
Programowanie w T-SQL
Nierelacyjne typy danych
Korzystanie z dokumentw XML
Praca z SQL Server Compact Edition

Wykorzystaj w praktyce moliwoci


najnowszej wersji platformy bazodanowej SQL Server

Spis treci
Wstp .............................................................................................. 9

Cz I

Administracja ............................................................... 15

Rozdzia 1. Instalacja ....................................................................................... 17


Wybr edycji serwera SQL 2008 .................................................................................... 17
Edycja Enterprise ..................................................................................................... 17
Edycja Developer ..................................................................................................... 18
Edycja Standard ....................................................................................................... 18
Edycja Workgroup ................................................................................................... 18
Edycja Web .............................................................................................................. 19
Edycja Express ......................................................................................................... 19
Edycja Compact ....................................................................................................... 19
Porwnanie edycji .................................................................................................... 19
Licencjonowanie ............................................................................................................. 21
Wymagania ..................................................................................................................... 22
Instalacja ......................................................................................................................... 23
Aktualizacja .................................................................................................................... 27
Zmiana edycji ........................................................................................................... 27
Zmiana wersji ........................................................................................................... 29
Zgodno aplikacji ................................................................................................... 31
Czynnoci do wykonania przed aktualizacj ............................................................ 35
Strategie aktualizacji ................................................................................................ 36
Czynnoci do wykonania po aktualizacji ................................................................. 39
Narzdzia ........................................................................................................................ 43
Konsola SSMS ......................................................................................................... 43
DTA ......................................................................................................................... 46
Dokumentacja BOL .................................................................................................. 47
Przykadowa baza danych AdventureWorks 2008 ................................................... 47
Program SQLCMD .................................................................................................. 48
Visual Studio 2008 ................................................................................................... 48

Rozdzia 2. Scentralizowana administracja ........................................................ 51


Serwer konfiguracji ........................................................................................................ 52
Tworzenie serwera konfiguracji ............................................................................... 52
Rwnoczesne zapytania do grupy serwerw ............................................................ 55
Egzekwowanie polityk zarzdzania serwerami na grupie serwerw ........................ 55
Serwer konfiguracji a bezpieczestwo ..................................................................... 56

Serwer SQL 2008. Administracja i programowanie


Polityki zarzdzania serwerem ....................................................................................... 56
Architektura systemu ................................................................................................ 56
Skalowalno systemu .............................................................................................. 60
Korzystanie z polityk zarzdzania serwerem zainstalowanych w systemie .............. 60
Tworzenie wasnych polityk i warunkw w konsoli SSMS ..................................... 68
Programowe uycie i kontrolowanie polityk ............................................................ 73
PowerShell ...................................................................................................................... 77
Nawigacja po obiektach serwera SQL ...................................................................... 79
Typowe zadania administracyjne w PowerShell ...................................................... 81
Zadania usugi Agent ............................................................................................... 85

Rozdzia 3. Wysoka dostpno ....................................................................... 87


Podwajanie baz danych (dotyczy edycji Enterprise) ...................................................... 88
Architektura funkcjonalnoci podwajania baz danych ............................................. 88
Automatyczne naprawianie stron danych ................................................................. 92
Kompresja dziennika transakcyjnego ....................................................................... 94
Migawki baz danych (dotyczy edycji Enterprise) ........................................................... 95
Dziaanie migawek baz danych ................................................................................ 96
Tworzenie migawek baz danych .............................................................................. 97
Migawki baz danych a funkcjonalno podwajania baz danych ............................... 99
Zastosowanie migawek baz danych ....................................................................... 100
Kompresja kopii zapasowych (dotyczy edycji Enterprise) ........................................... 101
Zmiana domylnych ustawie kompresji kopii zapasowej ..................................... 102
Porwnanie kopii zapasowych skompresowanych i nieskompresowanych ............ 103
Replikacja Peer-to-Peer (dotyczy edycji Enterprise) .................................................... 105
Nowoci w replikacji Peer-to-Peer w serwerze SQL 2008 ..................................... 106
Topologia ............................................................................................................... 106
Konfiguracja replikacji ........................................................................................... 108
Konflikty w replikacji Peer-to-Peer ........................................................................ 120

Rozdzia 4. Nowe funkcje serwera SQL ........................................................... 125


Mechanizm ledzenia zmian ......................................................................................... 126
Dziaanie mechanizmu ledzenia zmian ................................................................. 126
Praca z mechanizmem ledzenia zmian .................................................................. 127
Wpyw mechanizmu ledzenia zmian na zachowanie silnika baz danych .............. 134
Zalety mechanizmu ledzenia zmian ...................................................................... 135
Mechanizm przechwytywania zmian (dotyczy edycji Enterprise) ................................ 136
Konfiguracja mechanizmu przechwytywania zmian .............................................. 136
Dziaanie mechanizmu przechwytywania zmian .................................................... 139
Praca z mechanizmem przechwytywania zmian ..................................................... 141
Porwnanie mechanizmu ledzenia zmian z mechanizmem
ich przechwytywania ........................................................................................... 144
Kompresja danych (dotyczy edycji Enterprise) ............................................................ 145
Kompresja wierszy ................................................................................................. 146
Kompresja stron danych ......................................................................................... 147
Zarzdzanie kompresj danych w konsoli SSMS ................................................... 150
Szacowanie stopnia kompresji ............................................................................... 152
Usuga wyszukiwania penotekstowego ....................................................................... 153
Indeksy penotekstowe ........................................................................................... 154
Integracja z serwerem SQL .................................................................................... 158
Obiekty o zrnicowanych atrybutach .......................................................................... 160
Atrybut SPARSE .................................................................................................... 160
Atrybut column set ................................................................................................. 163
Atrybuty SPARSE oraz column set a inne funkcjonalnoci serwera SQL 2008 .... 167

Spis treci

5
Indeksy filtrowane ........................................................................................................ 168
Tworzenie indeksu filtrowanego ............................................................................ 168
Indeksy filtrowane a penotablicowe krtkie porwnanie ................................. 170
Indeksy filtrowane a widoki ................................................................................... 173
Rady dotyczce tworzenia indeksu filtrowanego ................................................... 174
Statystyki filtrowane ..................................................................................................... 176
Partycjonowanie tabel (dotyczy edycji Enterprise) ....................................................... 178
Tworzenie partycji .................................................................................................. 179
Zarzdzanie partycjami .......................................................................................... 180
Eskalacja blokad ..................................................................................................... 182
Optymalizator zapyta .................................................................................................. 185
Wskazwka OPTIMIZE FOR ................................................................................ 185
Wskazwka FORCESEEK ..................................................................................... 187
Sugerowany plan wykonania zapytania .................................................................. 188
Parametryzowane zapytania ................................................................................... 190

Rozdzia 5. Zarzdzanie zasobami i monitorowanie pracy serwera .................... 193


Wstp ............................................................................................................................ 193
Dzienniki serwera SQL .......................................................................................... 194
Narzdzie SQLdiag ................................................................................................ 196
Monitor aktywnoci ................................................................................................ 198
Zarzdca zasobw (dotyczy edycji Enterprise) ............................................................. 199
Architektura zarzdcy zasobw .............................................................................. 200
Konfiguracja ........................................................................................................... 207
Zarzdca zasobw w SSMS ................................................................................... 211
Dynamiczne widoki oraz widoki katalogowe przeznaczone
dla zarzdcy zasobw .......................................................................................... 213
Monitorowanie pracy zarzdcy zasobw ................................................................ 214
Rozszerzone zdarzenia ................................................................................................. 215
Koncepcja i charakterystyka mechanizmu rozszerzonych zdarze ........................ 216
Architektura ............................................................................................................ 216
Odbiorcy rozszerzonych zdarze ............................................................................ 220
Dziaanie ................................................................................................................ 223
Wsparcie dla mechanizmu rozszerzonych zdarze w serwerze SQL 2008 ............ 226
Przykad praktycznego zastosowania ..................................................................... 231

Rozdzia 6. Monitorowanie wydajnoci ............................................................ 235


Monitorowanie wydajnoci w serwerze SQL 2005 ...................................................... 235
Monitor wydajnoci ................................................................................................ 235
Pliki ledzenia ........................................................................................................ 236
Profiler i ledzenie aktywnoci uytkownikw ...................................................... 237
Plany wykonania zapyta ....................................................................................... 244
Widoki i funkcje dynamiczne ................................................................................. 245
Raporty konsoli SSMS ........................................................................................... 247
Performance Dashboard Reports ............................................................................ 247
Monitorowanie wydajnoci w serwerze SQL 2008 ...................................................... 247
Architektura studia monitoring ............................................................................... 248
Wczanie i wyczanie .......................................................................................... 249
Przechowywanie danych ........................................................................................ 250
Zbieranie danych .................................................................................................... 251
Zalecenia ................................................................................................................ 263

Serwer SQL 2008. Administracja i programowanie

Rozdzia 7. Bezpieczestwo ........................................................................... 265


Model bezpieczestwa serwera SQL 2008 ................................................................... 265
Uwierzytelnianie .................................................................................................... 267
Autoryzacja ............................................................................................................ 269
Kryptografia ................................................................................................................. 277
Dostawcy usug kryptograficznych ........................................................................ 278
Hierarchia kluczy ................................................................................................... 280
Przenoszenie kluczy uytkownikw ....................................................................... 283
Elastyczne zarzdzanie kluczami (dotyczy edycji Enterprise) ............................... 286
Szyfrowanie danych ............................................................................................... 286
Sprawdzanie autentycznoci ................................................................................... 289
Szyfrowanie baz danych (dotyczy edycji Enterprise) ............................................. 293
Monitorowanie i wykrywanie wama ......................................................................... 297
Dzienniki serwera SQL .......................................................................................... 297
Plik ledzenia ......................................................................................................... 297
Wyzwalacze ........................................................................................................... 298
Monitorowanie wszystkich operacji (dotyczy edycji Enterprise) ........................... 300

Cz II

Programowanie .......................................................... 305

Rozdzia 8. T-SQL ........................................................................................... 307


Operatory przypisania ................................................................................................... 307
Konstruktor wierszy ..................................................................................................... 308
Klauzula TOP w widokach ........................................................................................... 309
Typy daty i czasu .......................................................................................................... 310
Funkcje daty i czasu ............................................................................................... 312
Optymalizacja sposobu wykonania zapyta ........................................................... 313
Typy i parametry tabelaryczne ..................................................................................... 314
Operator APPLY .......................................................................................................... 317
Grupowanie danych ...................................................................................................... 318
Operatory CUBE i ROLLUP .................................................................................. 319
Operator GROUPING SETS .................................................................................. 320
Funkcje GROUPING i GROUPING_ID ................................................................ 321
Klauzula OVER ..................................................................................................... 322
Operatory PIVOT i UNPIVOT .............................................................................. 325
CTE .............................................................................................................................. 328
Proste CTE ............................................................................................................. 328
Rekurencyjne CTE ................................................................................................. 329
Instrukcja MERGE ....................................................................................................... 330
czenie wynikw zapyta ........................................................................................... 334

Rozdzia 9. Nierelacyjne typy danych .............................................................. 337


Dane przestrzenne ........................................................................................................ 337
Dane geometryczne ................................................................................................ 338
Dane geograficzne .................................................................................................. 338
Przestrzenne typy danych ....................................................................................... 339
Formaty danych przestrzennych ............................................................................. 340
Metody typw i danych przestrzennych ................................................................. 343
Indeksy przestrzenne .............................................................................................. 347
Zakadka wynikw przestrzennych w konsoli SSMS ............................................. 351
Integracja z Virtual Earth ....................................................................................... 352

Spis treci

7
Due obiekty binarne .................................................................................................... 353
Atrybut FILESTREAM .......................................................................................... 354
Dostp do obiektu z poziomu serwera SQL ........................................................... 358
Dostp do obiektu poprzez API Windows .............................................................. 359
Atrybut FILESTREAM a inne funkcjonalnoci serwera SQL ............................... 361
Dane hierarchiczne ....................................................................................................... 364
Typ HIERARCHYID ............................................................................................. 365
Metody typu HIERARCHYID ............................................................................... 367
Dokumenty XML ......................................................................................................... 372
Typ danych XML ................................................................................................... 373
Kolekcje schematw XSD ...................................................................................... 374
Jzyki XPath i XQuery ........................................................................................... 375
Klauzula FOR XML ............................................................................................... 376
Metody typu danych XML ..................................................................................... 383
Indeksy XML ......................................................................................................... 387

Rozdzia 10. Service Broker ............................................................................. 391


Architektura SOA ......................................................................................................... 392
Typy komunikatw ................................................................................................ 393
Komunikaty ............................................................................................................ 394
Kontrakty ............................................................................................................... 394
Kolejki .................................................................................................................... 395
Usugi ..................................................................................................................... 397
Trasy ...................................................................................................................... 397
Dziaanie ....................................................................................................................... 399
Konwersacje ........................................................................................................... 399
Wysyanie i odbieranie komunikatw .................................................................... 401
Aktywacja wewntrzna i zewntrzna ..................................................................... 403
Zatrute komunikaty ............................................................................................. 406
Bezpieczestwo ...................................................................................................... 407
Diagnostyka ............................................................................................................ 408

Rozdzia 11. Integracja z platform CLR ........................................................... 411


Architektura .................................................................................................................. 411
Obiekty systemowe CLR ........................................................................................ 413
Typy systemowe CLR ............................................................................................ 413
Obsuga wartoci NULL ........................................................................................ 414
Obiekty CLR ................................................................................................................ 415
Funkcje uytkownika ............................................................................................. 415
Procedury skadowane ............................................................................................ 420
Wyzwalacze ........................................................................................................... 421
Typy uytkownika .................................................................................................. 422
Funkcje grupujce .................................................................................................. 427
Bezpieczestwo ...................................................................................................... 431

Rozdzia 12. SQL Compact ............................................................................... 433


Sporadycznie poczone aplikacje ................................................................................ 433
Lokalne kopie danych ............................................................................................ 434
Serwer SQL Compact Edition 3.5 ................................................................................ 434
Narzdzia ............................................................................................................... 435
Nowe funkcje wersji 3.5 ......................................................................................... 442
Programowanie ...................................................................................................... 442
Dystrybucja ............................................................................................................ 447

Serwer SQL 2008. Administracja i programowanie


Synchronizacja ............................................................................................................. 449
Samodzielne ledzenie zmian ................................................................................. 449
Replikacja scalana .................................................................................................. 450
Sync Services 1.0 ................................................................................................... 450
Synchronizacja z wykorzystaniem mechanizmu ledzenia zmian .......................... 454

Skorowidz .................................................................................... 461

Rozdzia 7.

Bezpieczestwo
Bezpieczestwo serwera SQL zaley w tym samym stopniu od administratorw co od
programistw baz danych, a wic ten rozdzia rwnie dobrze mgby by pierwszym
rozdziaem drugiej czci ksiki. O jego lokalizacji zadecydowao to, e dwa najwaniejsze nowe zabezpieczenia serwera SQL 2008 przeznaczone s dla administratorw.
W biecym rozdziale przedstawilimy, oprcz mechanizmw szyfrowania baz danych
TDE (ang. Transparent Data Encryption) i monitorowania wszystkich zdarze (ang.
All Action Audit), model bezpieczestwa serwera SQL i jego funkcje kryptograficzne.

Model bezpieczestwa
serwera SQL 2008
Serwer SQL 2008 bdzie co najwyej tak bezpieczny jak system operacyjny, w rodowisku ktrego dziaa. Jeeli uruchomione na nim bd niepotrzebne usugi czy pochodzce z niezaufanych rde programy, a dostp do komputera (zarwno lokalny, jak
i sieciowy) nie zostanie ograniczony, zabezpieczenia na poziomie serwera SQL bd nieskuteczne. Cho serwer SQL 2008 umoliwia skuteczne zabezpieczenie baz danych,
to jest cile zintegrowany z systemem Windows (rysunek 7.1).
Pierwsza kolumna zawiera reprezentujce uytkownikw principia. Ich cech wspln
jest moliwo potwierdzania swojej tosamoci serwer SQL 2008 nie pozwala
na nawizywanie anonimowych sesji klienckich. Principia wystpuj na trzech poziomach:
1. Na poziomie systemu operacyjnego dysponujemy kontami uytkownikw

i grupami uytkownikw systemu Windows. Chocia serwer SQL 2008


moe uwierzytelnia uytkownikw lokalnego systemu Windows,
zosta zaprojektowany z myl o kontach domenowych.

Cz I Administracja

266
Rysunek 7.1.
Rozbudowany model
bezpieczestwa
serwera SQL 2008

2. Na poziomie instancji serwera SQL mamy do dyspozycji loginy,

stae role serwera i dodatkowe powiadczenia. Pozwalaj one uwierzytelnia


uytkownikw (rwnie niemajcych kont w systemie Windows), czy ich
w role i nadawa uprawnienia do zewntrznych zasobw, np. plikw.
3. Na poziomie bazy danych dysponujemy kontami uytkownikw i rolami baz

danych. Su one do nadawania uprawnie w wybranej bazie danych, a jeden


login serwera moe by poczony z kontami uytkownikw w wielu bazach1.
Uytkownik, ktry uwierzytelni si na podstawie loginu niepowizanego
w danej bazie z adnym kontem uytkownika, uzyska do niej dostp,
tylko jeeli wczone jest w niej konto gocia.
W trzeciej kolumnie pokazana zostaa hierarchia obiektw, do ktrych dostp kontroluj listy ACL (ang. Access Control List). W wikszoci przypadkw obiekty podrzdne dziedzicz uprawnienia po obiektach nadrzdnych:
1. Zagadnienie zabezpieczenia obiektw systemu Windows, takich jak pliki

baz danych czy klucze rejestru, wykracza poza zakres ksiki.


2. Na poziomie instancji serwera SQL znajduj si m.in. loginy, role serwera,

urzdzenia kopii zapasowych, wyzwalacze DDL i logowania, gwny klucz


usugi SMK oraz powizane serwery. Poniewa loginy s zarwno principiami,
jak i obiektami, moemy nadawa uprawnienia do loginw, np. pozwoli
wskazanym osobom na ich blokowanie czy zmienianie hase.
3. Na poziomie bazy danych znajduj si schematy, typy danych,

konta uytkownikw, role bazy danych (do ktrych domylnie nale niektre
loginy i role serwera), certyfikaty, klucze kryptograficzne, wyzwalacze DDL,
biblioteki kodu zarzdzanego i schematy XML.
4. Na poziomie schematw znajduj si pozostae obiekty bazodanowe,

w tym tabele, widoki, procedury, funkcje uytkownika, wyzwalacze DML,


synonimy i kolejki usugi Service Broker.
1

Domylnie nazwa konta uytkownika jest taka sama jak nazwa loginu.

Rozdzia 7. Bezpieczestwo

267

Pomidzy principiami a obiektami znajduj si uprawnienia, ktre mog by nadane


principiom do obiektw (ang. grant), jawnie odebrane (ang. deny) lub nieokrelone
(ang. revoke). Serwer SQL autoryzuje wszystkie operacje uytkownikw, a wic przed
ich wykonaniem sprawdza, czy dane principia maj wystarczajce do ich wykonania
uprawnienia jeeli autoryzacje si nie powiod, operacje zostaj przerwane.
eby efektywnie zarzdza uprawnieniami, nie nadaje si ich poszczeglnym uytkownikom, a caym rolom. Poniewa uprawnienia si kumuluj, principium nalece do
dwch rl bdzie miao uprawnienia ich obu. Wyjtkiem od tej reguy jest jawne odebranie uprawnienia w takim przypadku principium nie wykona zabronionej operacji
niezalenie od tego, jakie uprawnienia maj nadane role, do ktrych naley.

Uwierzytelnianie
Kady uytkownik, zanim nawie sesj z serwerem, musi by uwierzytelniony. Tosamo uytkownikw moe by potwierdzana przez:
1. System operacyjny (tryb Windows Authentication). Zdecydowanie

bezpieczniejszy i jeli uytkownicy serwera SQL maj konta w domenie AD,


pozwalajcy niewielkim nakadem pracy uzyska funkcjonalny model
zarzdzania uytkownikami. W tym trybie serwer SQL w ogle nie sprawdza
tosamoci uytkownikw, w peni ufajc systemowi Windows. Tryb Windows
jest trybem domylnym, co oznacza, e chocia mona tworzy loginy SQL,
to prba zalogowania si za ich pomoc do serwera, nawet po podaniu
prawidowego hasa, skoczy si bdem.
2. Serwer SQL (tryb SQL Server and Windows Authentication) w tym

trybie moliwe jest uwierzytelnianie na podstawie konta systemu Windows


i utworzonego dla niego loginu oraz poprzez podanie loginu SQL i hasa.
Podane przez uytkownika login i haso s przed wysaniem do serwera SQL
szyfrowane jego certyfikatem, a nastpnie porwnywane z zapisanymi w bazie
master loginami i skrtami hase.
W trybie Windows to, jaki zostanie uyty protok uwierzytelniania (Kerberos czy
NTLM), zaley od konfiguracji systemu Windows, serwera SQL lub aplikacji
klienckiej. eby serwer SQL mg uy znacznie bezpieczniejszego protokou Kerberos:
1. Serwer SQL i komputer kliencki musz znajdowa si w tej samej domenie

lub zaufanych domenach.


2. Administrator musi zarejestrowa w domenie nazw SPN serwera SQL 20082

albo programista musi wskaza w aplikacji klienckiej odpowiednie konto


systemowe. Wymaga to uycia w cigu poczenia nazwy UPN (ang. Unviersal
Principal Name), np. w formacie nazwa domeny\konto serwera SQL.

Jeeli serwer dziaa z uprawnieniami konta Local System, rejestracja bdzie przeprowadzona
automatycznie, w innym przypadku naley skorzysta z wchodzcego w skad pakietu Resource Kit
narzdzia SetSPN.

Cz I Administracja

268

Serwer SQL 2008 moe uywa protokou Kerberos z wszystkimi protokoami sieciowymi. W poprzednich wersjach Kerberos dziaa wycznie z protokoem TCP/IP.

eby zmieni tryb uwierzytelniania:


1. Pocz si za pomoc konsoli MSSM z serwerem SQL jako jego administrator.
2. W oknie eksploratora obiektw kliknij nazw serwera prawym przyciskiem

myszy i z menu kontekstowego wybierz Properties.


3. Przejd na zakadk Security i wybierz pole wyboru SQL Server and Windows

Authentication Mode.
4. Kliknij OK i uruchom ponownie serwer (mona to zrobi, klikajc jego nazw

prawym przyciskiem myszy i wybierajc zadanie Restart).

Loginy
Tworzc login, moemy wskaza domyln baz danych z t baz uytkownik
poczy si automatycznie (o ile bdzie w niej mia konto) oraz domylny jzyk.
Zmiana jzyka ma sens tylko wtedy, kiedy planujemy przetumaczy na ten jzyk systemowe komunikaty bdw. W takim przypadku uytkownik po wystpieniu bdu
zobaczy jego przetumaczon wersj. Login moemy utworzy dla:
1. osoby, ktra nie ma konta w systemie Windows;
2. pojedynczego konta uytkownika systemu Windows;
3. grupy uytkownikw systemu Windows.

Szczeglnie wygodna i funkcjonalna jest trzecia opcja. Po utworzeniu loginw dla


grupy uytkownikw osoba, ktra zmieni stanowisko i tym samym czonkowstwo w grupach Windows, automatycznie bdzie miaa zmienione uprawnienia
w serwerze SQL.
Zarzdza loginami, w tym zakada nowe, zmienia hasa, przypisywa je do rl serwera oraz czy z kontami uytkownikw baz danych moemy za pomoc konsoli
SSMS po rozwiniciu sekcji Security/Logins w oknie eksploratora obiektw wywietlone zostan wszystkie loginy. Klikajc dowolny z nich prawym przyciskiem myszy,
wywietlimy menu kontekstowe pozwalajce m.in. pokaza okno szczegw wybranego loginu.
Wykonujc ponisz instrukcj, utworzymy nowy login SQL:
CREATE LOGIN Szelor
WITH PASSWORD= 'CoZ@Dzien!' , DEFAULT_DATABASE=AdventureWorks2008, CHECK_EXPIRATION=ON,
CHECK_POLICY=ON;

Rozdzia 7. Bezpieczestwo

269

Zasady konta
Powszechnie uywane do konfigurowania systemw Windows zasady grupy (ang. Group
Policy) zawieraj m.in. zasady hase i zasady blokady konta. Jeeli serwer SQL 2008
dziaa w rodowisku systemw Windows Server 2003, Windows Vista lub pniejszych, to obowizujce na tym komputerze zasady konta bd mogy by rwnie
stosowane do loginw SQL3.
Zasady konta podzielone s na dwie grupy.
1. Zasady hase, w ramach ktrych naley:
a) Wczy regu Haso musi spenia wymagania co do zoonoci.
b) Okreli maksymalny okres wanoci hasa, czyli liczb dni, po ktrych

bdzie ono musiao by zmienione; hasa powinny by zmieniane nie rzadziej


ni co trzy miesice.
c) Okreli minimalny, nawet jednodniowy okres wanoci hasa; w ten

sposb uniemoliwimy uytkownikom szybk zmian hasa tyle razy,


eby z powrotem mogli uywa poprzedniego.
d) Wymusi tworzenie dugiej, liczcej nawet 20 pozycji historii hase

ta zasada w poczeniu z poprzedni zmusi uytkownikw do faktycznego


zmieniania hase.
2. Zasady blokady konta, w ramach ktrych naley:
a) Okreli przynajmniej kilkunastominutowy czas, na ktry konto zostanie

automatycznie zablokowane.
b) Ustawi wysoki prg blokady konta; ryzyko, e zoone haso zostanie

odgadnite w piciu i w pitnastu prbach, jest praktycznie takie samo


ustawiajc zbyt niski prg blokady, tylko utrudnimy sobie prac.
Zablokowane loginy mona odblokowa za pomoc instrukcji ALTER LOGIN UNLOCK.

Autoryzacja
Uwierzytelniony podczas poczenia z serwerem SQL uytkownik moe wykona na
nim tylko te operacje, do ktrych zostay mu nadane uprawnienia. Uprawnienia dziel
si na nadawane do konkretnych obiektw (np. uprawnienie do odczytywania danych
z tabeli Person.Person) oraz prawa do wykonywania wskazanych instrukcji (np. prawo
do tworzenia kopii zapasowych). Biorc pod uwag liczb obiektw bazodanowych
i kont uytkownikw, zarzdzanie uprawnieniami na poziomie poszczeglnych kont
uytkownikw jest nieefektywne i niebezpieczne administrator nie bdzie w stanie
3

Wyczy stosowanie zasad konta moemy za pomoc klauzul CHECK_EXPIRATION i CHECK_POLICY


instrukcji ALTER LOGIN.

Cz I Administracja

270

na bieco nadawa i odbiera uprawnie i w kocu przyzna wszystkim uytkownikom pene uprawnienia. Rozwizanie tego problemu polega na wykorzystaniu hierarchii obiektw oraz rl serwera i baz danych.

Role serwera
Tworzenie, usuwanie lub zmiana uprawnie rl serwera s niemoliwe. Moemy jedynie do tych rl dodawa lub usuwa loginy i w ten sposb uproci nadawanie uprawnie na poziomie serwera SQL. Warto si zastanowi, zanim dodamy jaki login do
uprzywilejowanej grupy w serwerze SQL 2008 obowizuje zasada, e principium
nalece do jakiej roli moe dopisa do niej kolejne osoby. List predefiniowanych
rl serwera zwraca procedura sp_helpsrvrole, list uprawnie kadej z rl procedura
sp_srvrolepermission:
1. bulkadmin czonkowie tej roli mog wykonywa instrukcj BULK INSERT.
2. dbcreator czonkowie tej roli mog tworzy, usuwa, modyfikowa

i odtwarza kopie baz danych.


3. diskadmin czonkowie tej roli mog konfigurowa pliki baz danych.
4. processadmin czonkowie tej roli mog przerwa (wykonujc instrukcj
KILL) sesj dowolnego uytkownika serwera.
5. public do tej roli automatycznie nale wszyscy uytkownicy serwera;
rola public jest powizana z kontem gocia w kadej bazie danych.
6. securityadmin czonkowie tej roli mog zarzdza loginami (w tym

resetowa hasa) oraz uprawnieniami na poziomie serwera i baz danych.


7. serveradmin czonkowie tej roli mog konfigurowa, uruchamia

i zatrzymywa serwer SQL.


8. setupadmin czonkowie tej roli mog dodawa, zmienia i usuwa

powizane serwery.
9. sysadmin czonkowie tej roli mog wykonywa dowolne operacje.

Domylnie do tej roli nale:


a) login sa,
b) wbudowana grupa Windows BUILTIN\Administrators.

Do rl serwera mona dodawa loginy lub usuwa je z nich z poziomu konsoli SSMS,
poprzez okno waciwoci loginu albo okno waciwoci roli serwera.

Dodatkowe powiadczenia
Dodatkowymi powiadczeniami tosamoci mog si posuy osoby niemajce kont
w systemie Windows, eby uzyska dostp do zasobw systemowych. Na przykad,
jeeli osoba uwierzytelniona na podstawie loginu SQL chce wykona procedur, ktra
odczytuje pliki z dysku NTFS, serwer SQL wykona t operacje z uprawnieniami wskazanego uytkownika systemu Windows. Konfigurujc dodatkowe powiadczenia, naley:

Rozdzia 7. Bezpieczestwo

271

1. Utworzy konto w domenie i nada mu odpowiednie uprawnienie

(np. uprawnienie do odczytu z danego folderu4).

2. Doda powiadczenie, wskazujc utworzone wczeniej konto i chronice

je haso5:

CREATE CREDENTIAL AlterEgo


WITH IDENTITY = 'KATMAI\SqlCred',
SECRET = 'BezpIecznEH@sl0jESTDl*^%ie';

3. Powiza utworzony wczeniej login z dodatkowym powiadczeniem (z jednym

powiadczeniem mona powiza wiele loginw, ale ten sam login moe by
powizany tylko z jednym powiadczeniem):
ALTER LOGIN Szelor
WITH CREDENTIAL = AlterEgo;

Konta uytkownikw
czc si z serwerem SQL, nawizujemy sesj z baz danych domylnie jest to
systemowa baza master, ale docelow baz mona wskaza w zakadce Connection
Properties okienka logowania konsoli SSMS lub zdefiniowa j jako waciwo loginu6. Jeeli w docelowej bazie danych nie bdzie powizanego z loginem konta uytkownika, poczymy si z ni jako go (konto gocia jest odblokowane w systemowych
bazach danych) albo zgoszony zostanie bd 4064: Cannot open user default database.
Login failed.
Tworzc konto uytkownika, czy to za pomoc konsoli SSMS, czy wykonujc instrukcj
CREATE USER, naley wskaza login lub certyfikat, z ktrym zostanie ono powizane:
USE AdventureWorks2008
CREATE USER Szelor
FOR LOGIN Szelor;

Wywoujc funkcj USER_NAME(), moemy sprawdzi nazw uytkownika, pod ktr


jestemy poczeni z baz danych:
USE master
SELECT USER_NAME();
USE AdventureWorks2008
SELECT USER_NAME();
---------------------------------------guest
Szelor

Haso tego konta nie powinno wygasa i nie moe wymaga zmiany przy pierwszym logowaniu.

Jeeli podamy bdne haso, powiadczenie zostanie utworzone, ale prba posuenia si nim skoczy
si bdem.

Wybranie dla loginu domylnej bazy danych nie tworzy w niej powizanego z nim konta uytkownika.

Cz I Administracja

272

Role bazy danych


Kada baza danych zawiera nastpujce predefiniowane, niemoliwe do usunicia oraz
skonfigurowania role:
1. db_accessadmin jej czonkowie mog kontrolowa dostp innych

uytkownikw do bazy danych.


2. db_backupoperator nalecy do niej uytkownicy mog tworzy kopie

zapasowe.
3. db_datareader jej czonkowie mog odczytywa zawarto tabel bazy

danych, z wyjtkiem tabel systemowych.


4. db_datawriter jej czonkowie mog modyfikowa, usuwa i dodawa dane

do tabel bazy danych, z wyjtkiem tabel systemowych.


5. db_ddladmin jej czonkowie mog wykonywa wszystkie instrukcje DDL.
6. db_denydatareader jej czonkowie nie mog odczytywa zawartoci tabel

bazy danych.
7. db_denydatawriter nalecy do niej uytkownicy nie mog modyfikowa,

usuwa i dodawa danych.


8. db_owner jej czonkowie mog przeprowadza dowolne zmiany w bazie

danych, nawet j usun.


9. db_securityadmin jej czonkowie mog kontrolowa czonkostwo

w innych rolach i zarzdza uprawnieniami uytkownikw.


10. public do tej roli automatycznie nale wszyscy uytkownicy bazy.

W przeciwiestwie do rl serwera, moliwe jest tworzenie wasnych rl bazy danych. Najczciej role bazy danych tworzy si, jeeli uywane s loginy SQL taki
login reprezentuje jednego uytkownika, natomiast login Windows moe reprezentowa ca grup uytkownikw. Dodatkowe role bazy danych pocztkowo nie maj
nadanych adnych uprawnie, a wic zapisanie do nich uytkownikw nie ma wpywu
na bezpieczestwo serwera.
W bazach danych moemy te tworzy role aplikacyjne specjalny typ rl bazy danych,
ktre musz by programowo wczone. Niemoliwe jest przypisanie kont uytkownikw do roli aplikacyjnej. Natomiast po ich wczeniu poprzez podanie nazwy i hasa
uytkownik traci wszystkie posiadane uprawnienia, zyskujc w zamian uprawnienia nadane roli aplikacyjnej.
Role aplikacyjne su do identyfikacji programw klienckich (i przez nie powinny
by wczane), a nie uytkownikw. Jeeli uytkownicy nie bd mieli nadanych uprawnie do wykonywania operacji (np. do odczytywania danych z tabeli), a wymagane
uprawnienia bdzie miaa tylko rola aplikacyjna, wymusimy na uytkownikach korzystanie wycznie z okrelonego programu. Pokazuje to poniszy przykad:

Rozdzia 7. Bezpieczestwo

273

1. Utworzymy w bazie AdventureWorks2008 rol aplikacyjn:


USE AdventureWorks2008
CREATE APPLICATION ROLE testAppR
WITH DEFAULT_SCHEMA = HumanResources , PASSWORD = N'Hasl0DoZ@szyciaWaplikacji!';

2. Nastpnie nadamy tej roli uprawnienie do odczytywania danych ze schematu


HumanResources:
GRANT SELECT ON SCHEMA::HumanResources TO testAppR;

3. I sprbujemy odczyta dane ze znajdujcej si w tym schemacie tabeli


Department:
a) Najpierw jako uytkownik Szelor (to konto dopiero co zaoylimy, a wic
nie ma ono adnych uprawnie, z wyjtkiem uprawnie roli public):
EXECUTE AS USER = 'Szelor';
SELECT TOP 1 *
FROM HumanResources.Department;
---------------------------------------Msg 229, Level 14, State 5, Line 2
The SELECT permission was denied on the object 'Department', database
'AdventureWorks2008', schema 'HumanResources'.

b) A nastpnie jako czonek wczonej na czas wykonywania zapytania roli

aplikacyjnej:
DECLARE @cookie varbinary(8000);
EXEC sp_setapprole N'testAppR',N'Hasl0DoZ@szyciaWaplikacji!', @fCreateCookie
= true, @cookie = @cookie OUTPUT;
SELECT TOP 1 *
FROM HumanResources.Department;
EXEC sp_unsetapprole @cookie;
REVERT;
---------------------------------------1 Engineering
Research and Development

1998-06-01 00:00:00.000

Uprawnienia
Lista wszystkich moliwych do nadania lub odebrania uprawnie liczy prawie 200 pozycji. Wywietli j moemy, wykonujc ponisze zapytanie:
SELECT *
FROM fn_builtin_permissions(default);

Na specjaln uwag zasuguje uprawnienie CONTROL oznacza ono wszystkie moliwe dla danego obiektu uprawnienia. Innymi sowy, nadajc komu uprawnienie
CONTROL do tabeli, pozwalamy mu na wykonanie na tej tabeli dowolnych operacji,
w tym odczytywania i modyfikowania zawartoci tabeli czy jej usunicia.

Uprawnienie moe by: nadane, nadane z moliwoci przekazania, odebrane lub nieustalone. Zarzdza uprawnieniami moemy poprzez okno waciwoci obiektu, okno
waciwoci principium lub wykonujc instrukcje GRANT, DENY i REVOKE (rysunek 7.2).

Cz I Administracja

274

Rysunek 7.2. Zakadka Effective zawiera efektywne uprawnienia wybranego principium do obiektu
poniewa uprawnienia mog wynika z czonkostwa w rnych rolach, a niektre z nich
(np. uprawnienie CONTROL) s w rzeczywistoci grupami uprawnie, znacznie uatwia ona ocen
uprawnie uytkownikw
Brak uprawnienia, tak samo jak jego odebranie, oznacza, e uytkownik nie bdzie
mg wykona danej operacji. Rnica polega na tym, e brakujce uprawnienie
moe by odziedziczone (np. jeeli zostao nadane roli, do ktrej naley uytkownik),
natomiast odebranie uytkownikowi uprawnienia oznacza, e nie wykona on danej
operacji, niezalenie od rl, do ktrych naley.

Schematy
Schematy to nie tylko przestrzenie nazewnicze. Schematy s obiektami, ktre zawieraj obiekty innych typw (takie jak tabele lub procedury), i do nich take moemy
nadawa uprawnienia. W ten sposb znacznie uprocimy czynnoci administracyjne
zamiast zezwala uytkownikom na odczyt danych z poszczeglnych tabel, moemy
zezwoli im na odczyt danych z caego schematu. Pokazuje to poniszy przykad:
1. Nadajmy uytkownikowi Szelor uprawnienie do odczytu i wstawiania wierszy
do caego schematu HumanResources:
GRANT SELECT, INSERT
ON SCHEMA ::HumanResources
TO Szelor;

Rozdzia 7. Bezpieczestwo

275

2. Odbierzmy mu jednak uprawnienie do odczytu jednego z widokw tego

schematu:
DENY SELECT
ON HumanResources.vJobCandidate
TO Szelor;

3. Sprawdmy, czy ten uytkownik bdzie mg odczyta dane z jednej z tabel


schematu HumanResources:
EXECUTE AS USER = 'Szelor'
SELECT TOP 1 *
FROM HumanResources.Shift;---------------------------------------1 Day
07:00:00.0000000
15:00:00.0000000
1998-06-01 00:00:00.000

4. Oraz czy uda mu si odczyta dane poprzez widok vJobCandidate:


SELECT TOP 1 *
FROM HumanResources.vJobCandidate;
REVERT;
---------------------------------------Msg 229, Level 14, State 5, Line 1
The SELECT permission was denied on the object 'vJobCandidate', database
'AdventureWorks2008', schema 'HumanResources'.

Odwoujc si do obiektw bazodanowych, naley zawsze poprzedza ich nazw


nazw schematu, w ktrym dany obiekt si znajduje.

Zmiana kontekstu wykonania instrukcji i acuchy wasnoci


Domylnie wszystkie instrukcje wykonywane s przez serwer SQL 2008 z uprawnieniami wywoujcego je uytkownika. Mona jednak to zmieni w kilku poprzednich przykadach kontekst wykonania instrukcji by zmieniany za pomoc instrukcji
EXECUTE AS. W podobny sposb mona te zmieni kontekst wykonania moduu kodu
(np. procedury skadowanej). Takie rozwizanie utrudnia jednak monitorowanie aktywnoci uytkownikw i moe umoliwi atak poszerzenia uprawnie7.
Procedura skadowana moe by wykonana z uprawnieniami:
1. Uytkownika, ktry j uruchomi (domylna warto CALLER).
2. Uytkownika, ktry j utworzy lub jako ostatni zmodyfikowa
(EXECUTE AS SELF).
3. Uytkownika, ktry jest jej wacicielem (EXECUTE AS OWNER).
4. Wskazanego uytkownika (EXECUTE AS nazwa uytkownika).

Obu tych wad pozbawione jest alternatywne, przedstawione w dalszej czci rozdziau rozwizanie
polegajce na cyfrowym podpisywaniu moduw kodu.

Cz I Administracja

276

Pokazuje to poniszy przykad:


1. Po utworzeniu procedury nadajemy uytkownikowi Szelor uprawnienie

do jej wykonania:
CREATE PROCEDURE Person.GetAddress
AS
SELECT TOP 1 *
FROM Person.Address;
GO
GRANT EXECUTE ON Person.GetAddress
TO Szelor;

2. Jeeli uytkownik Szelor sprbuje bezporednio odwoa si do tabeli


Person.GetAddress, serwer SQL zgosi bd:
EXECUTE AS LOGIN ='Szelor';
SELECT TOP 1 *
FROM Person.Address;
---------------------------------------Msg 229, Level 14, State 5, Line 1
The SELECT permission was denied on the object 'Address', database
'AdventureWorks2008', schema 'Person'.

3. Jeeli jednak odczyta on te same dane poprzez procedur, serwer SQL

nie zgosi bdu:


EXEC Person.GetAddress;
REVERT;
---------------------------------------1 1970 Napa Ct. NULL
Bothell
79

98011

Zadziaa tu mechanizm acuchw wasnoci obiektw jeeli obiekt, do ktrego


bezporednio odwouje si uytkownik (procedura GetAddress), jest wasnoci tego
samego uytkownika (dbo) co obiekty, do ktrych on si odwouje (tabela Address),
serwer SQL sprawdza jedynie uprawnienia uytkownika do bezporednio wywoanego przez niego obiektu. Rozwizanie to pozwala odebra wszystkim uytkownikom uprawnienia do tabel i udostpni im je poprzez widoki, funkcje i procedury
skadowane.
acuchy wasnoci dotycz jednak wycznie instrukcji SELECT, INSERT, UPDATE i DELETE
wykonywanych w ramach jednej bazy danych. Dlatego prba wykonania przez uytkownika Szelor procedury obcinajcej tabel skoczy si niepowodzeniem:
SELECT *
INTO Tab
FROM Person.Address;
GO
CREATE PROCEDURE Person.TrunTab
AS
TRUNCATE TABLE Tab;
GO

Rozdzia 7. Bezpieczestwo

277

GRANT EXECUTE ON Person.TrunTab


TO Szelor;
GO
EXECUTE AS USER ='Szelor';
EXEC Person.TrunTab;
---------------------------------------Msg 1088, Level 16, State 7, Procedure TrunTab, Line 3
Cannot find the object "Tab" because it does not exist or you do not have permissions.

Jeeli jednak procedura bdzie wykonywana w kontekcie uytkownika Admin, a nie


uytkownika, ktry j wywoa, a uytkownik Szelor bdzie mia prawo do posugiwania si tosamoci uytkownika dbo, zostanie ona wykonana poprawnie:
REVERT;
CREATE LOGIN Admin
WITH PASSWORD='Raz2Trzy!';
GO
CREATE USER Admin
FOR LOGIN Admin;
GO
EXEC sp_addrolemember 'db_owner', 'Admin';
GO
ALTER PROCEDURE Person.TrunTab
WITH EXECUTE AS 'Admin'
AS
TRUNCATE TABLE Tab;
GO
GRANT EXECUTE ON Person.TrunTab
TO Szelor;
GRANT IMPERSONATE ON USER::dbo
TO Szelor;
GO
EXECUTE AS USER ='Szelor';
EXEC Person.TrunTab;
---------------------------------------Command(s) completed successfully.

Kryptografia
Serwer SQL 2008 umoliwia szyfrowanie oraz cyfrowe podpisywanie danych i moduw kodu, jednoczenie zarzdza kluczami w taki sposb, e operacje kryptograficzne
mog by wykonywane automatycznie, bez wiedzy uytkownikw. Edycja Enterprise
dodatkowo pozwala na zaszyfrowanie caych baz danych w sposb niewidoczny
nie tylko dla ich uytkownikw, ale rwnie niewymagajcy adnych zmian aplikacji klienckich.

Cz I Administracja

278

Dostawcy usug kryptograficznych


Serwer SQL 2008 korzysta z algorytmw kryptograficznych udostpnianych przez
system operacyjny, w ktrym dziaa8. Poniewa w systemach Windows dostawcy usug
kryptograficznych mog by dodawani lub usuwani przez administratora, lista dostpnych algorytmw zaley od wersji systemu operacyjnego i jego konfiguracji.

Algorytmy symetryczne
Algorytmy tego typu albo uywaj tego samego klucza do szyfrowania i deszyfrowania wiadomoci, albo klucz deszyfrujcy mona bezporednio wyprowadzi z klucza
szyfrujcego. Gwn zalet algorytmw symetrycznych jest ich szybko s one
kilka tysicy razy szybsze od algorytmw asymetrycznych.
Natomiast ich podstawow wad jest konieczno udostpnienia wszystkim uytkownikom systemu odpowiednich kluczy. Dlatego algorytmy symetryczne powinny by
uywane do szyfrowania danych, a ich klucze powinny by szyfrowane algorytmami asymetrycznymi. W ten sposb poczymy zalety obu typw algorytmw kluczami asymetrycznymi zaszyfrujemy niewielkie klucze symetryczne, a te z kolei bd
uywane do wydajnego szyfrowania duych iloci danych.
Najbezpieczniejszym i zalecanym algorytmem symetrycznym jest AES9 (ang. Advanced Encryption Standard). Serwer SQL 2008 pozwala na stosowanie kluczy o dugociach 256, 196 lub 128 bitw. Wydajno algorytmu AES zmniejsza si wraz ze wzrostem dugoci klucza i dla kluczy 256- jest okoo 20% nisza ni dla kluczy 128-bitowych.
Nie naley uywa algorytmu RC4. RC4 jest szyfrem strumieniowym, w ktrym bezpieczestwo szyfrogramw zaley od waciwego zarzdzania kluczami, szczeglnie
10
na niedopuszczeniu do ponownego uycia tego samego klucza . W przeciwnym razie
atakujcy, wykonujc operacj XOR na dwch rnych szyfrogramach, ktre zostay
zaszyfrowane tym samym kluczem, uzyska informacje umoliwiajce mu zamanie
szyfrogramw, a nawet poznanie samego klucza. Implementacja RC4 w serwerze
SQL 2008 wielokrotnie uywa tego samego klucza.

Tylko edycja Enterprise umoliwia rejestrowanie dodatkowych dostawcw usug kryptograficznych,


co zostao przedstawione w dalszej czci rozdziau.

Algorytm AES jest niedostpny w systemach Windows XP. W ich przypadku pozostaje nam stosowanie
algorytmu 3DES.

10

W przypadku algorytmw blokowych, ktre dziaaj w jakim trybie szyfru blokowego (w serwerze
SQL 2005 uywany jest tryb acuchowego szyfru blokowego CBC, w ktrym kady blok tekstu
jawnego przed zaszyfrowaniem jest przeksztacany funkcj XOR z szyfrogramem uzyskanym poprzez
zaszyfrowanie poprzedniego bloku wiadomoci), niewaciwe zarzdzanie kluczami jest mniej
niebezpieczne.

Rozdzia 7. Bezpieczestwo

279

Algorytmy asymetryczne
Jedyny dostpny w serwerze SQL 2008 algorytm asymetryczny (czyli taki, w ktrym
do szyfrowania danych uywa si innego klucza ni do ich odszyfrowania), RSA, zosta
opracowany przez Rivesta, Shamira i Adlemana w 1968 jest to pierwszy i do dzi
najpopularniejszy algorytm asymetryczny. W przeciwiestwie do szyfrw asymetrycznych, ktrych dziaanie polega na powtarzaniu dwch podstawowych w szyfrowaniu
operacji mieszania i przestawiania bitw, algorytm RSA wykorzystuje faktoryzacj
duych liczb pierwszych, czyli funkcj, dla ktrej nie znamy efektywnej metody odwrcenia kierunku oblicze.
Serwer SQL 2008 pozwala na stosowanie kluczy o dugociach 512, 1024 i 2048 bitw.
Poniewa szyfrogram RSA 512 mona zama na domowym komputerze w cigu kilku
godzin, a szyfrogram 1024-bitowy prawdopodobnie zostanie zamany w cigu kilku lat,
naley uywa kluczy o dugoci 2048 bitw.
Wielko liczb i natura oblicze powoduj, e algorytm RSA jest tysice razy wolniejszy od dowolnego algorytmu symetrycznego. Oznacza to, e jeeli zaszyfrowanie
pewnych danych algorytmem AES trwao kilka sekund, to zaszyfrowanie tych samych
danych algorytmem RSA zajoby kilka godzin.

Algorytmy mieszania
Funkcje mieszania (ang. hash) s funkcjami jednokierunkowymi, zwracajcymi wyniki
o tej samej, niezalenej od rozmiaru danych wejciowych, dugoci. Jedynym sposobem
na odtworzenie oryginalnych danych na podstawie znanego wyniku funkcji mieszania
jest wyliczenie jej dla wszystkich moliwych danych. Jeeli uzyskamy taki sam wynik,
oryginalne dane prawie na pewno te bd takie same11.
Funkcje mieszania nie umoliwiaj szyfrowania danych, ale doskonale nadaj si
do sprawdzania, czy nie zostay one zmodyfikowane. W tym celu wystarczy zapisa
sygnatur oryginalnych danych, a nastpnie podczas ich odczytywania raz jeszcze
przeprowadzi te same obliczenia i porwna obie sygnatury. Jeeli bd identyczne,
to znaczy, e dane nie zostay zmodyfikowane.

Niestety, adna z uywanych obecnie funkcji mieszania nie gwarantuje bezpieczestwa.


Wzgldnie najbezpieczniejsz z dostpnych w serwerze SQL 2008 funkcji jest SHA-1.

11

Kryptograficzne funkcje mieszania powinny cechowa: maksymalna losowo wyniku, minimalna


szansa zwrcenia tego samego wyniku dla rnych wiadomoci i maksymalne zrnicowanie wyniku
dla niewielkich zmian wiadomoci.

Cz I Administracja

280

Hierarchia kluczy
Serwer SQL 2008 umoliwia automatyczne zarzdzanie kluczami w taki sposb, e uytkownicy mog szyfrowa i deszyfrowa dane bez podawania dodatkowych kluczy czy
chronicych je hase. Jednoczenie poziom bezpieczestwa szyfrogramw pozostaje
niezmieniony, tj. tylko administratorzy systemu i serwera SQL mog je odszyfrowa
(rysunek 7.3).
Rysunek 7.3.
Hierarchia kluczy
kryptograficznych
z zaznaczonymi
pogrubion czcionk
kluczami szyfrowania
baz danych DEK
(ang. Database
Encryption Key)

Gwny klucz usugi


Podczas instalowania serwera SQL 2008 generowany jest gwny klucz usugi SMK
(ang. Service Master Key), ktry po zaszyfrowaniu algorytmem 3DES zapisywany jest
w bazie master. Klucz SMK jest zaszyfrowany algorytmem 3DES i chroniony przez
DPAPI (ang. Data Protection Application Programming Interface) systemu Windows.
Klucz pozwalajcy odszyfrowa klucz SMK jest chroniony przez podsystem Windows
DPAPI (ang. Data Protection API): jedna jego kopia zapisywana jest w magazynie
komputera, a druga w magazynie uytkownika, z uprawnieniami ktrego dziaa
usuga serwera SQL. Dziki czemu klucz SMK moe by automatycznie odszyfrowany, ale tylko w rodowisku oryginalnego systemu operacyjnego jeeli np. kto
sprbuje podczy dysk z zainstalowanym serwerem SQL 2008 do innego komputera, odszyfrowanie klucza SMK bdzie niemoliwe. Podczas kadego uruchomienia
serwera SQL 2008 sprawdzana jest poprawno obu zaszyfrowanych kopii klucza
i jeeli jedna z nich okae si niedostpna, zostanie odtworzona na podstawie drugiej,
poprawnej kopi.

Klucz SMK jest bezporednio lub porednio uywany do szyfrowania i odszyfrowywania wszystkich innych kluczy kryptograficznych. Chroni on gwne klucze
bazy danych DMK (ang. Database Master Key) oraz poufne dane serwera, takie jak
dodatkowe powiadczenia oraz hasa loginw do powizanych serwerw.

Rozdzia 7. Bezpieczestwo

281

Klucz SMK moe by wyeksportowany, a plik jego kopii powinien by przechowywany w bezpiecznym miejscu:
BACKUP SERVICE MASTER KEY TO FILE = 'h:\SMK.KEY'
ENCRYPTION BY PASSWORD = 'T0Hasl,.oMusi%$3BykjcNapraw890$#$deBe=-"zpiecz89nE!';

Moliwa jest rwnie zmiana klucza SMK. Operacja ta przebiega w trzech etapach
i jeeli dowolny etap zakoczy si bdem, caa procedura zostanie przerwana, a klucz
SMK niezmieniony:
1. Najpierw wygenerowany zostaje nowy klucz SMK.
2. Nastpnie odszyfrowane zostaj wszystkie dane zaszyfrowane poprzednim

kluczem SMK.
3. Na kocu te dane zostaj zaszyfrowane nowym kluczem SMK:
ALTER SERVICE MASTER KEY REGENERATE;

Kopi klucza SMK mona odtworzy, rwnie na innym serwerze SQL 2008, wykonujc instrukcj RESTORE:
RESTORE SERVICE MASTER KEY FROM FILE = 'h:\SMK.KEY'
DECRYPTION BY PASSWORD = 'T0Hasl,.oMusi%$3BykjcNapraw890$#$deBe=-"zpiecz89nE!';

Odtworzenie klucza przypomina jego zmian, jednak serwer SQL 2008 nie wygeneruje
nowego klucza SMK, ale odczyta go z pliku kopii. Nastpnie odszyfrowane zostan
wszystkie dane chronione starym kluczem SMK i ponownie zaszyfrowane odzyskanym kluczem.
W ostatecznoci moemy wymusi zmian klucza SMK, nawet jeeli niektre zaszyfrowane nim dane zostan w wyniku tej zmiany nieodwracalnie utracone. Opcja FORCE
moe by uyta zarwno przy zmianie, jak i odtworzeniu klucza SMK:
ALTER SERVICE MASTER KEY
FORCE REGENERATE;
-- lub
RESTORE SERVICE MASTER KEY
FROM FILE = 'h:\SMK.KEY'
DECRYPTION BY PASSWORD = 'T0Hasl,.oMusi%$3BykjcNapraw890$#$deBe=-"zpiecz89nE!'
FORCE;

Gwny klucz bazy danych


W kadej bazie danych administrator moe utworzy klucz DMK. Domylnie jedna
kopia tego klucza jest szyfrowana kluczem SMK i zapisywana w bazie master, a druga
podanym przy jego tworzeniu hasem i zapisywana w bazie, w ktrej klucz zosta
utworzony. Obie kopie klucza DMK szyfrowane s algorytmem 3DES:
CREATE DATABASE r07;
GO
USE r07;
GO
CREATE MASTER KEY
ENCRYPTION BY PASSWORD = 'ToPowinnoBycInnE,R0wnieSilneH@sl0!';

Cz I Administracja

282
SELECT name, algorithm_desc
FROM sys.symmetric_keys;
---------------------------------------##MS_DatabaseMasterKey##
TRIPLE_DES

Kluczem DMK szyfrowane s wystawiane w tej bazie danych klucze asymetryczne


oraz certyfikaty. Tak wic do odszyfrowania certyfikatu potrzebny jest klucz DMK,
do odszyfrowania ktrego potrzebny jest z kolei klucz SMK. Warto wic wyeksportowa klucz DMK do pliku i przechowywa go w bezpiecznym miejscu:
BACKUP MASTER KEY TO FILE = 'C:\TEMP\DBK.KEY'
ENCRYPTION BY PASSWORD = 'K09jRm,YsdeSiopEI00M+_IdfsSI43E';

Nie mona usun kopii klucza DMK chronionej podanym przy jego tworzeniu hasem. Mona natomiast skasowa kopi klucza DMK chronion kluczem SMK. Uniemoliwi to automatyczny dostp do klucza DMK i wszystkich zaszyfrowanych nim
kluczy. Jeeli administrator serwera SQL nie bdzie zna tego hasa, uniemoliwimy
mu posugiwanie si kluczami uytkownikw:
CREATE CERTIFICATE Cert1
WITH SUBJECT = 'Test odszyfrowania DBK przez SMK';
SELECT name, pvt_key_encryption_type_desc
FROM sys.certificates;
---------------------------------------Cert1
ENCRYPTED_BY_MASTER_KEY
ALTER MASTER KEY
DROP ENCRYPTION BY SERVICE MASTER KEY;
CREATE CERTIFICATE Cert2
WITH SUBJECT = 'Test odszyfrowania DBK przez SMK';
---------------------------------------Msg 15581, Level 16, State 3, Line 3
Please create a master key in the database or open the master key in the session
before performing this operation.

Od teraz uycie klucza DBK wymaga jego otwarcia przy uyciu hasa:
OPEN MASTER KEY DECRYPTION BY PASSWORD = 'ToPowinnoBycInnE,R0wnieSilneH@sl0!';
CREATE CERTIFICATE Cert2
WITH SUBJECT = 'Test odszyfrowania DBK przez SMK';
CLOSE MASTER KEY;
---------------------------------------Command(s) completed successfully.

Poniewa kada instancja serwera SQL 2008 ma niepowtarzalny klucz SMK,


przeniesienie bazy z jednego serwera na inny spowoduje, e klucz DBK tej bazy
nie bdzie mg by automatycznie odszyfrowany. eby przywrci automatyczne
zarzdzanie kluczami, naley samodzielnie odtworzy klucz DBK przeniesionej bazy
danych i utworzy jego kopi zaszyfrowan kluczem SMK nowego serwera:
OPEN MASTER KEY DECRYPTION BY PASSWORD = 'ToPowinnoBycInnE,R0wnieSilneH@sl0!';
ALTER MASTER KEY
ADD ENCRYPTION BY SERVICE MASTER KEY;
CLOSE MASTER KEY;

Rozdzia 7. Bezpieczestwo

283

Certyfikaty i klucze asymetryczne uytkownikw


Nastpne w hierarchii kluczy kryptograficznych s klucze RSA i certyfikaty uytkownikw. Serwer SQL 2008 uywa certyfikatw jedynie jako pojemnikw na klucze asymetryczne generowany przez niego klucz prywatny certyfikatu ma zawsze dugo
1024 bitw, a dugo importowanego klucza prywatnego musi by wiksza ni 384
i mniejsza ni 3456 bitw:
CREATE USER Szelor
FOR LOGIN Szelor;
CREATE CERTIFICATE Cert3
AUTHORIZATION Szelor
WITH SUBJECT = 'Certyfikat chronicy klucz symetryczny';
CREATE ASYMMETRIC KEY AKey1
WITH ALGORITHM = RSA_2048
ENCRYPTION BY PASSWORD = 'Wt0reK11:43';

Klucze symetryczne uytkownikw


Ostatnie w hierarchii kluczy kryptograficznych s klucze symetryczne uywane do szyfrowania i deszyfrowania danych. Chronic klucze symetryczne certyfikatami, ktre
z kolei s chronione kluczem DBK, uzyskamy atwy w zarzdzaniu i jednoczenie
wydajny, hybrydowy system kryptograficzny:
CREATE SYMMETRIC KEY SKey1
AUTHORIZATION Szelor
WITH ALGORITHM = AES_128
ENCRYPTION BY CERTIFICATE Cert3;

Przenoszenie kluczy uytkownikw


Decydujc si na uywanie funkcji kryptograficznych serwera SQL 2008, powinnimy
te zaplanowa archiwizacj i przenoszenie pomidzy bazami kluczy uytkownikw.
Umoliwi to m.in. korzystanie z testowych baz danych.
Klucze uytkownikw, tak jak klucz DMK, zapisywane s w tabelach systemowych
bazy danych, w ktrych zostay utworzone. Kopie zapasowe bazy bd wic zawieray wszystkie klucze jej uytkownikw. W celu umoliwienia uytkownikom normalnej
pracy z odtworzon na innym serwerze kopi bazy wystarczy odtworzenie na nim
gwnego klucza usugi serwera SQL.

Eksport i import certyfikatw


Certyfikaty oraz klucze prywatne mona wyeksportowa do plikw:
BACKUP CERTIFICATE Cert3
TO FILE = 'C:\TEMP\Cert3.cer'
WITH PRIVATE KEY
(FILE = 'C:\TEMP\SKey1.KEY',
ENCRYPTION BY PASSWORD = 'DE5@#$vfr^dEy*(&DftS)');

Cz I Administracja

284

Ich odtworzenie w innej bazie danych wymaga wic jedynie wczeniejszego utworzenia
w niej klucza DMK:
USE tempdb
CREATE MASTER KEY
ENCRYPTION BY PASSWORD = 'KluczB@zyTemp';
CREATE CERTIFICATE Cert
FROM FILE = 'C:\TEMP\Cert3.cer'
WITH PRIVATE KEY
(FILE = 'C:\TEMP\SKey1.KEY',
DECRYPTION BY PASSWORD = 'DE5@#$vfr^dEy*(&DftS)')

Tworzenie duplikatw kluczy symetrycznych


Kluczy symetrycznych nie mona wyeksportowa do plikw. Jeeli chcemy odtworzy klucz symetryczny w innej bazie danych, bdziemy musieli utworzy jego wiern
kopi. W tym celu naley podczas tworzenia duplikatu klucza poda takie same wartoci parametrw ALGORITHM, KEY_SOURCE i IDENTITY_VALUE:
1. Tworzc klucz, okrela si algorytm i jego dugo. W ten sposb wybieramy

uywany do szyfrowania i deszyfrowania algorytm, a wic jeeli chcemy


odtworzy ten sam klucz kryptograficzny, musi on korzysta z tego samego
algorytmu.
2. Parametr KEY_SOURCE okrela rdo klucza. Jeeli go nie podamy, serwer SQL

do wygenerowania klucza wykorzysta pseudolosowe dane. Poniewa


na podstawie tych samych danych rdowych zawsze generowany jest
ten sam klucz, musz one by chronione rwnie dobrze jak sam klucz
symetryczny.
3. Serwer SQL posuguje si identyfikatorami kluczy, a nie ich opisowymi nazwami.

Identyfikator klucza te zostanie wygenerowany na podstawie pseudolosowych


danych, chyba e uyty zostanie parametr IDENTITY_VALUE. Wtedy identyfikator
klucza zostanie wyliczony na podstawie wartoci tego parametru. Poniewa
identyfikator klucza nie musi by chroniony, uyte do jego wygenerowania
dane rwnie nie musz by poufne.
Sposb wykonania kopii klucza symetrycznego przedstawia poniszy przykad:
1. W oryginalnej bazie wystawiamy klucz symetryczny chroniony certyfikatem

i sprawdzamy jego identyfikator:


USE r07
CREATE SYMMETRIC KEY SKey2
WITH ALGORITHM = AES_128,
KEY_SOURCE = 'KDF9384939834kjf02930sd9f09r04395,c03945039102,
c59mncxvSZUIE49CVGKSL38493KALSA;W=1-2',
IDENTITY_VALUE = 'Klucz SKey2'
ENCRYPTION BY CERTIFICATE Cert3;
SELECT key_guid
FROM sys.symmetric_keys
WHERE name = 'Skey2';
---------------------------------------5DD0C400-56A3-0DB4-C043-2A1F4E8E8A80

Rozdzia 7. Bezpieczestwo
2. Tego klucza uywamy do zaszyfrowania przykadowych danych:
CREATE TABLE Tab1
(Kol1 varbinary(100));
GO
OPEN SYMMETRIC KEY SKey2
DECRYPTION BY CERTIFICATE Cert3;
INSERT INTO Tab1
VALUES (EncryptByKey(Key_GUID('SKey2'),'Tajne dane'));
CLOSE ALL SYMMETRIC KEYS;

3. Nastpnie przenosimy zaszyfrowane dane do innej bazy:


SELECT *
INTO tempdb..Tab1
FROM Tab1

4. eby mona byo odczyta skopiowane szyfrogramy, musimy w pierwszej

kolejnoci wyeksportowa certyfikat i klucz prywatny chronice klucz


symetryczny i odtworzy je w docelowej bazie:
BACKUP CERTIFICATE Cert3
TO FILE = 'c:\Temp\Cert3.cer'
WITH PRIVATE KEY
(FILE = 'c:\Temp\KeyCert3.KEY',
ENCRYPTION BY PASSWORD = 'DE5@(*DvfSr^dE');
USE tempdb
CREATE MASTER KEY
ENCRYPTION BY PASSWORD = 'Structured Query Language!';
CREATE CERTIFICATE Cert3
FROM FILE = 'c:\Temp\Cert3.cer'
WITH PRIVATE KEY
(FILE = 'c:\Temp\KeyCert3.KEY',
DECRYPTION BY PASSWORD = 'DE5@(*DvfSr^dE');

5. Nastpnie tworzymy duplikat klucza symetrycznego:


CREATE SYMMETRIC KEY SKey2
WITH ALGORITHM = AES_128,
KEY_SOURCE = 'KDF9384939834kjf02930sd9f09r04395,c03945039102,
c59mncxvSZUIE49CVGKSL38493KALSA;W=1-2',
IDENTITY_VALUE = 'Klucz SKey2'
ENCRYPTION BY CERTIFICATE Cert3;

6. Poniewa klucz i jego identyfikator s identyczne, uytkownik bdzie mg

odczyta skopiowany szyfrogram:


OPEN SYMMETRIC KEY SKey2
DECRYPTION BY CERTIFICATE Cert3;
SELECT CAST(DecryptByKey(Kol1) AS VARCHAR(50))
FROM dbo.Tab1;
CLOSE ALL SYMMETRIC KEYS;
---------------------------------------Tajne dane

285

Cz I Administracja

286

Elastyczne zarzdzanie kluczami


(dotyczy edycji Enterprise)
Serwer SQL 2008 Enterprise Edition umoliwia przechowywanie kluczy kryptograficznych na zewntrznych urzdzeniach, takich jak napdy USB lub karty inteligentne. Pozwala to fizycznie oddzieli szyfrogramy od umoliwiajcych ich odszyfrowanie kluczy.
Edycja Enterprise moe te korzysta z kluczy wygenerowanych przez zewntrzne
systemy kryptograficzne. Dziki czemu zintegrujemy szyfrowanie baz danych z istniejcymi ju w firmie rozwizaniami, zautomatyzujemy dystrybucj kluczy (w tym ich
przedawnianie) oraz bdziemy mogli uywa sprztowych moduw szyfrujcych.
Skorzystanie z tych funkcjonalnoci wymaga ustawienia jednej zaawansowanej opcji
serwera i zarejestrowania nowego dostawcy usug kryptograficznych:
EXEC sp_configure 'show advanced', 1;
RECONFIGURE;
EXEC sp_configure 'EKM provider enabled', 1;
RECONFIGURE;
CREATE CRYPTOGRAPHIC PROVIDER nazwa
FROM FILE = <plik.dll>;

Szyfrowanie danych
Zaszyfrowane dane przechowywane s w postaci binarnej. Ich rozmiar w bajtach mona
obliczy z dokadnoci do jednego bloku ze wzoru: ((8 + dane) / (blok+1)) * (2 * blok
+ 16). Rozmiar bloku wynosi 8 bajtw dla algorytmu 3DES i 16 bajtw w przypadku algorytmu AES. W praktyce naley doda do wielkoci szyfrowanych danych
48 bajtw dla algorytmu 3DES i 66 bajtw dla algorytmu AES.
Do odszyfrowania lub zaszyfrowania danych uytkownik musi mie nadane uprawnienia do odczytywania lub modyfikowania danych oraz prawo posugiwania si odpowiednim kluczem. W ten sposb szyfrowanie danych jest elementem systemu
zabezpiecze na poziomie wierszy (ang. Row Level Security).

Utworzone poprzednio klucze: symetryczny, chronicy go certyfikat oraz klucze DMK


i SMK zostan przez nas uyte do zaszyfrowania skopiowanych do bazy r07 danych
dotyczcych zamwie:
1. Zaczniemy od skopiowania najwikszej, liczcej ponad 120 MB tabeli

bazy AdventureWorks2008 i dodania do niej kolumny, w ktrej zapiszemy


szyfrogramy:
USE r07
SELECT *
INTO dbo.SalesOrderDetailEncrypted
FROM AdventureWorks2008.Sales.SalesOrderDetail;
ALTER TABLE dbo.SalesOrderDetailEncrypted
ADD CarrierTrackingNumberEncrypted VARBINARY(91);

Rozdzia 7. Bezpieczestwo

287

2. Nastpnie zaszyfrujemy numery spedycyjne zamwie. Poniewa uyjemy

do tego klucza symetrycznego, naley go otworzy, posugujc si odpowiednim


certyfikatem, zaszyfrowa dane systemow funkcj EncryptByKey i zamkn
klucz symetryczny:
OPEN SYMMETRIC KEY Skey1
DECRYPTION BY CERTIFICATE Cert3;
UPDATE dbo.SalesOrderDetailEncrypted
SET CarrierTrackingNumberEncrypted =
EncryptByKey(Key_GUID('SKey1'),CarrierTrackingNumber);
CLOSE SYMMETRIC KEY Skey1;

3. Moemy ju usun kolumn z jawn postaci numerw spedycyjnych:


ALTER TABLE dbo.SalesOrderDetailEncrypted
DROP COLUMN CarrierTrackingNumber;

4. Od teraz odczytanie numerw spedycyjnych wymaga ich odszyfrowania, a wic

otwarcia klucza symetrycznego (tylko waciciel i osoba, ktrej zostay nadane


takie uprawnienia, mog posugiwa si kluczem kryptograficznym),
wywoania funkcji DecryptByKey i zamknicia klucza:
Otwarcie klucza wymaga jego odszyfrowania za pomoc hasa albo, jak w tym
przykadzie z wykorzystaniem hierarchii kluczy, serwera SQL.
OPEN SYMMETRIC KEY Skey1
DECRYPTION BY CERTIFICATE Cert3;
SELECT CAST(DecryptByKey(CarrierTrackingNumberEncrypted) AS NVARCHAR(25)),
CarrierTrackingNumberEncrypted, LEN(CarrierTrackingNumberEncrypted)
FROM dbo.SalesOrderDetailEncrypted
WHERE SalesOrderID = 50256;
CLOSE ALL SYMMETRIC KEYS;
---------------------------------------FE9D-4B76-BB
0x00EF2EF7AA70C74AB357BC8669C0F81201000000B718D9FD6
84

Wydajno
Te same dane kilkukrotnie zaszyfrowane tym samym kluczem dadz rne szyfrogramy12. eby si o tym przekona, wystarczy wykona poniszy skrypt (zwracajca sygnatur funkcja CHECKSUM zostaa uyta tylko dla skrcenia i poprawy czytelnoci wyniku):
USE tempdb
CREATE SYMMETRIC KEY Test
WITH ALGORITHM = AES_128
ENCRYPTION BY PASSWORD = 'L(*U%^b*&8I)(*E...';
OPEN SYMMETRIC KEY Test
DECRYPTION BY PASSWORD = 'L(*U%^b*&8I)(*E...';
PRINT CHECKSUM(EncryptByKey(Key_GUID('Test'),'Dawno temu...'));
PRINT CHECKSUM(EncryptByKey(Key_GUID('Test'),'Dawno temu...'));

12

Wyjtkiem jest algorytm RC4.

Cz I Administracja

288

PRINT CHECKSUM(EncryptByKey(Key_GUID('Test'),'Dawno temu...'));


PRINT CHECKSUM(EncryptByKey(Key_GUID('Test'),'Dawno temu...'));
CLOSE SYMMETRIC KEY Test;
----------------------------------------919475613
-1888524620
-1431208946
1606422219

Poprawia to bezpieczestwo szyfrogramw i uniemoliwia ich porwnywanie13. Niestety, powoduje take, e przeszukiwanie szyfrogramw jest niemoliwe, a wic serwer
SQL 2008 bdzie musia za kadym razem odczyta wszystkie szyfrogramy, odszyfrowa je i przeszuka tak otrzymane wyniki. W praktyce oznacza to, e indeksy zaoone
na zaszyfrowanych kolumnach i tak nie bd uywane, co pokazuje kolejny przykad:
1. Poindeksujemy istniejce wartoci szyfrogramw. Poniewa s one uzupeniane

o pseudolosowe ziarno (ang. Seed) moemy zaoy niepowtarzalno


kluczy indeksu:
USE r07
CREATE UNIQUE INDEX I_Encrypted
ON dbo.SalesOrderDetailEncrypted(CarrierTrackingNumberEncrypted)
WHERE CarrierTrackingNumberEncrypted IS NOT NULL;

2. Jeeli odczytamy wszystkie szyfrogramy, serwer SQL 2008 przeskanuje indeks,

ale tego typu zapytania nie s w praktyce uywane:


SET SHOWPLAN_TEXT ON
GO
SELECT CarrierTrackingNumberEncrypted
FROM dbo.SalesOrderDetailEncrypted
WHERE CarrierTrackingNumberEncrypted IS NOT NULL;
---------------------------------------|--Index Scan(OBJECT:([r07].[dbo].[SalesOrderDetailEncrypted].[I_Encrypted]))

3. Natomiast prba przeszukania szyfrogramw realizowana jest, co prawda,

w oparciu o indeks, ale zawsze koczy si nieznalezieniem pasujcych wierszy.


Z powodu zmiennego ziarna zapytanie, ktre powinno zwrci dane istniejcego
zamwienia, zwrcio zero wierszy:
SET SHOWPLAN_TEXT OFF
GO
OPEN SYMMETRIC KEY Skey1
DECRYPTION BY CERTIFICATE Cert3;
SELECT SalesOrderID, CAST(DecryptByKey(CarrierTrackingNumberEncrypted)
AS NVARCHAR(25))AS Szyfrogram
FROM dbo.SalesOrderDetailEncrypted
WHERE CarrierTrackingNumberEncrypted = EncryptByKey(Key_GUID('SKey1'),
'FE9D-4B76-BB');
CLOSE ALL SYMMETRIC KEYS;
---------------------------------------NULL

13

W przeciwnym przypadku atakujcy mgby przez proste porwnanie szyfrogramw dowiedzie si


np., ktrzy klienci maj taki sam rabat.

Rozdzia 7. Bezpieczestwo

289

4. Jedyne rozwizanie polega na odszyfrowaniu i porwnaniu jawnej postaci

danych, ale to uniemoliwia przeszukanie indeksu14:

SET SHOWPLAN_TEXT ON
GO
OPEN SYMMETRIC KEY Skey1
DECRYPTION BY CERTIFICATE Cert3;
SELECT SalesOrderID, CAST(DecryptByKey(CarrierTrackingNumberEncrypted)
AS NVARCHAR(25))
FROM dbo.SalesOrderDetailEncrypted
WHERE CAST(DecryptByKey(CarrierTrackingNumberEncrypted) AS NVARCHAR(25))
= 'FE9D-4B76-BB';
CLOSE ALL SYMMETRIC KEYS;
---------------------------------------|--Filter(WHERE:([Expr1004]=N'FE9D-4B76-BB'))
|--Compute Scalar(DEFINE:([Expr1004]=CONVERT(nvarchar(25),DecryptByKey([r07].
[dbo].[SalesOrderDetailEncrypted].[CarrierTrackingNumberEncrypted]),0)))
|--Table Scan(OBJECT:([r07].[dbo].[SalesOrderDetailEncrypted]))

Sprawdzanie autentycznoci
Potwierdzanie autentycznoci danych jest czsto waniejsze ni zapewnianie im poufnoci. Przykadowo informacje o zamwieniach mog by bez wikszej szkody ujawnione niepowoanym osobom, ale moliwo ich modyfikowania przez te osoby mogaby spowodowa ogromne straty.
Jeszcze groniejsza byaby zmiana kodu dziaajcej z uprawnieniami administracyjnymi
procedury dlatego coraz wicej producentw podpisuje cyfrowo swoje programy.
Serwer SQL 2008 pozwala w podobny sposb podpisa procedury i funkcje bazodanowe.

Weryfikowanie autentycznoci danych


Tak jak szyfrowanie jest powszechnie stosowan technik zapewniania poufnoci danych, tak podpisy cyfrowe s standardowym sposobem sprawdzania ich autentycznoci.
W najprostszym przypadku mona by wyliczy sygnatury niezaszyfrowanych danych
i zapisa je w dodatkowej kolumnie tabeli. Podczas odczytywania danych wystarczyoby odczyta ich sygnatury i porwna je z sygnaturami wyliczonymi na podstawie
aktualnych danych. Gdyby sygnatury si rniy, znaczyoby to, e dane zostay w midzyczasie zmodyfikowane.

14

W tym przypadku tylko jeden wiersz pasuje do warunku wyszukiwania, a mimo to serwer SQL
przeskanowa ca tabel, odszyfrowa wszystkie numery spedycyjne i sprawdzi, ktry z nich
odpowiada szukanemu.

Cz I Administracja

290

Wyliczenie sygnatur danych ma jednak dwa sabe punkty:


1. Przede wszystkim atakujcy mgby samodzielnie uaktualni sygnatury

i w ten sposb ukry modyfikacj danych15.

2. Zaszyfrowanie podpisanych danych osabia si szyfrogramw atakujcy

mgby wygenerowa wszystkie moliwe dane, wyliczy ich sygnatury


i porwna je z sygnaturami zapisanymi w tabeli.
Rozwizanie obu problemw polega na dodaniu do oryginalnych danych dowolnego
nieznanego atakujcemu sekretu i wyliczeniu ich sygnatur po tej zmianie. Sygnatura
wyliczona na podstawie oryginalnych danych uzupenionych o wektor inicjujcy IV
(ang. Initialization Vector) nazywana jest kodem autentycznoci danych MAC (ang.
Message Authentication Code).
Przykadowa implementacja sprawdzania kodw MAC zostaa pokazana poniej:
1. Uywane do podpisywania danych wektory inicjujce bd po zaszyfrowaniu

przechowywane w osobnej tabeli. eby utrudni atak sownikowy16, kada tabela


bdzie miaa inny wektor inicjujcy:
CREATE TABLE tIV
(TblID INT PRIMARY KEY,
IV VARBINARY(100) NOT NULL);

2. Do szyfrowania uyjemy klucza AES i certyfikatu:


CREATE CERTIFICATE CertIV
WITH SUBJECT = 'Ochrona wektorow IV';
CREATE SYMMETRIC KEY SKeyIV
WITH ALGORITHM = TRIPLE_DES
ENCRYPTION BY CERTIFICATE CertIV;

3. Pseudolosowy, zwrcony przez funkcj NEWID wektor IV zaszyfrujemy

i zapiszemy w przygotowanej tabeli:


OPEN SYMMETRIC KEY SKeyIV
DECRYPTION BY CERTIFICATE CertIV
INSERT INTO tIV
VALUES (1,EncryptByKey(Key_GUID('SKeyIV'),CAST(NEWID() AS VARCHAR(100))))
CLOSE ALL SYMMETRIC KEYS

4. Atakujcy, nie majc dostpu do klucza SKeyIV, bdzie mg co najwyej

odczyta zaszyfrowany wektor inicjujcy:


SELECT *
FROM tIV
---------------------------------------1 0x00370CCD6E41AB4EA104B6E90713DAD301000000AB603258B9F7D37D432729CB9F330D39DF
10D74B0B601DBA9F79DF1B8710A701068A65181A6723AED33E7DF4146756F097FAAF40368B73D7
15

Tworzc bezpieczny system, naley zaoy, e kady jego element moe by zamany. Dlatego dziaanie
podsystemu odpowiedzialnego za sprawdzanie autentycznoci danych nie powinno zalee od uprawnie
do tabel nadanych uytkownikom.

16

Popularna technika odwrcenia funkcji skrtu polega na wykorzystaniu tczowej tabeli


(ang. Rainbow Table) zawierajcej wszystkie moliwe wartoci tej funkcji dla danego ziarna.

Rozdzia 7. Bezpieczestwo

291

5. Natomiast osoby upowanione do generowania sygnatur uyj funkcji,

ktra do podpisywanych danych doczy odszyfrowany wektor IV,


a nastpnie wyliczy ich sygnatur17:
CREATE FUNCTION udfMac(@Dane NVARCHAR(4000), @TblID INT )
RETURNS BINARY(24) AS
BEGIN
DECLARE @Key VARBINARY(100) = NULL
SELECT @Key = DecryptByKeyAutoCert(cert_id('CertIV'), NULL, IV)
FROM tIV
WHERE TblID = @TblID
RETURN (HashBytes( N'SHA1', CONVERT(VARBINARY(8000), @Dane) + @Key))
END

6. Po dodaniu do tabeli kolumny, w ktrej zapisane zostan sygnatury,

moemy podpisa cyfrowo dane:


ALTER TABLE dbo.SalesOrderDetailEncrypted
ADD Mac BINARY(24);
UPDATE dbo.SalesOrderDetailEncrypted
SET Mac = dbo.udfMac (LineTotal,1);

7. Od teraz, porwnujc zapisane w tabeli i wyliczone na podstawie aktualnych

danych sygnatury, znajdziemy zmodyfikowane dane (wykonujc to wiczenie,


przekonamy si, jak kosztowne i dugotrwae jest szyfrowanie i podpisywanie
cyfrowe danych, i bdziemy mogli porwna jego wydajno z wydajnoci
opisanego w dalszej czci rozdziau szyfrowania baz danych)18:
UPDATE dbo.SalesOrderDetailEncrypted
SET LineTotal = 0.99
WHERE SalesOrderID = 53593;
SELECT SalesOrderID, LineTotal
FROM dbo.SalesOrderDetailEncrypted
WHERE Mac <> dbo.udfMac (LineTotal,1);
----------------------------------------

Weryfikowanie autentycznoci moduw kodu


Podpisywanie moduw kodu to jedna z najpotniejszych funkcji serwera SQL 2008.
Pozwala ona na czas wykonywania moduu nada mu dodatkowe uprawnienia, bez
koniecznoci zmieniania kontekstu jego wykonania. Podpisujc modu kodu (np.
procedur), uzyskamy ten sam efekt, ktry uzyskalibymy podczas zmiany kontekstu jej
wykonania za pomoc opcji EXECUTE AS, jednoczenie zachowujc pen kontrol nad
uytkownikami i moliwo monitorowania ich dziaa.
Jeeli wymagane s dodatkowe uprawnienia na poziomie serwera, naley utworzy
certyfikat w bazie master, na jego podstawie wygenerowa login i nada temu loginowi
wymagane uprawnienia, a nastpnie podpisa modu certyfikatem.
17

eby inni uytkownicy, nie tylko administrator, mogli uywa tej funkcji, naley j cyfrowo podpisa.
Podpisywanie moduw kodu opisane zostao w nastpnym punkcie.

18

Na testowym serwerze sprawdzenie autentycznoci danych trwao ponad 15 minut.

Cz I Administracja

292

Jeeli natomiast chcemy nada dodatkowe uprawnienia na poziomie bazy danych, naley w tej bazie utworzy certyfikat, na jego podstawie wykreowa konto uytkownika,
nada mu wymagane uprawnienia i podpisa modu certyfikatem.
W obu przypadkach naley nada odpowiednim uytkownikom prawo wykonywania tak
podpisanego moduu:
1. Tworzymy procedur, ktrej wykonanie wymaga uprawnienia ALTER TABLE

i ktra dodatkowo wywietla informacje o tosamociach, jakimi moe si


posuy:
CREATE PROC udpTrTbl AS
SELECT name,type
FROM sys.user_token;
TRUNCATE TABLE dbo.Tab1

2. Wiemy ju, e nadanie uytkownikowi prawa do wykonania procedury nie

wystarczy. Tym razem przekonamy si dodatkowo, jakimi uprawnieniami


moga posuy si procedura:
GRANT EXECUTE ON udpTrTbl
TO Szelor;
EXEC AS USER = 'Szelor'
EXEC udpTrTbl;
---------------------------------------Szelor
SQL USER
public
ROLE
(2 row(s) affected)
Msg 1088, Level 16, State 7, Procedure udpTrTbl, Line 5
Cannot find the object "Tab1" because it does not exist or you do not have
permissions.

3. Poniewa ani uytkownik Szelor, ani rola public nie miay wystarczajcych

uprawnie do obcicia tabeli, prba wykonania procedury skoczya si bdem.


Nadajmy wic procedurze dodatkowe uprawnienia przez jej podpisanie:
REVERT;
CREATE CERTIFICATE CertSign
WITH SUBJECT = 'Podpisuje proc udpTrTbl';
ADD SIGNATURE TO udpTrTbl
BY CERTIFICATE CertSign;

4. Poniewa nie mona nada uprawnie certyfikatom, na podstawie uytego

do podpisania procedury certyfikatu utworzymy konto uytkownika i jemu


nadamy wymagane do obcicia tabeli uprawnienie:
CREATE USER uCertSign
FROM CERTIFICATE CertSign;
GRANT ALTER ON dbo.Tab1
TO uCertSign;

Rozdzia 7. Bezpieczestwo

293

5. Jeeli teraz uytkownik wykona procedur, posuy si ona uprawnieniami

uytkownika uCertSign i tabela zostanie obcita:


EXEC AS USER = 'Szelor'
EXEC udpTrTbl;
REVERT;
---------------------------------------Szelor
SQL USER
public
ROLE
uCertSign
USER MAPPED TO CERTIFICATE
(3 row(s) affected)

Szyfrowanie baz danych (dotyczy edycji Enterprise)


Edycja Enterprise serwera SQL 2008 pozwala szyfrowa cae bazy danych w sposb
niewidoczny dla uytkownikw i aplikacji klienckich. Po jej wczeniu automatycznie
szyfrowane s wszystkie, z wyjtkiem danych FILESTREAM, zapisywane na dyskach
informacje. Oznacza to, e oprcz plikw bazy danych zaszyfrowane zostan: baza
tempdb, kopie zapasowe (ich odtworzenie bez klucza DEK bdzie niemoliwe) i migawki bazy danych.
Szyfrowanie baz danych jest niezgodne z wprowadzon w poprzedniej wersji serwera SQL szybk inicjalizacj plikw (funkcj pozwalajc szybko powiksza pliki
bazodanowe bez wczeniejszego zerowania miejsca na dysku).

Zasada dziaania
Szyfrowanie baz danych przebiega nastpujco:
1. Po wczeniu szyfrowania osobne procesy po kolei odczytuj, szyfruj

i zapisuj wszystkie strony bazy danych19. Po zaszyfrowaniu strony dodawana


jest do niej suma kontrolna.

2. Podczas odczytywania strony sprawdzana jest jej suma kontrolna. Jeeli jest

ona poprawna, strona zostaje wczytana do bufora20.

3. Przed zapisaniem w buforze strona zostaje odszyfrowana. Poniewa wszystkie

operacje na danych przeprowadzane s w buforach (a nie zapisanych na dysku


stronach), zaszyfrowanie bazy nie ma adnego wpywu na dziaanie aplikacji
klienckiej.
4. Przed zapisaniem w pliku strona jest szyfrowana, a nastpnie dodawana jest

do niej suma kontrolna.

19

Dane w plikach .mdf i .ndf zorganizowane s w strony 8-kilobajtowe (ang. Page), ktre s te jednostk
odczytu i zapisu.

20

Bufor to ramka na wczytan do pamici stron.

Cz I Administracja

294

Konfiguracja
eby sprawdzi, czy informacje w wybranej bazie danych rzeczywicie zostan zaszyfrowane, utworzymy w niej dodatkow tabel i zapiszemy w niej przykadowe dane:
USE r07
CREATE TABLE Klienci (
ID INT IDENTITY,
Nazwisko VARCHAR (100) NOT NULL,
NumerKarty CHAR (16) NOT NULL);
INSERT INTO dbo.Klienci
VALUES ('Kowalski', '4444555566667777'),
('Nowak', '4444888899990000');

A nastpnie wykonamy kopi zapasow tej bazy i odtworzymy j pod zmienion nazw:
BACKUP DATABASE r07 TO
DISK = 'C:\Temp\r07.bak'
WITH INIT;
GO
RESTORE DATABASE r07Zaszyfrowana
FROM DISK = N'C:\Temp\r07.bak' WITH
MOVE 'r07' TO N'C:\Temp\r07Zaszyfrowana.mdf',
MOVE 'r07_Log' TO N'C:\Temp\r07Zaszyfrowana.ldf',
REPLACE;

Do szyfrowania baz danych uywany jest klucz DEK, ktry z kolei musi by chroniony
certyfikatem wystawionym w bazie master:
USE master;
CREATE MASTER KEY ENCRYPTION BY
PASSWORD = 'T@jneHasl0!';
CREATE CERTIFICATE CertSrvSQL
WITH SUBJECT = 'Certyfikat TDE';

Zaszyfrowa, odszyfrowa czy zmieni uyty do tego klucz moemy z pomoc konsoli SSMS. eby zaszyfrowa baz r07Zaszyfrowana:
1. Kliknij prawym przyciskiem myszki w oknie eksploratora obiektw baz

r07Zaszyfrowana i z menu kontekstowego wybierz Tasks/Manage Database


Encryption.
2. Po wybraniu uytego do szyfrowania bazy algorytmu i wskazaniu certyfikatu

zaznacz pole wyboru Set Database Encryption On i kliknij OK (rysunek 7.4).


Zaszyfrowanie tak maej bazy danych bdzie prawie natychmiastowe. Po sprawdzeniu,
czy zaszyfrowana baza danych jest dostpna w taki sam sposb jak oryginalna baza,
wykonamy jej kopi i zatrzymamy serwer SQL pozwoli to sprawdzi, czy zapisane
w tej bazie informacje zostay zaszyfrowane21:

21

Warto 3 atrybutu encryption_state oznacza, e baza zostaa zaszyfrowana, 2 e szyfrowanie


jest w toku.

Rozdzia 7. Bezpieczestwo

Rysunek 7.4. Raz skonfigurowane szyfrowanie bazy danych moemy te wcza i wycza
w oknie jej waciwoci, na zakadce Options
SELECT DB_NAME(database_id), encryption_state, key_algorithm, key_length
FROM sys.dm_database_encryption_keys;
---------------------------------------tempdb
3
AES
128
r07
3
AES
128
SELECT B1.Nazwisko, B2.NumerKarty
FROM r07.dbo.Klienci AS B1 INNER JOIN r07Zaszyfrowana.dbo.Klienci AS B2
ON B1.ID = B2.ID;
---------------------------------------Kowalski 4444555566667777
Nowak
4444888899990000
BACKUP DATABASE r07Zaszyfrowana
TO DISK = 'C:\Temp\r07Zaszyfrowana.bak'
WITH INIT;
SHUTDOWN;

eby sprawdzi, czy dane rzeczywicie zostay zaszyfrowane:


1. Otwrz w programie WordPad plik C:\Program Files\Microsoft SQL Server\

MSSQL10.MSSQLSERVER\MSSQL\DATA\r07.mdf (plik niezaszyfrowanej


bazy) i poszukaj w nim nazwiska Kowalski. Zostanie ono znalezione, razem
z numerem karty kredytowej. Jeeli jednak w ten sam sposb przeszukamy
plik C:\Temp\r07zaszyfrowana.mdf, nie znajdziemy w nim ani nazwisk,
ani numerw kart kredytowych.

295

Cz I Administracja

296

2. Otwrz w tym samym programie plik kopii zapasowej niezaszyfrowanej

i zaszyfrowanej bazy (pliki C:\Temp\r07.bak oraz C:\Temp\r07Zaszyfrowana.bak)


i sprawd, czy mona w nich znale nazwiska. W pierwszym przypadku
zostan one znalezione, w drugim nie.
3. Uruchom serwer SQL, klikajc prawym przyciskiem myszy jego nazw w oknie

eksploratora obiektw konsoli SSMS i wybierajc z menu kontekstowego


zadanie Start.

Przenoszenie zaszyfrowanych baz danych


Atakujcy moe przenie baz i odtworzy j na wasnym serwerze na dwa sposoby:
poprzez skopiowanie plikw bazodanowych i podczenie ich na docelowym serwerze
lub tworzc i odtwarzajc kopi zapasow bazy. W obu przypadkach do odszyfrowania bazy (czy to pliku danych i dziennika, czy pliku kopii zapasowej) bdzie jednak
potrzebowa klucza DEK. Odszyfrowanie tego klucza jest jednak niemoliwe bez certyfikatu znajdujcego si w bazie master oryginalnego serwera SQL.
Odtworzenie zaszyfrowanej bazy danych wymaga wczeniejszego odtworzenia na docelowym serwerze chronicego klucz DEK certyfikatu wraz z odpowiadajcym mu
kluczem prywatnym:
RESTORE DATABASE r07Zaszyfrowana
FROM DISK = 'C:\Temp\ r07Zaszyfrowana.bak'
WITH MOVE 'r07' TO 'C:\Temp\Kopia.mdf',
MOVE 'r07_Log' TO 'C:\Temp\Kopia.ldf',
REPLACE;
---------------------------------------Msg 33111, Level 16, State 3, Line 1
Cannot find server certificate with thumbprint
'0xD726F9B73062701FAA832C1D3A200A4B7EB0E82A'.
Msg 3013, Level 16, State 1, Line 1
RESTORE DATABASE is terminating abnormally.

Musimy wic najpierw wyeksportowa certyfikat i zwizany z nim klucz prywatny


do plikw:
USE master;
BACKUP CERTIFICATE CertSrvSQL
TO FILE = 'C:\Temp\CertSrvSQL'
WITH PRIVATE KEY (FILE = 'C:\Temp\CertSrvSQLKey',
ENCRYPTION BY PASSWORD = 'Siln3h@$l0');

A nastpnie odtworzy je na docelowym serwerze. Jeeli w bazie master tego serwera


nie zosta wczeniej wystawiony klucz DMK, bdziemy musieli wczeniej go utworzy:
USE master
CREATE MASTER KEY ENCRYPTION BY
PASSWORD = 'InnE@leTezS1lneH@sl0';
CREATE CERTIFICATE CertSrvSQL
FROM FILE = 'C:\Temp\CertSrvSQL'
WITH PRIVATE KEY (FILE = 'C:\Temp\CertSrvSQLKey',
DECRYPTION BY PASSWORD = 'Siln3h@$l0');

Teraz moliwe ju bdzie odtworzenie kopii zapasowej zaszyfrowanej bazy.

Rozdzia 7. Bezpieczestwo

297

Wydajno
Zastosowany sposb szyfrowania baz danych ma jeszcze jedn zalet jeeli odczytywane lub modyfikowane dane znajduj si ju w pamici, dostp do nich bdzie
rwnie szybki jak do niezaszyfrowanych danych. Poniewa to podsystem wejcia-wyjcia, a nie procesor, jest wskim gardem wikszoci serwerw, szyfrowanie baz
danych powoduje niewielkie (z reguy nieprzekraczajce 5%) spadki wydajnoci serwera mierzone czasem jego odpowiedzi. Szyfrowanie jednak znacznie zwiksza obcienie
procesora podczas odczytywania i zapisywania danych.

Monitorowanie i wykrywanie wama


Zabezpieczenia maj utrudni atak poprzez zablokowanie automatycznych prb wamania, zniechcenie atakujcych i ukrycie sabych punktw systemu. Nie zagwarantuj
jednak jego bezpieczestwa. Mog natomiast wyduy czas potrzebny na zaatakowanie
systemu i zmusi atakujcych do przeprowadzania atwych do zauwaenia operacji.
Dlatego kada strategia zabezpiecze musi obejmowa monitorowanie, czyli zbieranie
i regularne analizowanie danych na temat dziaania serwera i aktywnoci jego uytkownikw.

Dzienniki serwera SQL


Do zbierania danych o serwerze moemy wykorzysta dzienniki zdarze serwera
SQL 2008. Domylnie zawieraj one tylko informacje o nieudanych prbach zalogowania. Moemy monitorowa zarwno udane, jak i nieudane prby nawizania poczenia,
zmieniajc opcj Login auditing dostpn w oknie waciwoci serwera na zakadce
Security.
Do analizy zebranych w ten sposb danych moemy uy dostpnego na witrynie
Microsoft Download programu Log Parser albo systemowego narzdzia wiersza polecenia FindStr.

Plik ledzenia
Informacje na temat aktywno uytkownikw mona zapisa w pliku ledzenia. Najprociej jest przygotowa szablon instrukcji w programie Profiler. Po wybraniu pustego
szablonu i opcji zapisania danych do pliku:
1. Wybierz przechwytywane zdarzenia z kategorii Security Audit (np. Audit

Login, Audit Logout, Audit Add Login to Server Role Event i Audit Change
Audit Events).
2. Ewentualnie ogranicz i przefiltruj zapisywane informacje.

Cz I Administracja

298

3. Uruchom ledzenie, nastpnie zatrzymaj je i z menu File wybierz opcj

Export/Script Trace Definition/For SQL Server 2005-2008. Wygenerowany


w ten sposb skrypt .sql naley wykona w bazie master.
4. Do analizowania zapisanych w pliku ledzenia informacji uyj funkcji
tabelarycznej fn_trace_gettable.

Wyzwalacze
Wyzwalacz (ang. Trigger) to specjalny typ procedury skadowanej powizanej z wybranym obiektem bazodanowym (tabel, baz danych lub caym serwerem SQL) i automatycznie wywoywanej wykonan na tym obiekcie operacj uytkownika.
Wyzwalacze s wykonywane synchronicznie w ramach transakcji uytkownika; jeeli
nawet uytkownik nie rozpocz jawnie transakcji, kod wyzwalacza bdzie wykonany
w ramach tej transakcji, co oznacza, e wyzwalacz moe wycofa instrukcje uyt22
kownika oraz e do momentu zakoczenia jego dziaania serwer SQL 2008 utrzyma
blokady zaoone przez oryginaln instrukcj.

Wyzwalacze DML
Wyzwalacze DML wywoywane s w momencie wstawiania, usuwania lub modyfikowania danych w powizanych z nimi tabelach lub widokach. Ich wywoanie ma
miejsce tylko raz dla instrukcji uytkownika, a nie dla kadego wiersza zmodyfikowanego w ramach tej instrukcji osobno.
Monitorowanie aktywnoci uytkownikw poprzez wyzwalacze DML moe mie bardzo
niekorzystny wpyw na wydajno serwera.

Jeeli ju decydujemy si na uywanie wyzwalaczy DML do monitorowania, powinnimy wybra wyzwalacze typu INSTEAD OF takie wyzwalacze uruchamiane s zamiast, a nie po instrukcjach uytkownika. Dziki temu, e wyzwalacze s wykonywane w ramach transakcji uytkownika, maj one dostp do nowej (proponowanej) oraz
poprzedniej wersji danych pierwsze z nich znajduj si w wirtualnej tabeli Inserted,
drugie w wirtualnej tabeli Deleted. Na przykad, eby zapisywa w tabeli Klienci informacje o tym, kto i kiedy ostatnio zmodyfikowa jej zawarto:
1. Dodaj do tej tabeli dwie kolumny:
USE r07
ALTER TABLE dbo.Klienci
ADD Kto VARCHAR(200), Kiedy DATETIME;

22

Oznacza to rwnie, e jeeli wyzwalacz zapisze jakie dane w tabeli, a nastpnie wycofa transakcj,
zapisane przez niego dane take zostan skasowane.

Rozdzia 7. Bezpieczestwo

299

2. Utwrz wyzwalacz, ktry bdzie wykonany zamiast oryginalnej instrukcji


uytkownika i ktry dodatkowo zmodyfikuje wartoci pl Kto i Kiedy:
CREATE TRIGGER tAudit
ON dbo.Klienci INSTEAD OF UPDATE AS
BEGIN
IF (@@ROWCOUNT>0)
UPDATE dbo.Klienci
SET Nazwisko = I.Nazwisko,
NumerKarty = I.NumerKarty,
Kto = SYSTEM_USER + ' ' + USER_NAME(),
Kiedy = CURRENT_TIMESTAMP
FROM dbo.Klienci AS K JOIN INSERTED AS I
ON K.ID = I.ID
END;

3. Przetestuj dziaanie wyzwalacza, modyfikujc nazwisko jednego z klientw

i odczytujc zawarto caej tabeli:


UPDATE dbo.Klienci
SET Nazwisko = 'Majewski'
WHERE ID=1;
SELECT *
FROM dbo.Klienci;
---------------------------------------1 Majewski
4444555566667777 KATMAI\Administrator dbo
2 Nowak
4444888899990000 NULL

2008-07-16 14:42:27.537
NULL

Wyzwalacze DDL
Wyzwalacze DDL s uruchamiane w momencie wykonywania przez uytkownika instrukcji CREATE, ALTER, DROP, GRANT, DENY, REVOKE lub UPDATE STATISTICS. Wyzwalacze
tego typu mog by tworzone na poziomie serwera lub bazy danych.
Informacje o zdarzeniu, ktre spowodowao wywoanie wyzwalacza, zwraca funkcja
EventData(). Funkcja ta moe wystpi tylko w ramach wyzwalacza DDL, a struktura

wynikowego dokumentu XML zaley od typu przechwyconej instrukcji.


W poniszym przykadzie pokazujemy, jak utworzy wyzwalacz, ktrego dziaanie
polega na zapisywaniu w tabeli dziennika informacji o wskazanych, wykonywanych
przez uytkownikw instrukcjach DDL:
CREATE TABLE master.dbo.logDDL
(id INT IDENTITY PRIMARY KEY,
uzytkownik SYSNAME,
czas DATETIME,
instrukcja SYSNAME,
obiekt SYSNAME,
opis XML);
GO
CREATE TRIGGER trLogDDL
ON ALL SERVER
FOR CREATE_DATABASE,ALTER_DATABASE, DROP_DATABASE,DDL_LOGIN_EVENTS
AS

Cz I Administracja

300

DECLARE @doc AS XML


SET @doc = EVENTDATA()
INSERT INTO master.dbo.logDDL (uzytkownik, czas,instrukcja, obiekt, opis)
VALUES (
CAST(@doc.query ('data(//LoginName)') AS SYSNAME),
CAST(@doc.query ('data(//PostTime)') AS VARCHAR(23)),
CAST(@doc.query ('data(//EventType)') AS SYSNAME),
CAST(@doc.query ('data(//ObjectName)') AS SYSNAME),
@doc );

eby sprawdzi dziaanie wyzwalacza, wykonaj ponisze instrukcje:


CREATE DATABASE r07Test;
DROP DATABASE r07Test;
ALTER LOGIN Admin WITH PASSWORD='dusza';
SELECT uzytkownik, czas, instrukcja, obiekt
FROM master.dbo.logDDL;
---------------------------------------KATMAI\Administrator
2008-07-16 14:52:41.730
KATMAI\Administrator
2008-07-16 14:52:41.800
KATMAI\Administrator
2008-07-16 14:52:41.810

CREATE_DATABASE
DROP_DATABASE
ALTER_LOGIN
Admin

Wyzwalacze logowania
Wyzwalacze logowania s wywoywane w momencie prby zalogowania si uytkownika do serwera SQL 2008. Tak jak pozostae typy wyzwalaczy, umoliwiaj one wycofanie transakcji, co w ich przypadku oznacza odrzucenie prby zalogowania. Informacje
na temat przechwyconej prby zalogowania zwraca funkcja EVENTDATA().
Szczegowy opis wyzwalaczy logowania wraz z przykadem ich zastosowania do monitorowania uytkownikw zawiera dostpny na polskiej witrynie Microsoft TechNet
artyku SQL Server 2005 Service Pack 2 przedstawia Logon Trigger.

Monitorowanie wszystkich operacji


(dotyczy edycji Enterprise)
Przedstawione do tej pory techniki monitorowania miay dwie podstawowe wady:
1. Nie s zintegrowane z powszechnie uywanym do monitorowania aktywnoci

dziennikiem systemu Windows. Oznaczao to, e administratorzy musz


odczytywa dane w rnych formatach, korzystajc w tym celu z kilku rnych,
nie zawsze znanych sobie narzdzi.
2. Nie pozwalaj definiowa zasad inspekcji rwnie atwo jak w przypadku

obiektw systemu Windows. Wikszo administratorw jest przyzwyczajona


do okrelania, czyje prby (przeprowadzone przez jakich uytkownikw)
odwoania si do wybranych obiektw maj by ledzone.

Rozdzia 7. Bezpieczestwo

301

Oba te problemy rozwizaa dostpna wycznie w edycji Enterprise funkcja monitorowania wszystkich zdarze. Dziaa ona nastpujco:
1. Serwer SQL 2008 poprzez mechanizm rozszerzonych zdarze23 zgasza

monitorowane zdarzenie.
2. Zdarzenia, ktre maj by odnotowane, s konwertowane do postaci rekordw

audytu. Chocia nie wszystkie zdarzenia zgaszaj komplet informacji,


to rekordy audytu maj jeden, zawsze taki sam schemat.
3. Rekordy audytu s zapisywane we wskazanej lokalizacji: w pliku binarnym,

systemowym dzienniku aplikacji lub w systemowym dzienniku zabezpiecze.


O ile tylko rekordy audytu zapisywane s asynchronicznie, kluczowy dla wydajnoci
tego rozwizania jest czas zgoszenia zdarzenia. Wewntrzne testy firmy Microsoft
pokazuj, e na dwuprocesorowym komputerze PIV z zegarem 2 GHz nie przekracza on 2 mikrosekund. W rezultacie monitorowanie wszystkich zdarze jest bardziej
wydajne ni pliki ledzenia i w wikszoci przypadkw nie ma widocznego wpywu
na wydajno serwera SQL.

Konfigurujc audyt, naley okreli:


1. Jego nazw (audyt jest nowym typem obiektw poziomu serwera SQL 2008).
2. Maksymalne opnienie, z jakim rekordy audytu bd zapisywane

(domylnie s one zapisywane asynchronicznie z opnieniem do 1 sekundy,


zmniejszajc opnienie do 0, wymusimy synchroniczne monitorowanie
zdarze, co moe mie niekorzystny wpyw na wydajno serwera24).
3. Czy w przypadku braku moliwoci odnotowania zdarzenia serwer SQL 2008

ma by automatycznie wyczony.
4. Lokalizacj rekordy audytu mog by zapisywane w pliku, systemowym

dzienniku aplikacji lub systemowym dzienniku zabezpiecze (rysunek 7.5).


Zapis w dzienniku zabezpiecze jest niemoliwy w systemie Windows XP. W pozostaych systemach wymaga on nadania usudze serwera SQL uprawnienia Generate
security audits (wbudowane konta LOCAL SERVICE i NETWORK SERVICE maj to
uprawnienie) oraz wczenia (za pomoc konsoli MMC Lokalne zasady zabezpiecze lub narzdzia auditpol.exe) udanych i nieudanych inspekcji zdarze dostpu
do obiektw.

Nastpnie naley okreli specyfikacj audytu na poziomie serwera SQL 2008 i wybranej bazy danych z audytem mona powiza tylko jedn specyfikacj poziomu
serwera i jedn specyfikacj poziomu bazy danych. Specyfikacje zawieraj informacje o tym, jakie zdarzenia maj by monitorowane. Monitorowane mog by zdarzenia zachodzce na poziomie serwera SQL (np. nieudane prby zalogowania czy wykonanie instrukcji EXECUTE AS LOGIN) oraz pojedynczych baz danych (np. skasowanie
23

Opis mechanizmu rozszerzonych zdarze znajduje si w rozdziale 5.

24

Maksymalne opnienie moe wynosi prawie 25 dni.

Cz I Administracja

302

Rysunek 7.5. Audyt mona utworzy, rozwijajc w eksploratorze obiektw sekcj Security,
klikajc prawym przyciskiem myszy folder Audit i wybierajc opcj New Audit

danych ze wskazanej tabeli czy wykonanie instrukcji EXECUTE AS USER). Tworzenie specyfikacji audytu uatwiaj predefiniowane grupy zdarze i moliwo definiowania poprzez konsol SSMS:
1. Na poziomie serwera mona monitorowa m.in. grupy zdarze

SUCCESSFUL_LOGIN_GROUP, FAILED_LOGIN_GROUP,
LOGOUT_GROUP, DBCC czy AUDIT_CHANGE_GROUP. Ponisza
instrukcja tworzy specyfikacj audytu poziomu serwera monitorujc
wykonanie instrukcji i klauzuli EXECUTE AS LOGIN:
USE master
CREATE SERVER AUDIT SPECIFICATION ServerAuditSpec
FOR SERVER AUDIT AuditR07
ADD (SERVER_PRINCIPAL_IMPERSONATION_GROUP)
WITH (STATE = ON);

2. Na poziomie bazy danych mona monitorowa m.in. grupy zdarze

DATABASE_PERMISSION_CHANGE_GROUP, SCHEMA_OBJECT_
CHANGE_GROUP, DATABASE_PRINCIPAL_IMPERSONATION_GROUP
oraz pojedyncze akcje wskazanych uytkownikw, takie jak wykonanie
przez nich instrukcji SELECT, UPDATE, INSERT, DELETE, EXECUTE czy RECEIVE.
Na przykad ponisza specyfikacja spowoduje odnotowywanie prb dostpu
uytkownika Szelor do tabeli Klienci:

Rozdzia 7. Bezpieczestwo

303

USE r07
CREATE DATABASE AUDIT SPECIFICATION [DatabaseAuditSpecR07]
FOR SERVER AUDIT AuditR07
ADD (SELECT, INSERT, UPDATE ON dbo.Klienci BY Szelor)
WITH (STATE = ON);

Zanim wczymy audyt, nadamy jeszcze uytkownikowi Szelor uprawienia do odczytywania i wstawiania wierszy do tabeli Klienci:
GRANT SELECT, INSERT ON dbo.Klienci TO Szelor;
USE master
ALTER SERVER AUDIT AuditR07
WITH (STATE = ON);

Informacje na temat audytu znajdziemy w trzech dynamicznych widokach:


1. Widok sys.dm_audit_actions zwraca list wszystkich moliwych

do monitorowania akcji.
2. Widok sys.dm_server_audit_status zwraca szczegowe informacje

o zdefiniowanych dla serwera audytach.


3. Widok sys.dm_audit_class_type_map jest sownikiem uywanych

przy zapisie rekordw audytu skrtw.


eby zasymulowa aktywno uytkownikw wykonamy ponisze instrukcje:
USE r07;
GO
EXECUTE AS LOGIN = 'Marcin';
SELECT USER_NAME ();
GO
SELECT * FROM dbo.Klienci;
GO
INSERT INTO dbo.Klienci (Nazwisko,NumerKarty)
VALUES ('Nowak', '134-124-642-134');
GO
UPDATE dbo.Klienci
SET Nazwisko = ' Kowalski'
WHERE Nazwisko = 'Nowak';

I sprawdzimy, czy informacje o nich trafiy do pliku audytu. Plik audytu ma format
binarny, ale serwer SQL 2008 zawiera funkcj tabelaryczn umoliwiajc jego odczytanie (dla poprawy czytelnoci z ponad 30 kolumn zwracanych przez funkcj
fn_get_audit_file wybralimy cztery i dodatkowo skorzystalimy ze sownika sys.dm_
audit_class_type_map):
REVERT;
SELECT AuditFile.action_id, AuditFile.succeeded,AuditFile.database_principal_name,
Dict.class_type_desc , AuditFile.statement
FROM sys.dm_server_audit_status AS AuditStatus
CROSS APPLY sys.fn_get_audit_file (
AuditStatus.audit_file_path, default, default) AS AuditFile
INNER JOIN sys.dm_audit_class_type_map AS Dict
ON Dict.class_type = AuditFile.class_type;
----------------------------------------

Cz I Administracja

304

AUSC
1
SERVER AUDIT
IMP
1
dbo
SQL LOGIN
EXECUTE AS LOGIN = 'Szelor';
SL
1
Szelor TABLE
SELECT * FROM dbo.Klienci;
IN
1
Szelor TABLE
INSERT INTO
[dbo].[Klienci]([Nazwisko],[NumerKarty]) values(@1,@2)
SL
1
Szelor TABLE
UPDATE [dbo].[Klienci] set [Nazwisko] = @1
WHERE [Nazwisko]=@2

Zmiana lokalizacji audytu wymaga jego zatrzymania i ponownego uruchomienia. Po


wykonaniu poniszych instrukcji ALTER SERVER AUDIT rekordy audytu bd zapisywane
w systemowym dzienniku aplikacji (rysunek 7.6):
USE master
ALTER SERVER AUDIT AuditR07 WITH (STATE = OFF);
ALTER SERVER AUDIT AuditR07 TO APPLICATION_LOG;
ALTER SERVER AUDIT AuditR07 WITH (STATE = ON);

Rysunek 7.6. Dziennik aplikacji systemu Windows z wpisami inspekcji pochodzcymi


z audytu serwera SQL

Vous aimerez peut-être aussi