Bazy Danych i Systemy informacyjne Wykład 5. Piotr Syga

Podobne dokumenty
Bazy Danych i Systemy informacyjne Wykład 5. Piotr Syga

Wprowadzenie do BD Operacje na bazie i tabelach Co poza zapytaniami? Algebra relacji. Bazy Danych i Systemy informacyjne Wykład 2.

Instrukcja podwaja zarobki osób, których imiona zaczynają się P i dalsze litery alfabetu zakładamy, że takich osbób jest kilkanaście.

Język SQL, zajęcia nr 1

Relacyjne bazy danych. Podstawy SQL

Bazy danych i usługi sieciowe

strukturalny język zapytań używany do tworzenia i modyfikowania baz danych oraz do umieszczania i pobierania danych z baz danych

Wyzwalacz - procedura wyzwalana, składowana fizycznie w bazie, uruchamiana automatycznie po nastąpieniu określonego w definicji zdarzenia

Programowanie w SQL procedury i funkcje. UWAGA: Proszę nie zapominać o prefiksowaniu nazw obiektów ciągiem [OLIMP\{nr indeksu}] Funkcje użytkownika

Języki programowania wysokiego poziomu. PHP cz.4. Bazy danych

Relacyjne bazy danych. Podstawy SQL

Bazy Danych i Usługi Sieciowe

Wykład 5. SQL praca z tabelami 2

Wprowadzenie do JDBC z wykorzystaniem bazy H2

Ćwiczenia laboratoryjne nr 11 Bazy danych i SQL.

PRZESTRZENNE BAZY DANYCH WYKŁAD 2

Obrona przed SQL-injection w aplikacjach Java/JEE

Systemowe aspekty baz

DECLARE VARIABLE zmienna1 typ danych; BEGIN

Odnawialne Źródła Energii I rok. Tutorial PostgreSQL

Instytut Mechaniki i Inżynierii Obliczeniowej Wydział Mechaniczny Technologiczny Politechnika Śląska

Bazy danych. Wykład IV SQL - wprowadzenie. Copyrights by Arkadiusz Rzucidło 1

E.14 Bazy Danych cz. 18 SQL Funkcje, procedury składowane i wyzwalacze

Systemowe aspekty baz danych

Blaski i cienie wyzwalaczy w relacyjnych bazach danych. Mgr inż. Andrzej Ptasznik

Bazy danych. Bazy danych. Podstawy języka SQL. Dr inż. Paweł Kasprowski.

6. Bezpieczeństwo przy współpracy z bazami danych

CREATE USER

Programowanie Obiektowe Java

Programowanie Obiektowe Java

Zarządzanie bazą danych. Bazy Danych i Systemy informacyjne Wykład 4. Piotr Syga

Metody dostępu do danych

Laboratorium nr 4. Temat: SQL część II. Polecenia DML

Programowanie MSQL. show databases; - pokazanie jakie bazy danych są dostępne na koncie

Używany kiedy pełna treść instrukcji SQL jest nieznana przed uruchomieniem programu.

Przykłady najlepiej wykonywać od razu na bazie i eksperymentować z nimi.

Wykład 05 Bazy danych

Instalacja MySQL.

Projektowanie systemów baz danych

Przykład 3 Zdefiniuj w bazie danych hurtownia_nazwisko przykładową funkcję użytkownika fn_rok;

SQL 4 Structured Query Lenguage

Ćwiczenie zapytań języka bazy danych PostgreSQL

P o d s t a w y j ę z y k a S Q L

Sprawdzenie poziomu izolacji transakcji (w aktualnym połączeniu):

mysql> UPDATE user SET Password=PASSWORD('pass') WHERE user='root'; Query OK, 2 rows affected (0.05 sec) Rows matched: 2 Changed: 2 Warnings: 0

w PL/SQL bloki nazwane to: funkcje, procedury, pakiety, wyzwalacze

Systemy GIS Tworzenie zapytań w bazach danych

Hurtownia Świętego Mikołaja projekt bazy danych

PLAN WYKŁADU BAZY DANYCH PODSTAWOWE KWESTIE BEZPIECZEŃSTWA OGRANICZENIA DOSTĘPU DO DANYCH

SQL :: Data Definition Language

Administracja i programowanie pod Microsoft SQL Server 2000

Wykład 8. SQL praca z tabelami 5

SQL z perspektywy hakera - czy Twoje dane są bezpieczne? Krzysztof Bińkowski MCT,CEI,CEH,ECSA,ECIH,CLFE,MCSA,MCSE..

PHP może zostać rozszerzony o mechanizmy dostępu do różnych baz danych:

CREATE DATABASE ksiegarnia_internetowa DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;

Oracle PL/SQL. Paweł Rajba.

ACESS- zadania z wykorzystaniem poleceń SQL

Wstęp Wprowadzenie do BD Podstawy SQL. Bazy Danych i Systemy informacyjne Wykład 1. Piotr Syga

SQL Server. Odtwarzanie baz danych.

T-SQL dla każdego / Alison Balter. Gliwice, cop Spis treści. O autorce 11. Dedykacja 12. Podziękowania 12. Wstęp 15

SQL Server i T-SQL w mgnieniu oka : opanuj język zapytań w 10 minut dziennie / Ben Forta. Gliwice, Spis treści

Baza danych do przechowywania użytkowników

Bezpieczeństwo systemów komputerowych

Projektowani Systemów Inf.

Oracle PL/SQL. Paweł Rajba.

Zbiór pytań nr 5. 2 Które stwierdzenie opisuje najlepiej zbiór uprawnień dostępny po wykonaniu

Plan ćwiczenia. Rozdział 16 Uwierzytelnianie i autoryzacja w bazie danych. Użytkownicy i schematy (1) Użytkownicy i schematy (2) baza danych: ZESP99

Informatyka (5) SQL. dr inż. Katarzyna Palikowska Katedra Transportu Szynowego p. 4 Hydro

W SQL Serwerze 2008 wprowadzono parametry tablicowe (Table Valued Parameters - TVP).

Podejście obiektowe do relacyjnych baz danych Hibernate.

Pakiety podprogramów Dynamiczny SQL

Wykład 6. SQL praca z tabelami 3

3 Przygotowali: mgr inż. Barbara Łukawska, mgr inż. Maciej Lasota

SYSTEM INFORMATYCZNY KS-SEW

Bazy danych 10. SQL Widoki

Informatyka I. Programowanie aplikacji bazodanowych w języku Java. Standard JDBC.

Wykład 5 funkcje i procedury pamiętane widoki (perspektywy) wyzwalacze

SQL (ang. Structured Query Language)

Wybrane ataki na urządzenia sieciowe Secure Michał Sajdak, Securitum sekurak.pl

Paweł Rajba

Uprawnienia, role, synonimy

Bazy danych. Dr inż. Paweł Kasprowski

PHP: bazy danych, SQL, AJAX i JSON

Wybrane problemy bezpieczeństwa w urządzeniach sieciowych SEConference Michał Sajdak, Securitum sekurak.pl

15. Funkcje i procedury składowane PL/SQL

KOLEKCJE - to typy masowe,zawierające pewną liczbę jednorodnych elementów

Bazy Danych - Instrukcja do Ćwiczenia laboratoryjnego nr 8

77. Modelowanie bazy danych rodzaje połączeń relacyjnych, pojęcie klucza obcego.

Bazy danych. Polecenia SQL

Jerzy Nawrocki, Wprowadzenie do informatyki

Plan ćwiczenia. Rozdział 16 Uwierzytelnianie i autoryzacja w bazie danych. UŜytkownicy i schematy (2) UŜytkownicy i schematy (1) baza danych: ZESP99

Trigger jest obiektem związanym z tablicą, który aktywuje się gdy do tablicy następuje odpowiednie zapytanie.

Administracja bazami danych

Aplikacje bazodanowe. dr inż. Arkadiusz Mirakowski

Literatura: SQL Ćwiczenia praktyczne Autor: Marcin Lis Wydawnictwo: Helion. Autor: Joanna Karwowska

1. Sprawdzenie ustawień konfiguracyjnych. Uruchomienie wiersza poleceń:..\ścieżka\bin>mysqladmin variables

Autor: Joanna Karwowska

Transkrypt:

Bazy Danych i Systemy informacyjne Wykład 5 Piotr Syga 13.11.2017

PREPARE przypomnienie Przygotowanie zapytania dynamicznego Wcześniejszy przykład SET @kol = "kolor"; SET @str = CONCAT("SELECT ", @kol, "FROM A"); PREPARE stmt FROM @str; EXECUTE stmt; DEALLOCATE PREPARE stmt;

PREPARE przypomnienie Przygotowanie zapytania dynamicznego Analogiczne zapytanie SET @age = 50; SET @str = CONCAT("SELECT * FROM Muzycy WHERE wiek >", @age,";"); PREPARE stmt FROM @str; EXECUTE stmt; DEALLOCATE PREPARE stmt;

PREPARE przypomnienie Przygotowanie zapytania dynamicznego Analogiczne zapytanie zapisane inaczej SET @age = 50; SET @str = CONCAT("SELECT * FROM Muzycy WHERE wiek >? ;"); PREPARE stmt FROM @str; EXECUTE stmt USING @age; DEALLOCATE PREPARE stmt;

SQL-Injection Idea wykorzystanie pól tekstowych w aplikacji do wprowadzenia własnego kodu zalogowanie się bez uprawnień, pozyskanie lub modyfikacja danych uniemożliwienie dostępu lub zmienienie działania kodu wnioskowanie na podstawie komunikatów błędów

SQL-Injection Przykład autoryzacji Logowanie ustalonego użytkownika SELECT userid FROM users WHERE name= Bob AND password= BobbyB ;

SQL-Injection Przykład autoryzacji Logowanie ustalonego użytkownika SELECT userid FROM users WHERE name= Bob AND password= BobbyB ; Procedura autoryzująca CREATE PROCEDURE auth (IN usr char(50), IN pass char(50), OUT ID INT) SELECT userid INTO ID FROM users WHERE name=usr AND password=pass; Wywołanie: CALL auth ( Bob, BobbyB,@uid) niewygodne wywołanie z cudzysłowem. Zapytanie skonkatenowane SET @str=concat("select userid FROM users WHERE name= ",@usr, AND password= ",@pass, ;");

SQL-Injection Próby logowania Nie znając danych logowania, chcemy spełnić warunek logiczny w WHERE, by zwrócone zostało odpowiednie ID i nastąpiło zalogowanie Podajmy jako nazwę użytkownika oraz hasło ciąg: OR = Zmienna @str otrzyma wartość "SELECT userid FROM users WHERE name= OR = AND password= OR = ;" Jeśli proces autoryzacji nie został zabezpieczony zostaniemy zalogowani jako pierwszy (userid) użytkownik w bazie, często wyświetlane przywitanie lub wgląd do danych podają nazwę konta.

SQL-Injection Co jeśli chcemy poznać hasło? Część funkcjonalności może wymagać potwierdzenia hasłem, co więcej kombinacja login(email) hasło może być wykorzystywana na wielu portalach W przypadku, gdy użytkownik aplikacji połączony jest z kontem administratora bazy: SELECT * FROM mysql.user Bruteforce: Zadajemy pytania tak/nie do bazy danych: Czy hasło Boba zawiera B : Username - U Password - OR EXISTS(SELECT * FROM users WHERE name= Bob AND password LIKE %B% ) AND = Czy hasło Boba zawiera b po B :... LIKE %B%b%... Czy o jest drugą literą hasła:... LIKE _o%...

SQL-Injection Poznanie zawartości bazy W analogiczny sposób do zgadywania hasła możemy dostać odpowiedź na inne pytania tak/nie, np.: Czy istnieje użytkownik o nazwie na A : Password - OR EXISTS(SELECT * FROM users WHERE name LIKE A% ) AND = Czy istnieje użytkownik o takim samym haśle co Bob: Password - OR EXISTS(SELECT * FROM users ub JOIN users u WHERE ub.name= Bob AND u.password=ub.password AND u.name<>ub.name) AND = Czy w bazie jest więcej niż 1000 użytkowników: Password - OR (SELECT COUNT(*) FROM users)>1000 AND = Czy w bazie DBLAB jest tabela users: Password - OR EXISTS(SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA= DBLAB AND TABLE_NAME= users ) AND =

SQL-Injection Poznanie zawartości bazy W analogiczny sposób do zgadywania hasła możemy dostać odpowiedź na inne pytania tak/nie, np.: Czy istnieje użytkownik o nazwie na A : Password - OR EXISTS(SELECT * FROM users WHERE name LIKE A% ) AND = Czy istnieje użytkownik o takim samym haśle co Bob: Password - OR EXISTS(SELECT * FROM users ub JOIN users u WHERE ub.name= Bob AND u.password=ub.password AND u.name<>ub.name) AND = Czy w bazie jest więcej niż 1000 użytkowników: Password - OR (SELECT COUNT(*) FROM users)>1000 AND = Jak sprawdzić czy każdy użytkownik w bazie ma inne hasło? Czy w bazie DBLAB jest tabela users: Password - OR EXISTS(SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA= DBLAB AND TABLE_NAME= users ) AND =

Rozpoznanie wrażliwości Próba ataku w ciemno Wiedza początkowa SELECT kolumny FROM tabela WHERE kolumna= textfield ; 1 Sprawdzenie czy pole jest wrażliwe na atak: shaq o neal user unknown vs syntax error 2 Sprawdzenie reakcji: user OR = email (pm) vs user unknown vs error 3 Rozpoznanie kolumny: u AND (email IS NULL) AND = alternatywnie u AND email IS NULL; - - sprawdzamy inne pola: name, id, lastname, fullname, login, password,...

Rozpoznanie wrażliwości Próba ataku w ciemno - cd. 4 Rozpoznanie tabel: u AND (SELECT COUNT(*) FROM users)>0; - - sprawdzamy inne pola:accounts, logs, history,... 5 Sprawdzamy na której tabeli wykonywane jest oryginalne zapytanie: u AND users.name IS NULL; - - 6 Sprawdzamy istnienie użytkowników: u OR name LIKE %Bob%, możemy spróbować hasła. 7 Sprawdzamy możliwość dodania: u ; INSERT INTO users ( login, email, passwd, name ) VALUES ( Rogue, Daemon@RedKeep.com, heir, Daemon ); - - 8 Sprawdzamy modyfikacje: u ; UPDATE users SET email = Daemon@RedKeep.com WHERE email LIKE %@RedKeep.com

Rozpoznanie wrażliwości Próba ataku w ciemno - cd. A po poznaniu danych wrażliwych i znudzeniu się bazą...

Rozpoznanie wrażliwości Próba ataku w ciemno - cd. A po poznaniu danych wrażliwych i znudzeniu się bazą... 9... być może coś więcej: u ; DROP TABLE users; - -

Rozpoznanie wrażliwości Zapobieganie Sanityzacja danych: white list vs black list Uwaga: O neal vs... WHERE id = 1000 OR 1=1 Escape:... \ ; DROP TABLE users; - - Zarządzanie parametrami (JDBC): Statement stmt = connection.createstatement(); ResultSet rs = stmt.executequery( SELECT id FROM users WHERE name = + txtfield); // ; DROP TABLE users; - - zmieniamy na: PreparedStatement stmt = connection.preparestatement( SELECT id FROM users WHERE name =? ); stmt.setstring(1, txtfield); ResultSet rs = ps.executequery(); Zarządzanie prawami dostępu Zarządzanie bazą danych przez procedury składowane Odpowiednia konfiguracja komunikatów o błędach

Logowanie Tworzenie logów Przy konfiguracji IDE i servera (np. mysqld log=log_file) ustalamy zakres oraz path plików z logami, pliki sql_actions_*.log zawierają informacje o wykonywanych operacjach, bez danych do debbugowania Uwaga: flaga logowania może nie być ustawiona przez administratora bazy danych, możemy nie mieć (pełnego) dostępu do pliku logów, problem przy migracji bazy

Logowanie Tworzenie logów Możemy utworzyć własne logi zawierające timestamp, użytkownika, rodzaj akcji, informacje o zmienionych wierszach, kolumnach i tabelach W bazie danych tworzymy dedykowaną dla historii operacji tabelę Określamy jakie akcje mają być w niej uwzględniane modyfikujemy odpowiednie procedury i triggery Określamy jak długo dane mają być przechowywane w tabeli (usuwamy dane starsze niż... ) Różnicujemy okres czasu przechowywania dla różnych akcji/użytkowników Dane archiwalne przed usunięciem można zapisać do pliku (backup)

Utrata prywatności Po co nam prywatność? sklejanie informacji z różnych źródeł śledzenie użytkowników metadane

Utrata prywatności Przykłady linkowania baz danych Thelma Arnold vel AOL Searcher No. 4417749 Dane demograficzne P. Golle Privacy Risks in Recommender Systems Ramakrishnan et al. Netflix experiment Narayanan, Shmatikov IMBD + dane medyczne Dwork et al.

Differential Privacy Literatura Differential Privacy Sub-linear queries Redukcja liczby pytań Upublicznianie danych z dużych baz danych wrażliwych Limity przy upublicznianiu danych Privacy book