Moduły rozproszonych wejść/wyjść firmy CREVIS – nowości w ...
Nowości w zakresie bezpieczeństwa w SQL Server 2016
-
Upload
kamil-nowinski -
Category
Presentations & Public Speaking
-
view
592 -
download
0
Transcript of Nowości w zakresie bezpieczeństwa w SQL Server 2016
Nowości w zakresie bezpieczeństwaSQL Server 2016
Kamil NowińskiPLSSUG Wrocław
[email protected]@NowinskiK
Tomasz LiberaPLSSUG Kraków
[email protected]@tomasz_libera
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)
Agenda• Row-Level Security• Dynamic Data Masking• Always Encrypted• Podsumowanie
Row Level Security
DEMO #1jak radzimy sobie bez SQL2016 i RLS
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)
DEMO #2Row Level Security
(Direct Connected Users)
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)
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
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
(…)
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
DEMO #3Row Level Security(CONTEXT_INFO)
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
Dynamic Data Masking
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
Dynamic Data Masking - przykłady• Credit Card Number
4462 7123 9921 7612 -> #### #### #### 7612• Social Security Number• PESEL
78100702880 -> 7810####880
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
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
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()')
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)')
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)')
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
Dynamic Data Masking – przypadki użycia
• DDM nie zapobiega operacji UPDATE• SELECT INTO / INSERT INTO• SQL Server Import and Export
DEMO #4Dynamic Data Masking
Dynamic Data Masking - ograniczenia
• Reguły maskowania nie mogą być zdefiniowane dla kolumn:• Zaszyfrowanych (Always Encrypted)• FILESTREAM• COLUMN_SET
Always Encrypted
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
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ć)
Always Encrypted – przypadki użycia
• Client and Data On-Premises• Client On-Premises with Data in Azure• Client and Data in Azure
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
Always Encrypted – klucze• Column encryption keys• Column master keys
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
DEMO #5Always Encrypted
Always Encrypted - ograniczenia• xml, • rowversion, • image, • ntext / text, • sql_variant, • hierarchyid,• geography, geometry, • typy użytkownika.
Migracja baz/tabel do nowej wersji
• DEMO: Import/Export• ADO.NET / .NET Framework 4.6
Always Encrypted - Widoki systemowe
• sys.column_master_key_definitions• sys.column_encryption_keys• sys.column_encryption_key_values• sys.columns
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
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
Skrypty
http://1drv.ms/1Q8xRTJ
Ź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
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
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
Sponsorzy strategiczni
Sponsorzy srebrni