![Page 1: Nowości w zakresie bezpieczeństwa w SQL Server 2016](https://reader035.vdocuments.mx/reader035/viewer/2022062901/58f0c8bb1a28ab2c258b4567/html5/thumbnails/1.jpg)
Nowości w zakresie bezpieczeństwaSQL Server 2016
Kamil NowińskiPLSSUG Wrocław
[email protected]@NowinskiK
Tomasz LiberaPLSSUG Kraków
[email protected]@tomasz_libera
![Page 2: Nowości w zakresie bezpieczeństwa w SQL Server 2016](https://reader035.vdocuments.mx/reader035/viewer/2022062901/58f0c8bb1a28ab2c258b4567/html5/thumbnails/2.jpg)
Kamil Nowiński Tomasz Libera
• DB Developer w WSZiB w Krakowie• Lider PLSSUG Kraków• Członek Zarządu Stowarzyszenia PLSSUG• Certyfikaty:
• MCT• MCSE Data Platform • MCITP-DBA, MCITP-DD
• Zainteresowania:• Pasjonat kolarstwa górskiego
i maratonów MTB
• Senior SQL/BI Developer w AlternativeNetworks (UK)
• Programista > 20 lat (VB6, VB.NET, C#, .NET Framework)
• Ponad 10-letnie doświadczenie jako DEV/DBA• Członek komisji rewizyjnej PLSSUG, • Certyfikaty SQL Server:
MCITP, MCP, MCTS, MCSA, MCSE Data Platform
• Zainteresowania:• Rower, bieganie• Fotografia cyfrowa
(Nikon D-90, Adobe Lightroom)
![Page 3: Nowości w zakresie bezpieczeństwa w SQL Server 2016](https://reader035.vdocuments.mx/reader035/viewer/2022062901/58f0c8bb1a28ab2c258b4567/html5/thumbnails/3.jpg)
Agenda• Row-Level Security• Dynamic Data Masking• Always Encrypted• Podsumowanie
![Page 4: Nowości w zakresie bezpieczeństwa w SQL Server 2016](https://reader035.vdocuments.mx/reader035/viewer/2022062901/58f0c8bb1a28ab2c258b4567/html5/thumbnails/4.jpg)
Row Level Security
![Page 5: Nowości w zakresie bezpieczeństwa w SQL Server 2016](https://reader035.vdocuments.mx/reader035/viewer/2022062901/58f0c8bb1a28ab2c258b4567/html5/thumbnails/5.jpg)
DEMO #1jak radzimy sobie bez SQL2016 i RLS
![Page 6: Nowości w zakresie bezpieczeństwa w SQL Server 2016](https://reader035.vdocuments.mx/reader035/viewer/2022062901/58f0c8bb1a28ab2c258b4567/html5/thumbnails/6.jpg)
Row-Level Security - wprowadzenie• Zabezpieczanie danych na poziomie wiersza, realizowane poprzez• Security Predicate Filter (inline TVF)• Security Policy (Polityka bezpieczeństwa)
• Praktyczne scenariusze• Możliwości dostępne wcześniej w Azure SQL Database• Inne RDBMS posiadają swoje odpowiedniki• Row Security Policies (PostgreSQL 9.5)• Oracle Label Security (Oracle 10g)
![Page 7: Nowości w zakresie bezpieczeństwa w SQL Server 2016](https://reader035.vdocuments.mx/reader035/viewer/2022062901/58f0c8bb1a28ab2c258b4567/html5/thumbnails/7.jpg)
DEMO #2Row Level Security
(Direct Connected Users)
![Page 8: Nowości w zakresie bezpieczeństwa w SQL Server 2016](https://reader035.vdocuments.mx/reader035/viewer/2022062901/58f0c8bb1a28ab2c258b4567/html5/thumbnails/8.jpg)
Row-Level Security - predykaty• Dwa typy predykatów bezpieczeństwa:• Predykaty filtrowania podczas operacji odczytu
(SELECT, UPDATE, DELETE)• Predykaty blokujące operacje zapisu naruszające predykat
(AFTER INSERT, AFTER UPDATE, BEFORE UPDATE, BEFORE DELETE)
![Page 9: Nowości w zakresie bezpieczeństwa w SQL Server 2016](https://reader035.vdocuments.mx/reader035/viewer/2022062901/58f0c8bb1a28ab2c258b4567/html5/thumbnails/9.jpg)
Row-Level Security – uprawnieniaZestaw uprawnień wymagany do zarządzania politykami Security Policies:• ALTER ANY SECURITY POLICY• ALTER – do schematu• Uprawnienia dla każdego dodanego predykatu:• SELECT & REFERENCES – do funkcji użytej jako predykat• REFERENCES – do tabeli docelowej powiązanej z polityką• REFERENCES – do każdej kolumny użytej jako argument funkcji
![Page 10: Nowości w zakresie bezpieczeństwa w SQL Server 2016](https://reader035.vdocuments.mx/reader035/viewer/2022062901/58f0c8bb1a28ab2c258b4567/html5/thumbnails/10.jpg)
Ograniczenia• FTS bazuje na niefiltrowanych danych CTP 2.4!• DBCC SHOW_STATISTICS pokazuje dane nieprzefiltrowane CTP 2.4!• Blokowanie wstawianych rekordów CTP 3!• RLS jest niekompatybilny z memory-optimized tables (In-Memory
OLTP)• RLS jest niekompatybilny z CDC• Nie można tworzyć widoków indeksowanych w oparciu o tabele z RLS• Zwykle użytkownicy łączą się przy pomocy tego samego użytkownika
(…)
![Page 11: Nowości w zakresie bezpieczeństwa w SQL Server 2016](https://reader035.vdocuments.mx/reader035/viewer/2022062901/58f0c8bb1a28ab2c258b4567/html5/thumbnails/11.jpg)
Przechowywanie danych sesji• Zapis do sesji
• SET CONTEXT_INFO – pojedyncza wartość• EXEC sp_set_session_context @key = N'x', @value = 'y', @read_only = 1;
• Odczyt• CONTEXT_INFO()• SESSION_CONTEXT(`key`)
• Możliwość odwołania się po zakończeniu bieżącego wsadu/procedury...• Przydatny w celu przechowywania danych zalogowanego użytkownika• Scenariusz: aplikacja nawiązuje połączenie z bazą, zapisuje do sesji
identyfikator zalogowanego użytkownika, który sprawdzamy w predykacie filtrującym
![Page 12: Nowości w zakresie bezpieczeństwa w SQL Server 2016](https://reader035.vdocuments.mx/reader035/viewer/2022062901/58f0c8bb1a28ab2c258b4567/html5/thumbnails/12.jpg)
DEMO #3Row Level Security(CONTEXT_INFO)
![Page 13: Nowości w zakresie bezpieczeństwa w SQL Server 2016](https://reader035.vdocuments.mx/reader035/viewer/2022062901/58f0c8bb1a28ab2c258b4567/html5/thumbnails/13.jpg)
RLS - Dobre praktyki• Zalecane jest utworzenie odrębnego schematu na Security Policy i
Security Predicate Filter• ALTER ANY SECURITY POLICY to uprawnienie dla wysoko
uprawnionych użytkowników zarządzających uprawnieniami. • Unikaj konwersji typów, rekursji, licznych JOINÓW oraz generalnie
kosztownych ze względu na wydajność w funkcji będącej predykatem• Utwórz indeks na kolumnie, która jest filtrowana w Security Predicate• Wydajność RLS porównywana z filtrowaniem dostępu przez widoki
![Page 14: Nowości w zakresie bezpieczeństwa w SQL Server 2016](https://reader035.vdocuments.mx/reader035/viewer/2022062901/58f0c8bb1a28ab2c258b4567/html5/thumbnails/14.jpg)
Dynamic Data Masking
![Page 15: Nowości w zakresie bezpieczeństwa w SQL Server 2016](https://reader035.vdocuments.mx/reader035/viewer/2022062901/58f0c8bb1a28ab2c258b4567/html5/thumbnails/15.jpg)
Dynamic Data Masking - wprowadzenie
• „Dynamiczne maskowanie danych”• Ogranicza prezentację wrażliwych danych dla osób niepowołanych• Pozwala kontrolować fragment ukrywanych wartości• Niezależne od warstwy aplikacji• Dane w bazie danych pozostają nienaruszone• Proces maskowania danych w wynikach zapytania• Możliwość zaaplikowania reguł bez zmian w istniejących aplikacjach• Reguły stosowane na wybranych kolumnach tabeli
![Page 16: Nowości w zakresie bezpieczeństwa w SQL Server 2016](https://reader035.vdocuments.mx/reader035/viewer/2022062901/58f0c8bb1a28ab2c258b4567/html5/thumbnails/16.jpg)
Dynamic Data Masking - przykłady• Credit Card Number
4462 7123 9921 7612 -> #### #### #### 7612• Social Security Number• PESEL
78100702880 -> 7810####880
![Page 17: Nowości w zakresie bezpieczeństwa w SQL Server 2016](https://reader035.vdocuments.mx/reader035/viewer/2022062901/58f0c8bb1a28ab2c258b4567/html5/thumbnails/17.jpg)
Dynamic Data Masking - założenia• Ograniczenie ujawniania danych niepowołanym użytkownikom
ALE• NIE zapobiega przed dostępem do tych danych użytkownikom bazy
danych łączących się bezpośrednio do bazy i posiadającym stosowne uprawnienie• Uzupełnienie innych funkcjonalności SQL Server:• Auditing• Encryption• Row Level Security
![Page 18: Nowości w zakresie bezpieczeństwa w SQL Server 2016](https://reader035.vdocuments.mx/reader035/viewer/2022062901/58f0c8bb1a28ab2c258b4567/html5/thumbnails/18.jpg)
Dynamic Data Masking – reguły maskujące
• Funkcja Default: Pełne maskowanie zgodnie z typem danych• Zwraca XXXX dla typów tekstowych• Zwraca 0 (zero) dla typów numerycznych• Zwraca 2000-01-01 dla danych typów data• Zwraca 0 (zero) dla typów binarnych
Przykład:Phone# varchar(12) MASKED WITH (FUNCTION = 'default()') NULL
![Page 19: Nowości w zakresie bezpieczeństwa w SQL Server 2016](https://reader035.vdocuments.mx/reader035/viewer/2022062901/58f0c8bb1a28ab2c258b4567/html5/thumbnails/19.jpg)
Dynamic Data Masking – reguły maskujące
• Funkcja Email:• Zwraca pierwszą literę prawdziwego adresu email• Na końcu ciągu zawsze pokazuje „.com”• [email protected]
Przykłady:Email varchar(100) MASKED WITH (FUNCTION = 'email()') NULL
ALTER COLUMN Email ADD MASKED WITH (FUNCTION = 'email()')
![Page 20: Nowości w zakresie bezpieczeństwa w SQL Server 2016](https://reader035.vdocuments.mx/reader035/viewer/2022062901/58f0c8bb1a28ab2c258b4567/html5/thumbnails/20.jpg)
Dynamic Data Masking – reguły maskujące
• Funkcja Custom String: maskowanie częściowe:• Pozwala określić liczbę początkowych znaków ciągu (prefix)• Fragment stały „pośrodku” ([padding])• Liczba znaków odkrytych na końcu ciągu (suffix)Przykłady:ALTER COLUMN [PESEL]
ADD MASKED WITH (FUNCTION = 'partial(4,"####",3)')ALTER COLUMN [Phone Number]
ADD MASKED WITH (FUNCTION = 'partial(5,"XXXXXXX",0)') ALTER COLUMN [Social Security Number]
ADD MASKED WITH (FUNCTION = 'partial(0,"XXX-XX-",4)')
![Page 21: Nowości w zakresie bezpieczeństwa w SQL Server 2016](https://reader035.vdocuments.mx/reader035/viewer/2022062901/58f0c8bb1a28ab2c258b4567/html5/thumbnails/21.jpg)
Dynamic Data Masking – reguły maskujące
• Funkcja Random:• Maskowanie wartości numerycznych• Pozwala określić zakres, z którego będą losowane wartości maskujące
Przykłady:Account_Number bigint
MASKED WITH (FUNCTION = 'random([start range], [end range])')
ALTER COLUMN [Month] ADD MASKED WITH (FUNCTION = 'random(1, 12)')
![Page 22: Nowości w zakresie bezpieczeństwa w SQL Server 2016](https://reader035.vdocuments.mx/reader035/viewer/2022062901/58f0c8bb1a28ab2c258b4567/html5/thumbnails/22.jpg)
Dynamic Data Masking - uprawnienia
• Zakładanie maskowania dla tabeli:• ALTER ANY MASK• ALTER
• Pobieranie danych:• SELECT – dla tabeli• UNMASK – pozwoli użytkownikowi odczytać dane bez użycia maskowania
![Page 23: Nowości w zakresie bezpieczeństwa w SQL Server 2016](https://reader035.vdocuments.mx/reader035/viewer/2022062901/58f0c8bb1a28ab2c258b4567/html5/thumbnails/23.jpg)
Dynamic Data Masking – przypadki użycia
• DDM nie zapobiega operacji UPDATE• SELECT INTO / INSERT INTO• SQL Server Import and Export
![Page 24: Nowości w zakresie bezpieczeństwa w SQL Server 2016](https://reader035.vdocuments.mx/reader035/viewer/2022062901/58f0c8bb1a28ab2c258b4567/html5/thumbnails/24.jpg)
DEMO #4Dynamic Data Masking
![Page 25: Nowości w zakresie bezpieczeństwa w SQL Server 2016](https://reader035.vdocuments.mx/reader035/viewer/2022062901/58f0c8bb1a28ab2c258b4567/html5/thumbnails/25.jpg)
Dynamic Data Masking - ograniczenia
• Reguły maskowania nie mogą być zdefiniowane dla kolumn:• Zaszyfrowanych (Always Encrypted)• FILESTREAM• COLUMN_SET
![Page 26: Nowości w zakresie bezpieczeństwa w SQL Server 2016](https://reader035.vdocuments.mx/reader035/viewer/2022062901/58f0c8bb1a28ab2c258b4567/html5/thumbnails/26.jpg)
Always Encrypted
![Page 27: Nowości w zakresie bezpieczeństwa w SQL Server 2016](https://reader035.vdocuments.mx/reader035/viewer/2022062901/58f0c8bb1a28ab2c258b4567/html5/thumbnails/27.jpg)
Always Encrypted• Przeznaczone do zabezpieczania danych wrażliwych• PESEL, Numer karty kredytowej, NIN, SSN
• Umożliwia podział ról pomiędzy:• Właściciela danych (z pełnymi prawami)• Administratora danych (bez prawa wglądu)
• Dostępne: SQL Server 2016 (CTP 3), Azure SQL Database (Preview)• Transparentne dla aplikacji klienckiej
![Page 28: Nowości w zakresie bezpieczeństwa w SQL Server 2016](https://reader035.vdocuments.mx/reader035/viewer/2022062901/58f0c8bb1a28ab2c258b4567/html5/thumbnails/28.jpg)
Always Encrypted• Szyfrowanie wybranych kolumn w tabeli• Aplikacja kliencka i SQL Server zarządzają kluczami kryptograficznymi• Aby odszyfrować dane potrzebujesz właściwy klucz• DBA również nie posiada dostępu do zaszyfrowanych danych• Dane są zawsze zaszyfrowane (Always Encrypted):• Na nośniku fizycznym (dysk)• Pamięci serwera • W trakcie transportu do Klienta (sieć)
![Page 29: Nowości w zakresie bezpieczeństwa w SQL Server 2016](https://reader035.vdocuments.mx/reader035/viewer/2022062901/58f0c8bb1a28ab2c258b4567/html5/thumbnails/29.jpg)
Always Encrypted – przypadki użycia
• Client and Data On-Premises• Client On-Premises with Data in Azure• Client and Data in Azure
![Page 30: Nowości w zakresie bezpieczeństwa w SQL Server 2016](https://reader035.vdocuments.mx/reader035/viewer/2022062901/58f0c8bb1a28ab2c258b4567/html5/thumbnails/30.jpg)
Always Encrypted – metody szyfrowania
Deterministyczne (deterministic)+ Możliwe operacje:• Indeksowanie,• Grupowanie,• Filtrowanie,• Złączenia (JOIN)
- Ryzyko odczytania danych
Losowe (randomized)- Możliwe operacje: Żadne+ Bardziej bezpieczna
![Page 31: Nowości w zakresie bezpieczeństwa w SQL Server 2016](https://reader035.vdocuments.mx/reader035/viewer/2022062901/58f0c8bb1a28ab2c258b4567/html5/thumbnails/31.jpg)
Always Encrypted – klucze• Column encryption keys• Column master keys
![Page 32: Nowości w zakresie bezpieczeństwa w SQL Server 2016](https://reader035.vdocuments.mx/reader035/viewer/2022062901/58f0c8bb1a28ab2c258b4567/html5/thumbnails/32.jpg)
Always Encrypted – biblioteka Kliencka
• Automatyczne szyfrowanie danych przez aplikacje klienckie• Brak konieczności zmian
w aplikacji klienckiej (oprócz połączenia)• Nowszy sterownik ADO.NET
(SqlClient w .NET Framework 4.6)• Varbinary(max) gdy AE wyłączony
po stronie Klienta
![Page 33: Nowości w zakresie bezpieczeństwa w SQL Server 2016](https://reader035.vdocuments.mx/reader035/viewer/2022062901/58f0c8bb1a28ab2c258b4567/html5/thumbnails/33.jpg)
DEMO #5Always Encrypted
![Page 34: Nowości w zakresie bezpieczeństwa w SQL Server 2016](https://reader035.vdocuments.mx/reader035/viewer/2022062901/58f0c8bb1a28ab2c258b4567/html5/thumbnails/34.jpg)
Always Encrypted - ograniczenia• xml, • rowversion, • image, • ntext / text, • sql_variant, • hierarchyid,• geography, geometry, • typy użytkownika.
![Page 35: Nowości w zakresie bezpieczeństwa w SQL Server 2016](https://reader035.vdocuments.mx/reader035/viewer/2022062901/58f0c8bb1a28ab2c258b4567/html5/thumbnails/35.jpg)
Migracja baz/tabel do nowej wersji
• DEMO: Import/Export• ADO.NET / .NET Framework 4.6
![Page 36: Nowości w zakresie bezpieczeństwa w SQL Server 2016](https://reader035.vdocuments.mx/reader035/viewer/2022062901/58f0c8bb1a28ab2c258b4567/html5/thumbnails/36.jpg)
Always Encrypted - Widoki systemowe
• sys.column_master_key_definitions• sys.column_encryption_keys• sys.column_encryption_key_values• sys.columns
![Page 37: Nowości w zakresie bezpieczeństwa w SQL Server 2016](https://reader035.vdocuments.mx/reader035/viewer/2022062901/58f0c8bb1a28ab2c258b4567/html5/thumbnails/37.jpg)
PytanieJakie wyniki można uzyskać stosując funkcję Custom String w Dynamic Data Masking na kolumnie PESEL (string)?
a) 7810XXXX990b) XXXX9799XXXc) #########90d) Wszystkie powyższe
![Page 38: Nowości w zakresie bezpieczeństwa w SQL Server 2016](https://reader035.vdocuments.mx/reader035/viewer/2022062901/58f0c8bb1a28ab2c258b4567/html5/thumbnails/38.jpg)
OdpowiedźJakie wyniki można uzyskać stosując funkcję Custom String w Dynamic Data Masking na kolumnie PESEL (string)?
a) 7810XXXX990b) XXXX9799XXXc) #########90d) Wszystkie powyższe
![Page 39: Nowości w zakresie bezpieczeństwa w SQL Server 2016](https://reader035.vdocuments.mx/reader035/viewer/2022062901/58f0c8bb1a28ab2c258b4567/html5/thumbnails/39.jpg)
Skrypty
http://1drv.ms/1Q8xRTJ
![Page 40: Nowości w zakresie bezpieczeństwa w SQL Server 2016](https://reader035.vdocuments.mx/reader035/viewer/2022062901/58f0c8bb1a28ab2c258b4567/html5/thumbnails/40.jpg)
Źródła• https://msdn.microsoft.com/en-us/library/mt147923.aspx• https://msdn.microsoft.com/en-gb/library/mt163865.aspx• http
://blogs.microsoft.com/next/2015/05/27/always-encrypted-sql-server-2016-includes-new-advances-that-keeps-data-safer/• https://msdn.microsoft.com/en-us/library/dn765131.aspx
![Page 41: Nowości w zakresie bezpieczeństwa w SQL Server 2016](https://reader035.vdocuments.mx/reader035/viewer/2022062901/58f0c8bb1a28ab2c258b4567/html5/thumbnails/41.jpg)
RLS - materiały• MSDN - Row-Level Security
https://msdn.microsoft.com/en-us/library/dn765131.aspx• CodePlex - RLS Samples
https://rlssamples.codeplex.com/• SQL Server Security Blog
http://blogs.msdn.com/b/sqlsecurity/• Channel 9 – Data Exposed
• SQL Server 2016 Row Level Securityhttps://channel9.msdn.com/Shows/Data-Exposed/SQL-Server-2016-Row-Level-Security
• Row Level Security Updateshttps://channel9.msdn.com/Shows/Data-Exposed/Row-Level-Security-Updates
• SQL Server 2016 CTP 2 oczami MVP (Marcin Szeliga) - Nowości z zakresu bezpieczeństwahttps://channel9.msdn.com/Series/SQL-Server-2016-CTP-2-oczami-MVP/Nowosci-z-zakresu-bezpieczenstwa
![Page 42: Nowości w zakresie bezpieczeństwa w SQL Server 2016](https://reader035.vdocuments.mx/reader035/viewer/2022062901/58f0c8bb1a28ab2c258b4567/html5/thumbnails/42.jpg)
Always Encrypted - materiały• SQL Server Security Blog
http://blogs.msdn.com/b/sqlsecurity/• Channel 9 – Data Exposed - SQL Server 2016 Always Encrypted
https://channel9.msdn.com/Shows/Data-Exposed/SQL-Server-2016-Always-Encrypted• SQL Server 2016 CTP 2 oczami MVP (Marcin Szeliga) - Nowości z
zakresu bezpieczeństwahttps://channel9.msdn.com/Series/SQL-Server-2016-CTP-2-oczami-MVP/Nowosci-z-zakresu-bezpieczenstwa• Overview and Roadmap for Microsoft SQL Server Security.
http://channel9.msdn.com/Events/Ignite/2015/BRK2570
![Page 43: Nowości w zakresie bezpieczeństwa w SQL Server 2016](https://reader035.vdocuments.mx/reader035/viewer/2022062901/58f0c8bb1a28ab2c258b4567/html5/thumbnails/43.jpg)
Sponsorzy strategiczni
Sponsorzy srebrni