Upload
blossom-price
View
31
Download
1
Embed Size (px)
DESCRIPTION
Bezpieczeństwo Procedury składowane Funkcje i Wyzwalacze. Wykład 8 Prowadzący: dr Paweł Drozda. Użytkownicy – dostęp do danych (1). Użytkownik bazy danych – osoba lub aplikacja, mająca dostęp do części danych zgromadzonych w bazie - PowerPoint PPT Presentation
Citation preview
BezpieczeństwoProcedury składowaneFunkcje i Wyzwalacze
Wykład 8Prowadzący: dr Paweł Drozda
Użytkownicy – dostęp do danych (1)
Użytkownik bazy danych – osoba lub aplikacja, mająca dostęp do części danych zgromadzonych w bazie
Uprawnienia – zakres czynności, które użytkownik może wykonać na bazie danych
Uwierzytelnianie – weryfikacja użytkownika (w MySQL –na podstawie loginu i hasła zapisanego w bazie)
Użytkownicy – dostęp do danych (2)
Dwa typy ograniczenia działań: Ograniczenie dostępu do poszczególnych
danych (tabele, bazy danych) Ograniczenie wykonywania poszczególnych
operacji (SELECT, UPDATE, itd.)
Mechanizmy nakładające ograniczenia: System przywilejów Role bazodanowe (tylko Oracle)
Przywileje
Prawo wykonywania przez użytkownika określonej akcji w bazie danych lub dostępu do określonego obiektu
Przykłady przywilejów: Wstawianie do bazy Usuwanie z bazy Modyfikowanie rekordów Przeglądanie rekordów
Zarządzanie kontami – MySQL (1) Tworzenie użytkownika – bez żadnych
przywilejówCREATE USER nazwa IDENTIFIED BY [PASSWORD]
‘hasło’; Usuwanie użytkownika
DROP USER nazwa; Nadanie hasła
SET PASSWORD [for nazwa]=PASSWORD(‘nowehaslo’);Przykład:SET PASSWORD FOR Stefan = PASSWORD(‘qwerty’);
Zarządzanie kontami – MySQL (2)
Zmiana nazwy użytkownikaRENAME USER staranazwa TO nowanazwa;
Nadawanie przywilejów – GRANTGRANT rodzajePrzywilejów[(nazwyKolumn)]
ON nazwyObiektów TO listaUzytkowników [IDENTIFIED BY [PASSWORD] ‘haslo’] [WITH opcje];
GRANT – przywileje (1) Możliwe przywileje
ALL – nadanie wszystkich przywilejów oprócz GRANT OPTION
ALTER – możliwość modyfikacji strukturyDELETE – możliwość usunięcia danychINDEX – możliwość tworzenia i usuwania
indeksuINSERT – możliwość wstawiania danych CREATE – możliwość tworzenia tabelGRANT OPTION – możliwość nadawania
uprawnień
GRANT – przywileje (2) Możliwe przywileje (cd)
CREATE USER – możliwość tworzenia użytkowników
CREATE VIEW – możliwość tworzenia perspektyw
DROP – możliwość usuwania tabelLOCK TABLES – możliwość blokowaniaSHOW DATABASES – możliwość obejrzenia
wszystkich baz danych w systemieUPDATE – możliwość uaktualnień
GRANT, przywileje – przykłady
GRANT SELECT, DELETE, INSERT, UPDATE ON *.* TO student;
GRANT SHOW DATABASES ON *.* TO student;
GRANT ALTER, DROP, CREATE ON bazka.* TO student;
GRANT – obiekty
Rodzaje obiektów *.* - dostęp do wszystkich baz danych w
systemie Nazwa.* - dostęp do bazy o nazwie Nazwa Nazwa – dostęp do tabeli o nazwie Nazwa
w aktualnej bazie Baza.Tabela – dostęp do tabeli Tabela w
bazie danych Baza
GRANT obiekty - przykłady
GRANT INSERT ON Biblioteka.* TO Bibliotekarz;
GRANT UPDATE(zarobki) ON Uni.Pracownik TO Płace;
GRANT ALL ON *.* TO Administrator;
Use PizzeriaGRANT SELECT ON Zamowienia TO Kelner;
GRANT – użytkownicy (1) Używając GRANT dla istniejącego użytkownika –
zmiana przywilejów GRANT dla nieistniejącego użytkownika –
powstaje nowy użytkownik z przywilejami określonymi w poleceniu
Hasło gdy powstaje nowy użytkownik bez hasła –
logowanie bez hasła Gdy ze słowem PASSWORD ‘hasło’ – hasło musi być
zakodowane funkcją PASSWORD Bez PASSWORD ‘hasło’ – hasło podane jako tekst
GRANT – użytkownicy (2) Użytkownik PUBLIC – przywileje nadane
dla wszystkich użytkowników Przykłady
DROP USER Szukacz;GRANT SELECT ON *.* TO Szukacz;
CREATE USER Tworca IDENTIFIED BY ‘wielki’;GRANT CREATE ON nowa.* TO Tworca;GRANT ALL ON *.* TO ADMIN IDENTIFIED BY PASSWORD ‘6af4442460ade563’;GRANT SELECT ON Test.* TO PUBLIC;
GRANT - opcje GRANT OPTION – możliwość nadawania
posiadanych uprawnień innym użytkownikom MAX_QUERIES_PER_HOUR – max liczba
zapytań na godzinę MAX_UPDATES_PER_HOUR – max liczba
aktualizacji na godzinę MAX_CONNECTIONS_PER_HOUR = max liczba
połączeń na godzinę MAX_USER_CONNECTIONS – max liczba
jednoczesnych połączeń jednego użytkownika Gdy parametry zero – brak ograniczeń
Usuwanie przywilejów REVOKE – składnia
REVOKE rodzajePrzywilejów ON nazwyObiektów FROM użytkownicy;
Przykład:REVOKE ALTER, DROP on Baza.* FROM
Tworca;REVOKE ALL, GRANT OPTION FROM student;
Procedury składowane Zbiór instrukcji SQL wykonywanych jako jedno
polecenie Możliwości:
przekazywania parametrów do procedury Wywołanie większości poleceń SQL (również innych
procedur) Dodanie fragmentu logiki po stronie bazy danych
Aby móc utworzyć procedurę składowaną – niezbędny przywilej CREATE ROUTINE
Procedury składowane - rodzaje Procedury
Wywołane poleceniem CALL Wynik w formie tabeli Odwołuje się do referencji (IN, OUT) Może używać poleceń SQL Może wywoływać procedury i funkcje
Funkcje Mogą być wbudowane w polecenie SQL Zwracają pojedyncze wartości Przekazywanie parametrów Brak możliwości wywołania poleceń dotyczących tabel Nie może odwoływać się do procedur
Funkcje – składnia (1)
Tworzenie funkcjiCREATE FUNCTION nazwa(lista parametrow) RETURNS typ
zwracanej zmiennejpolecenia funkcji
Blok BEGIN – ENDGdy występuje w funkcji więcej niż jedna instrukcja –
grupowanie w blok BEGIN – END
Zmienne w funkcjachZwykłe – poprzedzone @Lokalne – deklarowane przy użyciu DECLARE, aktualne tylko w
bloku BEGIN ENDDECLARE zmienna1, zmienna2 , … typDanych [DEFAULT wartosc]
Funkcje – składnia (2) Pętle w MySQL
REPEAT ciagInstrukcjiUNTIL warunek END REPEAT;Opuszczenie pętli – LEAVEWymuszenie kolejnej iteracji – ITERATEWHILE warunek DO instrukcje; END WHILE;
CASECASE wyrażenie
WHEN wartość1 THEN polecenia;WHEN wartość2 THEN polecenia;WHEN wartość3 THEN polecenia;else polecenia;
END CASE;
Funkcje – składnia (3) Usuwanie
DROP FUNCTION [IF EXISTS] nazwa
Pokazanie składni funkcjiSHOW CREATE FUNCTION nazwa
Wyświetlenie statusu funkcjiSHOW FUNCTION STATUS
Informacje na temat funkcjiTabela information_schema.routines
Funkcja – przykład(1)delimiter //CREATE FUNCTION silnia(n INT) RETURNS int(11)
BEGINDECLARE i INT DEFAULT 1;DECLARE silnia INT DEFAULT 1;
REPEAT SET i=i+1;SET silnia=silnia*i;
UNTIL i>=n END REPEAT;RETURN silnia;END//
delimiter ;
Funkcja – przykład(2)CREATE FUNCTION silnia1(n INT) RETURNS int BEGIN
DECLARE i INT DEFAULT 1;DECLARE silnia INT DEFAULT 1;
BEGINIF (n=0) THEN RETURN 1;
ELSEREPEAT
SET i=i+1;SET silnia=silnia*i;
UNTIL i>=n END REPEAT;RETURN silnia;
END IF;END
Funkcja – przykład(3)delimiter //CREATE FUNCTION shorten(s VARCHAR(255), n INT)RETURNS VARCHAR(255)BEGIN
IF ISNULL(s) THEN RETURN '';ELSEIF n<15 THEN RETURN LEFT(s, n);
ELSE IF CHAR_LENGTH(s) <= n THEN RETURN s;ELSERETURN CONCAT(LEFT(s, n-10), ' ... ', RIGHT(s, 5));
END IF; END IF;
END//delimiter ;
Procedury – składnia
TworzenieCREATE PROCEDURE (IN|OUT|INOUT
zmienne typ)Pola IN określają parametry wejściowePola OUT określają parametry zwracane
Pozostałe elementy – tak jak w funkcjach (zamiast FUNCTION należy wstawić PROCEDURE)
Procedury – przykład(1) CREATE PROCEDURE Studenci(OUT ile int)
SELECT COUNT(*) INTO ile FROM StudentWywołanieCALL Studenci(@a);SELECT @a;
CREATE PROCEDURE pobierz (out nazwa VARCHAR(50), in skrot VARCHAR(5))BEGINSELECT opis INTO nazwa FROM skroty WHERE skrot_id=skrot LIMIT 1;END
Wyzwalacze Pozwalają wykonywać ciąg poleceń SQL przed
lub po jednym z poleceń INSERT, UPDATE, DELETE wykonanym na ustalonej tabeli
Przyporządkowane do konkretnej tabeli Unikalne nazwy dla tej samej tabeli Brak możliwości wywołania CALL, poleceń
transakcji wewnątrz wyzwalacza Wywoływany automatycznie przy zajściu
zdarzenia
Wyzwalacze - składnia(1) Tworzenie
Tylko dla użytkowników z uprawnieniami SUPER, od wersji 5.1.6 nowe uprawnienie TRIGGER
CREATE TRIGGER nazwa BEFORE|AFTER INSERT|UPDATE|DELETE ON tabela FOR EACH ROW ciag polecen;
Dostęp do kolumn rekordu OLD.nazwakolumny – wartość przed wykonaniem polecenia NEW.nazwakolumny – wartość po wykonaniu polecenia
Usuwanie wyzwalaczy DROP TRIGGER nazwatabeli.nazwawyzwalacza
Wyświetlanie SHOW TRIGGERS
Wyzwalacze - przykładTabela emps(emp_id, emp_name, dept_id, dept_name, salary)DELIMITER //CREATE TRIGGER odwrocony BEFORE INSERT ON emps FOR EACH ROWBEGINSET new.emp_name := REVERSE(new.emp_name);END;//DELIMITER ;
Wyzwalacze – przykład (2)
CREATE trigger emps_bef BEFORE INSERT ON empsFOR EACH ROW BEGIN declare namelength numeric;
SET namelength = length( new.emp_name ) ;
SET new.salary = new.salary * namelength;
END
Wyzwalacze – przykład (3)CREATE TABLE test1(a1 INT); CREATE TABLE test2(a2 INT); CREATE TABLE test3(a3 INT NOT NULL AUTO_INCREMENT PRIMARY KEY); CREATE TABLE test4( a4 INT NOT NULL AUTO_INCREMENT PRIMARY KEY, b4 INT DEFAULT 0 ); delimiter //CREATE TRIGGER testref BEFORE INSERT ON test1 FOR EACH ROW BEGIN INSERT INTO test2 SET a2 = NEW.a1; DELETE FROM test3 WHERE a3 = NEW.a1; UPDATE test4 SET b4 = b4 + 1 WHERE a4 = NEW.a1; END; //
Wyzwalacze – przykład (3) cd.
delimiter ;
INSERT INTO test3 (a3) VALUES (NULL), (NULL), (NULL), (NULL), (NULL), (NULL), (NULL), (NULL), (NULL), (NULL);
INSERT INTO test4 (a4) VALUES (0), (0), (0), (0), (0), (0), (0), (0), (0), (0);
INSERT INTO test1 VALUES (1), (3), (1), (7), (1), (8), (4), (4);