Informační systémy 2008/2009. Radim Farana. Obsah. Bezpečnost uložených procedur

Podobné dokumenty
Informační systémy 2008/2009. Radim Farana. Obsah. Skripty a dávky. Nastavení aktuální databáze. USE DatabaseName

Informační systémy 2008/2009. Radim Farana. Řešený příklad. Struktura navržené databáze

Západočeská univerzita v Plzni Katedra informatiky a výpočetní techniky. 9. června krovacek@students.zcu.cz

Databázové systémy. - SQL * definice dat * aktualizace * pohledy. Tomáš Skopal

Informační systémy 2008/2009. Radim Farana. Obsah. Dotazy přes více tabulek

PL/SQL. Jazyk SQL je jazykem deklarativním, který neobsahuje procedurální příkazy jako jsou cykly, podmínky, procedury, funkce, atd.

Kurz Databáze. Obsah. Dotazy. Zpracování dat. Doc. Ing. Radim Farana, CSc.

Databáze 2011/2012 T-SQL - kurzory, funkce. RNDr.David Hoksza, Ph.D.

Stored Procedures & Database Triggers, Tiskové sestavy v Oracle Reports

Informační systémy 2008/2009. Radim Farana. Obsah. Jazyk SQL

Kód v databázi. RNDr. Ondřej Zýka

Návrh a tvorba WWW stránek 1/14. PHP a databáze

Databáze 2011/2012 SQL DDL (CREATE/ALTER/DROP TABLE), DML (INSERT/UPDATE/DELETE) RNDr.David Hoksza, Ph.D.

InnoDB transakce, cizí klíče, neumí fulltext (a nebo už ano?) CSV v textovém souboru ve formátu hodnot oddělených čárkou

SQL v14. 4D Developer konference. 4D Developer conference 2015 Prague, CZ Celebrating 30 years

Text úlohy. Systémový katalog (DICTIONARY):

2. blok část B Základní syntaxe příkazů SELECT, INSERT, UPDATE, DELETE

Databázové systémy. Cvičení 6: SQL

SQL - trigger, Databázové modelování

Databáze I. Přednáška 4

Informační systémy 2008/2009. Radim Farana. Obsah. Základní principy XML

Databázové systémy I

Databázové systémy Cvičení 5.2

Inovace a zkvalitnění výuky prostřednictvím ICT. Základní seznámení s MySQL Ing. Kotásek Jaroslav

6. blok část B Vnořené dotazy

7. Integrita a bezpečnost dat v DBS

7. Integrita a bezpečnost dat v DBS

PG 9.5 novinky ve vývoji aplikací

Úvod do databázových systémů

NÁVRH A TVORBA HUDEBNÍ DATABÁZE

Jazyk SQL databáze SQLite. připravil ing. petr polách

B0M33BDT Technologie pro velká data. Supercvičení SQL, Python, Linux

KIV/ZIS cvičení 5. Tomáš Potužák

SQL. strukturovaný dotazovací jazyk. Structured Query Language (SQL)

Verzování a publikace dat na webu za pomoci PostgreSQL

Inovace a zkvalitnění výuky prostřednictvím ICT Databázové systémy MySQL základní pojmy, motivace Ing. Kotásek Jaroslav

Obchodní akademie a Jazyková škola s právem státní jazykové zkoušky Jihlava

Virtual Private Database (VPD) Jaroslav Kotrč

Virtual private database. Antonín Steinhauser

Kapitola 6: Omezení integrity. Omezení domény

Databázové systémy II. KIV/DB2 LS 2007/2008. Zadání semestrální práce

Administrace Oracle. Práva a role, audit

Databázové systémy I

XMW4 / IW4 Pokročilé SELECT dotazy. Štefan Pataky

Databázové systémy. Datová integrita + základy relační algebry. 4.přednáška

Kapitola 4: SQL. Základní struktura

Maturitní témata z předmětu PROGRAMOVÉ VYBAVENÍ pro šk. rok 2012/2013

Distanční opora předmětu: Databázové systémy Tématický blok č. 8: Transact SQL Autor: RNDr. Jan Lánský, Ph.D.

Popis souboru pro generování reportů *.report

SII - Informatika. 1. Atribut relace, jehož hodnota jednoznačně určuje prvek v jiné relaci, se nazývá:

DATABÁZOVÉ A INFORMAČNÍ SYSTÉMY

PRŮBĚHOVÝ TEST Z PŘEDNÁŠEK

Měřící systém se vzdáleným přístupem. Databáze

Optimalizace dotazů a databázové transakce v Oracle

Osnova je orientační pro FIT, u FEKTu se dá předpokládat, že budou zohledněny předchozí znalosti studentů, kde většina s databází nikdy přímo

8.2 Používání a tvorba databází

Databáze SQL SELECT. David Hoksza

KIV/ZIS cvičení 6. Tomáš Potužák

Introduction to MS Dynamics NAV

SQL injection jak ji možná neznáte Roman Kümmel

Základy databází. O autorech 17 PRVNÍ ČÁST. KAPITOLA 1 Začínáme 19

Stručný obsah. část III Aktualizace dat Kapitola 10: Aktualizace databáze 257 Kapitola 11: Integrita dat 275 Kapitola 12: Zpracování transakcí 307

Databáze I. 5. přednáška. Helena Palovská

6. SQL složitější dotazy, QBE

Administrace Oracle Práva a role, audit. Kukhar Maria

SQL. Pohledy, ochrana dat,... Pavel Tyl

- sloupcové integritní omezení

Nástroje na správu databáze

Jazyk SQL 3 - DML, DDL, TCL, DCL

Databáze I. Přednáška 7

Práva a role. Martin Polák. NDBI013 Administrace Oracle

Zabezpečení proti SQL injection

Kurz Databáze. Přechod na SQL server. Obsah. Vytvoření databáze. Lektor: Doc. Ing. Radim Farana, CSc.

Semestrální práce z DAS2 a WWW

Databázové systémy, MS Access. Autor: Ing. Jan Nožička SOŠ a SOU Česká Lípa VY_32_INOVACE_1130_Databázové systémy, MS Access_PWP

Programování v jazyku C# II. 5.kapitola

4. lekce Přístup k databázi z vyššího programovacího jazyka

Fakulta elektrotechniky a informatiky Databázové systémy 2. Leden 2010 souhrn. Červené dobře (nejspíš), modré možná

RNDr. Michal Kopecký, Ph.D. Department of Software Engineering, Faculty of Mathematics and Physics, Charles University in Prague

Administrace Oracle. Jan Šaršon. Audit databáze

10. Architektura klient/server a třívrstvá architektura

10. Architektura klient/server a třívrstvá architektura

Embedded SQL v C/C++ III - pole, struktury. Jindřich Vodrážka

Marian Kamenický. Syntea software group a.s. marian.kamenicky. MFFUK Praha 2012/13

MySQL sežere vaše data

Gymnázium a Střední odborná škola, Rokycany, Mládežníků 1115

4IT218 Databáze. 4IT218 Databáze

Univerzita Palackého v Olomouci Radek Janoštík (Univerzita Palackého v Olomouci) Základy programování 4 - C# 10.4.

Databáze. Velmi stručný a zjednodušený úvod do problematiky databází pro programátory v Pythonu. Bedřich Košata

Co bude výsledkem mého SELECTu? RNDr. David Gešvindr MVP: Data Platform MCSE: Data Platform MCSD: Windows Store MCT

Sada 1 - PHP. 14. Úvod do jazyka SQL

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

PostgreSQL. Podpora dědičnosti Rozšiřitelnost vlastní datové typy. Univerzální nasazení ve vědecké sféře

Databáze II. 2. přednáška. Helena Palovská

GUIDELINES FOR CONNECTION TO FTP SERVER TO TRANSFER PRINTING DATA

Replikace je proces kopírování a udržování databázových objektů, které tvoří distribuovaný databázový systém. Změny aplikované na jednu část jsou

Deklarativní IO shrnutí minulé přednášky

Uložené procedury Úvod ulehčit správu zabezpečení rychleji

DUM 12 téma: Příkazy pro tvorbu databáze

Základy informatiky. 08 Databázové systémy. Daniela Szturcová

Transkript:

9 Vysoká škola báňská Technická univerzita Ostrava Fakulta strojní, Katedra automatizační techniky a řízení 2008/2009 Radim Farana 1 Obsah MS SQL Server 2005, Systémové procedury a funkce Spouště (Trigger), aktualizace agregovaných dat, DELETE, INSERT, UPDATE. Doporučená literatura: Andrew J. Brust, Stephen Forte. Mistrovství v programování SQL Serveru 2005. Brno: Computer Press, a.s., 2007. ISBN 978-80-251-1607-4. 2 Bezpečnost uložených procedur Uložená procedura umožňuje manipulaci se záznamy. Uložená procedura je schopna zajistit kontrolu pravidel referenční integrity apod. Uložená procedura může vracet záznamy i z tabulky, ke které nemá uživatel přístup. 3 1

Výkon uložených procedur Optimalizace a kompilace při prvním použití. Při použití dynamických příkazů nemusí být zpracování optimální. Novou rekompilaci je možno vynutit klauzulí WITH RECOMPILE buď při její deklaraci nebo při jejím volání. EXEC ProcName [Param] WITH RECOMPILE 4 Systémové uložené procedury Jsou uloženy v databázi Master. Je možné je vyvolat názvem bez ohledu na databázi (pro využití v jiné databázi). Např.: USE Prace EXEC sp_columns 'prace' 5 Systémové uložené procedury 6 2

Catalog Stored Procedures sp_column_privileges sp_special_columns sp_columns sp_sproc_columns sp_databases sp_statistics sp_fkeys sp_stored_procedures sp_pkeys sp_table_privileges sp_server_info sp_tables Např.: USE Prace EXEC sp_tables 'p%' 7 sp_tables 8 Rozšířené uložené procedury (Extended Stored Procedures) Ukládají se do databáze master Musí být volány master..xp_name Vytvářejí se vně SQL serveru pomocí jiného jazyka (C, C++). Běží jako interní (in-process) a mohou být velmi rychlé. 9 3

Procedura xp_cmdshell Spuštění příkazu operačního systému xp_cmdshell 'řetězec příkazu' [, no_output] Příklad EXEC master..xp_cmdshell 'dir "C:/*.*"' Výstupem je soubor záznamů pro jednotlivé řádky výstupu Msg 15281, Level 16, State 1, Procedure xp_cmdshell, Line 1 SQL Server blocked access to procedure 'sys.xp_cmdshell' of component 'xp_cmdshell' because this component is turned off as part of the security configuration for this server. A system administrator can enable the use of 'xp_cmdshell' by using sp_configure. For more information about enabling 'xp_cmdshell', see "Surface Area Configuration" in SQL Informační Server Books systémy Online. 10 Procedura xp_cmdshell Povolení procedury (patří mezi zvlášť nebezpečné!) 11 Procedura xp_msver Vrací informace o verzi systému. Podrobnější než funkce @@VERSION. Strukturovaný výstup. EXEC master..xp_msver 12 4

Posílání e-mailů Odeslání e-mailu xp_startmail [[@user =] name'] [,[@password =] 'password'] xp_sendmail xp_stopmail Přijetí e-mailu sp_processmail Nebo xp_findnextmessage, xp_readmail, xp_deletemail 13 Posílání e-mailů Je nutno explicitně povolit 14 Rekurze Procedura volá sama sebe. Při vytvoření procedury je hlášena chyba (odkazuje se ne neexistující proceduru), ale procedura bude vytvořena. Počet vnoření je omezen na 32! Je možno zjistit pomocí @@NESTLEVEL. 15 5

USE PRACE DECLARE @in int, @out int Příklad - Faktoriál SET @in = 5 EXEC Factorial @in, @out OUTPUT CREATE PROC Factorial PRINT CT(@in VARCHAR)+ @InputValue Int, ' - ' + CT(@out VARCHAR) @OutputValue Int OUTPUT 5 120 DECLARE @InVal Int, @OuVal Int funguje až do x = 12 IF @InputValue!= 1 SELECT @InVal = @InputValue - 1 EXEC Factorial @InVal, @OuVal OUTPUT SELECT @OutputValue = @OuVal * @InputValue ELSE SELECT @OutputValue = 1 RETURN pro x = 13: Server: Msg 8115, Level 16, State 2, Procedure Factorial, Line 10 Arithmetic overflow error converting expression to data type int. Cannot add rows to sysdepends for the current stored procedure because it depends on the missing object 'Factorial'. The stored procedure will still be created. 16 Příklad Triangulanční číslo CREATE PROC TriangulacniCislo @InputValue Int, @OutputValue Int OUTPUT DECLARE @InVal Int, @OuVal Int IF @InputValue!= 1 SELECT @InVal = @InputValue - 1 EXEC TriangulacniCislo @InVal, @OuVal OUTPUT SELECT @OutputValue = @OuVal + @InputValue ELSE SELECT @OutputValue = 1 RETURN USE PRACE DECLARE @in int, @out int SET @in = 13 EXEC TriangulacniCislo @in, @out OUTPUT PRINT CT(@in VARCHAR)+ ' - ' + CT(@out VARCHAR) 13 91 Funguje až do x = 32 Pro x = 33 Server: Msg 217, Level 16, State 1, Procedure TriangulacniCislo, Line 9 Maximum stored procedure, function, trigger, or view nesting level exceeded (limit 32). 17 Vykonání uložených procedur 18 6

Uživatelsky definované funkce Funkce mohou vracet Skalární hodnotu, Tabulku. Deklarace DECLARE FUNCTION fname (@ParName DataType) RETURNS DataType TABLE 19 Funkce vracející skalární hodnotu CREATE FUNCTION DateOnly(@InputDate DATETIME) RETURNS DATETIME RETURN CONVERT(datetime, CONVERT(varchar, @InputDate, 112)) Funkce musí být volána se jménem vlastníka. Neznámo proč. Použití USE PRACE PRINT dbo.dateonly(getdate()) Apr 17 2006 12:00AM Datum bez času má čas 00:00:00,0 20 Funkce vracející tabulku CREATE FUNCTION AVGByDate(@InputDate DATETIME) RETURNS TABLE RETURN (SELECT p_typ, AVG(p_kusu) avg_kusu FROM prace WHERE p_datum=@inputdate GROUP BY p_typ) Funkce se používá stejně jako každý jiný datový zdroj, (až na nutnost uvedení vlastníka funkce) 21 7

Úprava pro prázdný parametr USE Prace Kontrola existence objektu IF EXISTS (SELECT * FROM dbo.sysobjects WHERE name='avgbydate') DROP FUNCTION AVGByDate Go CREATE FUNCTION AVGByDate(@InputDate DATETIME) RETURNS @avg_table TABLE(p_typ varchar(50), avg_kusu float) DECLARE @tmp_table TABLE(p_typ varchar(50), avg_kusu float) IF (@InputDate IS NULL) SELECT @InputDate = Max(p_datum) FROM prace INSERT @tmp_table SELECT p_typ, AVG(p_kusu) avg_kusu FROM prace WHERE p_datum=@inputdate GROUP BY p_typ INSERT @avg_table SELECT * FROM @tmp_table RETURN 22 Systémové funkce Vytvářejí se v databázi Master. Začínají předponou fn_. Pro SQL Server 2000: Vlastníka je nutno změnit na system_function_schema pomocí uložené procedury sp_changeobjectowner 23 Systémové funkce USE Prace DROP FUNCTION DateOnly USE master CREATE FUNCTION fn_dateonly(@inputdate DATETIME) RETURNS DATETIME RETURN CONVERT(datetime, CONVERT(varchar, @InputDate, 112)) Správné volání včetně databáze: PRINT master.dbo.fn_dateonly(getdate()) 24 8

Odstranění systémové funkce Je nutno povolit systémové změny. Velmi nebezpečné! USE master EXEC sp_configure 'allow updates', 1 RECONFIGURE WITH OVERRIDE DROP FUNCTION dbo.fn_dateonly EXEC sp_configure 'allow updates', 0 RECONFIGURE WITH OVERRIDE Nekontroluje hodnotu parametru (možno zadat nedoporučovanou hodnotu) 25 Spouště (Triggers) Uložené procedury spouštěné automaticky systémem při manipulaci s tabulkami: INSERT DELETE UPDATE Využití spouští Zajištění referenční integrity nad REFERENCE Kontrola omezení nad CHECK Vytváření záznamů o sledování systému 26 Vytvoření spouště CREATE TRIGGER TriggerName ON TableName {{{ FOR AFTER} [INSERT] [,] [DELETE] [,] [UPDATE] } INSTEAD OF} [WITH APP] [NOT FOR REPLICATION] 27 9

Určení dotčených záznamů K určení záznamů dotčených změnou slouží dvě pracovní tabulky stejného schématu jako je samotná tabulka inserted - seznam vkládaných záznamů (jejich nových hodnot), deleted seznam odstraňovaných záznamů (jejich původních hodnot). Při aktualizaci jsou naplněny obě tabulky příslušnými záznamy. 28 Postup činnosti při vkládání Zadán příkaz INSERT INTO Začátek transakce Pokud nebyla definována explicitně Existuje spoušť INSTEAD OF? ano Naplnit tabulky inserted, deleted ne Ověřit omezení Zapsat do protokolu Operace nad dalšími objekty Vyvolána spoušť INSTEAD OF příkazy Naplnit tabulky inserted, deleted Vyvolat spouště FOR/AFTER Provedla spoušť INSTEAD OF podobnou akci v tabulce? ano ne Potvrdit transakci Pokud nebyla definována explicitně Konec 29 Spouště INSTEAD OF Pracují s daty před provedením všech kontrol (CHECK a REFERENCE). Zatímco spouště FOR a AFTER probíhají až po kontrole omezení. Jsou povoleny také u pohledů. Mohou nahradit provedení příslušné operace jinou činností. 30 10

CREATE TRIGGER pracemeniplaty ON [dbo].[prace] FOR INSERT, UPDATE, DELETE -- zpracujeme vložení nové práce IF EXISTS (SELECT * FROM INSERTED) Příklad DECLARE @pid INT, @pprac INT, @ptyp VARCHAR(50), @pkusu FLOAT, @pdatum DATETIME, @pcena money -- zjistíme kolik záznamů je přidáno DECLARE cpom CURSOR FOR SELECT p_id, p_pracovnik, p_typ, p_kusu, p_datum FROM inserted OPEN cpom Po vložení nové -- vezmeme první nový záznam práce je třeba FETCH NEXT FROM cpom INTO @pid, @pprac, @ptyp, @pkusu, @pdatum aktualizovat WHILE @@FETCH_STATUS = 0 odměnu -- Určíme cenu vložené práce SELECT @pcena = Max(tp_cena) FROM typyprace WHERE tp_nazev=@ptyp -- Pokud již tento pracovník v daném dni pracoval, budeme záznam upravovat, jinak přidat nový IF EXISTS (SELECT * FROM platy WHERE pl_pracovnik=@pprac AND pl_datum=@pdatum) UPDATE platy SET pl_castka=pl_castka+@pkusu*ct(@pcena FLOAT) WHERE pl_pracovnik=@pprac AND pl_datum=@pdatum ELSE INSERT INTO platy(pl_pracovnik, pl_datum, pl_castka) VALUES (@pprac, @pdatum, @pkusu*ct(@pcena FLOAT)) FETCH NEXT FROM cpom INTO @pid, @pprac, @ptyp, @pkusu, @pdatum CLOSE cpom DEALLOCATE cpom 31 Možnosti spouští Spouště mohou být vnořené Pokud je to povoleno (implicitně ano) Spoušť svojí činností vyvolá jinou spoušť Maximálně 32 úrovní vnoření Stejná spoušť nebude vyvolána podruhé Celý řetězec spouští se provádí v jedné transakci (ROLLBACK stornuje celý řetězec) Spouště mohou být rekurzivní 32 Určení pořadí provádění spouští Jedna spoušť může být určena jako první, jedna spoušť jako poslední, pomocí systémové uložené procedury: sp_settriggerorder [@triggername = ] 'TriggerName', [@order = ] '{ FIRST LT NONE }', [@stmttype = ] ' { INSERT UPDATE DELETE }' Využití: např. je možno definovat více spouští pro stejnou činnost. 33 11

Určení dotčených sloupců Funkce UPDATE(ColumnName) vrací logickou informaci o změně daného sloupce. Má smysl jen uvnitř spouště. Funkce COLUMNS _UPDATED() vrací součet binárních vah odpovídajících jednotlivým změněným sloupcům počínaje prvním 2 0, 2 1, 2 2, 2 3, 2 4, Je možno je testovat pomocí binárních operací = bitové OR, & = bitové AND, ^ = bitové XOR, COLUMNS _UPDATED() > 0 aktualizováno cokoliv, COLUMNS _UPDATED() ^ 19 = 0 aktualizovány právě sloupce 1, 2, 5 a žádný jiný, COLUMNS _UPDATED() & 19 = 19 aktualizovány sloupce 1, 2, 5, ostatní mohly být aktualizovány také, COLUMNS _UPDATED() 19!= 19 aktualizovány sloupce 1, 2, 5 a ještě nějaký jiný. 34 Odstranění spouště Odstranění spouště DROP TRIGGER TriggerName Spoušť není nutno odstraňovat, dá se vypnout! ALTER TABLE TableName < ENABLE DISABLE > TRIGGER < ALL TriggerName > 35 Ladění spouští Přímo není možné. Lze obejít vytvořením uložené procedury, která vynutí spuštění spouště provedením příslušné operace. Uloženou proceduru krokujeme příkazem "Step Into" dojde ke vstupu do spouště a její krokování bude probíhat standardně. 36 12