Académique Documents
Professionnel Documents
Culture Documents
Administracja
i programowanie
Autor: Danuta Mendrala, Pawe Potasiski,
Marcin Szeliga, Damian Widera
ISBN: 978-83-246-2033-3
Format: 158x235, stron: 488
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
Spis treci
Wstp .............................................................................................. 9
Cz I
Administracja ............................................................... 15
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
Cz II
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 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
Cz I Administracja
266
Rysunek 7.1.
Rozbudowany model
bezpieczestwa
serwera SQL 2008
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,
Domylnie nazwa konta uytkownika jest taka sama jak nazwa loginu.
Rozdzia 7. Bezpieczestwo
267
Uwierzytelnianie
Kady uytkownik, zanim nawie sesj z serwerem, musi by uwierzytelniony. Tosamo uytkownikw moe by potwierdzana przez:
1. System operacyjny (tryb Windows Authentication). Zdecydowanie
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.
Authentication Mode.
4. Kliknij OK i uruchom ponownie serwer (mona to zrobi, klikajc jego nazw
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.
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
automatycznie zablokowane.
b) Ustawi wysoki prg blokady konta; ryzyko, e zoone haso zostanie
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
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
powizane serwery.
9. sysadmin czonkowie tej roli mog wykonywa dowolne operacje.
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
je haso5:
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;
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
zapasowe.
3. db_datareader jej czonkowie mog odczytywa zawarto tabel bazy
bazy danych.
7. db_denydatawriter nalecy do niej uytkownicy nie mog modyfikowa,
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
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
schematu:
DENY SELECT
ON HumanResources.vJobCandidate
TO Szelor;
Obu tych wad pozbawione jest alternatywne, przedstawione w dalszej czci rozdziau rozwizanie
polegajce na cyfrowym podpisywaniu moduw kodu.
Cz I Administracja
276
do jej wykonania:
CREATE PROCEDURE Person.GetAddress
AS
SELECT TOP 1 *
FROM Person.Address;
GO
GRANT EXECUTE ON Person.GetAddress
TO Szelor;
98011
Rozdzia 7. Bezpieczestwo
277
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
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.
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.
11
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)
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;
Cz I Administracja
282
SELECT name, algorithm_desc
FROM sys.symmetric_keys;
---------------------------------------##MS_DatabaseMasterKey##
TRIPLE_DES
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.
Rozdzia 7. Bezpieczestwo
283
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)')
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;
285
Cz I Administracja
286
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).
Rozdzia 7. Bezpieczestwo
287
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
Cz I Administracja
288
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
13
Rozdzia 7. Bezpieczestwo
289
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.
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
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
Rozdzia 7. Bezpieczestwo
291
eby inni uytkownicy, nie tylko administrator, mogli uywa tej funkcji, naley j cyfrowo podpisa.
Podpisywanie moduw kodu opisane zostao w nastpnym punkcie.
18
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
3. Poniewa ani uytkownik Szelor, ani rola public nie miay wystarczajcych
Rozdzia 7. Bezpieczestwo
293
Zasada dziaania
Szyfrowanie baz danych przebiega nastpujco:
1. Po wczeniu szyfrowania osobne procesy po kolei odczytuj, szyfruj
2. Podczas odczytywania strony sprawdzana jest jej suma kontrolna. Jeeli jest
19
Dane w plikach .mdf i .ndf zorganizowane s w strony 8-kilobajtowe (ang. Page), ktre s te jednostk
odczytu i zapisu.
20
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
21
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;
295
Cz I Administracja
296
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.
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
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
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
Cz I Administracja
300
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.
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
ma by automatycznie wyczony.
4. Lokalizacj rekordy audytu mog by zapisywane w pliku, systemowym
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
24
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);
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);
do monitorowania akcji.
2. Widok sys.dm_server_audit_status zwraca szczegowe informacje
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