České vysoké učení technické v Praze. Fakulta elektrotechnická



Podobné dokumenty
České vysoké učení technické v Praze. Fakulta elektrotechnická

1. Webový server, instalace PHP a MySQL 13

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

Vladimír

1 Webový server, instalace PHP a MySQL 13

Bc. David Gešvindr MSP MCSA MCTS MCITP MCPD

IW3 MS SQL SERVER 2014

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

Instalace SQL 2008 R2 na Windows 7 (64bit)

Implementace LMS MOODLE. na Windows 2003 Server a IIS 6.0

Klíčová slova: dynamické internetové stránky, HTML, CSS, PHP, SQL, MySQL,

Obsah přednášky. Představení webu ASP.NET frameworky Relační databáze Objektově-relační mapování Entity framework

Instalace. Produkt je odzkoušen pro MS SQL server 2008 a Windows XP a Windows 7. Pro jiné verze SQL server a Windows nebyl testován.

Instalace Microsoft SQL serveru 2012 Express

FIREBIRD relační databázový systém. Tomáš Svoboda

1. POSTUP INSTALACE A KONTROLA NASTAVENÍ MICROSOFT SQL SERVERU 2005 EXPRESS:

Střední odborná škola a Střední odborné učiliště, Hořovice

SOFTWARE 5P. Instalace. SOFTWARE 5P pro advokátní praxi Oldřich Florian

1. SYSTÉMOVÉ POŽADAVKY / DOPORUČENÁ KONFIGURACE HW A SW Databázový server Webový server Stanice pro servisní modul...

Semestrální projekt do předmětu SPS

[Zadejte název společnosti.] Instalace. SOFTWARE 5P pro správu bytového fondu Oldřich Florian

Využití OOP v praxi -- Knihovna PHP -- Interval.cz

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

Instalace a konfigurace web serveru. WA1 Martin Klíma

HelpDesk. Co je HelpDesk? Komu je aplikace určena? Co vám přinese?

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

Instalace systému Docházka 3000 na operační systém ReactOS Zdarma dostupné kompatibilní alternativě k systému Windows

Databázové aplikace pro internetové prostředí PHP úvod, základní princip, vkládání skriptu, komentáře, výpis na obrazovku

APS Administrator.OP

9. Sítě MS Windows. Distribuce Windows. Obchodní označení. Jednoduchý OS pro osobní počítače, pouze FAT, základní podpora peer to peer sítí,

Maturitní projekt do IVT Pavel Doleček

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

APS 400 nadministrator

Porovnání rychlosti mapového serveru GeoServer při přístupu k různým datovým skladům

FAKULTA INFORMAČNÍCH TECHNOLOGIÍ SPOLEČNOST DECADIC PROJEKT FRAMETRIX

CYCLOPE PRINT MANAGEMENT SOFTWARE- UŽIVATELSKÁ PŘÍRUČKA

WORKWATCH ON-LINE EVIDENCE PRÁCE A ZAKÁZEK

Současný svět Projekt č. CZ.2.17/3.1.00/32038, podpořený Evropským sociálním fondem v rámci Operačního programu Praha adaptabilita

MATLABLINK - VZDÁLENÉ OVLÁDÁNÍ A MONITOROVÁNÍ TECHNOLOGICKÝCH PROCESŮ

Střední odborná škola a Střední odborné učiliště, Hořovice

HelpDesk. Co je HelpDesk? Komu je aplikace určena? Co vám přinese?

O Apache Derby detailněji. Hynek Mlnařík

PHP PHP je skriptovací programovací jazyk dynamických internetových stránek PHP je nezávislý na platformě

1 Administrace systému Moduly Skupiny atributů Atributy Hodnoty atributů... 4

Úvodem 9. Zpětná vazba od čtenářů 10 Zdrojové kódy ke knize 10 Errata 10. Než začneme 11

Střední průmyslová škola elektrotechnická Praha 10, V Úžlabině 320 M A T U R I T N Í T É M A T A P Ř E D M Ě T U

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

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

POŽADAVKY NA INSTALACI

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

Nové jazykové brány do Caché. Daniel Kutáč

T-Mobile Internet. Manager. pro Windows NÁVOD PRO UŽIVATELE

Instalace a první spuštění Programu Job Abacus Pro

SharePoint 2010 produktové portfolio a licencování

MySQL. mysql> CREATE DATABASE nova CHARACTER SET latin2 COLLATE latin2_czech_cs; Query OK, 1 row affected (0.02 sec)

Registrační číslo projektu: CZ.1.07/1.5.00/ Elektronická podpora zkvalitnění výuky CZ.1.07 Vzděláním pro konkurenceschopnost

DELTA - STŘEDNÍ ŠKOLA INFORMATIKY A EKONOMIE, s.r.o. Obor informační technologie AJAX ESHOP. Maturitní projekt. Třída:

17. července :51 z moravec@yahoo.com

Univerzální rezervační systém. Uživatelská příručka

eliška 3.04 Průvodce instalací (verze pro Windows 7) w w w. n e s s. c o m

plussystem Příručka k instalaci systému

ZÁKLADNÍ POKYNY PRO INSTALACI PROID+ Z INSTALAČNÍHO MÉDIA

Konfigurace pracovní stanice pro ISOP-Centrum verze

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

Instalace MS SQL Server Express a MS SQL Server Management Express

Instalace a konfigurace

5. POČÍTAČOVÉ CVIČENÍ

Instalační manuál. HelpDesk

Instrukce pro vzdálené připojení do učebny 39d

Instalační manuál. HelpDesk

INOVACE PŘEDMĚTŮ ICT. MODUL 11: PROGRAMOVÁNÍ WEBOVÝCH APLIKLACÍ Metodika

Windows 2008 R2 - úvod. Lumír Návrat

Maturitní otázky z předmětu PROGRAMOVÁNÍ

7. Integrita a bezpečnost dat v DBS

7. Integrita a bezpečnost dat v DBS

Compatibility List. GORDIC spol. s r. o. Verze

manažerského řízení HW a SW požadavky pro sw ATTIS

Návrh uživatelských rozhraní NOV-WEB. Jakub Bartoš, Pavel Dvořák, Jakub Motyčka, Kamil Procházka

Zabezpečení proti SQL injection

KAPITOLA 1 Představení platformy Microsoft SQL Server 2008

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

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

Administrace Oracle. Práva a role, audit

Použití databází na Webu

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

Jak nainstalovat SQL Server 2005 Express Edition

Ukázka knihy z internetového knihkupectví

Semestrální práce z DAS2 a WWW

Edu-learning pro školy

SW ATTIS nástroje. HW a SW požadavky pro sw ATTIS. manažerského řízení. Verze manuálu: 3.5 Datum:

Administrátorská příručka

Střední odborná škola a Střední odborné učiliště, Hořovice

Příprava prostředí pro výuku PHP a MySQL

Instalační Příručka. Verze 10

Postup instalace síťové verze Mount Blue

AIDA64 Extreme. Příručka k nastavení. v

1. Administrace služby Bezpečný Internet přes webovou aplikaci WebCare GTS

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

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

APS Web Panel. Rozšiřující webový modul pro APS Administrator. Webové rozhraní pro vybrané funkce programového balíku APS Administrator

Transkript:

České vysoké učení technické v Praze Fakulta elektrotechnická Bakalářská práce Správa MSSQL databáze přes webové rozhraní pomocí programu Adminer Jakub Černohubý Vedoucí práce: Ing. Martin Klíma, Ph.D. Studijní program Elektrotechnika a informatika strukturovaný bakalářský Obor: Informatika a výpočetní technika květen 2010

ii

Poděkování Děkuji velmi panu Ing. Jakubu Vránovi a Ing. Martinu Klímovi, Ph.D. za jejich odborné konzultace, návrhy a připomínky, které mi umožnily dovést mou práci k úspěšnému zakončení. iii

iv

Prohlášení Prohlašuji, že bakalářskou práci na téma Správa MSSQL databáze přes webové rozhraní pomocí programu Adminer jsem vypracoval samostatně a použil jsem jen pramenů, které cituji a uvádím v přiloženém soupisu literatury. Souhlasím, aby práce byla uložena v knihovně Českého vysokého učení technického v Praze a zpřístupněna ke studijním účelům. V Praze, dne Podpis v

vi

Abstract This work deals with the differences of database servers between MySQL and MSSQL, which are applied to the source program Adminer. This allows use of both database servers with the same user interface. Abstrakt Práce se zabývá rozdíly mezi databázovými servery MySQL a MSSQL, které jsou aplikovány do zdrojových kódů programu Adminer. Ten umožní používat oba databázové servery se stejným uživatelským rozhraním. vii

viii

1 Obsah Poděkování... iii Prohlášení...v Abstract... vii Abstrakt... vii 2 Zadání...1 2.1 Cíle...1 3 Analýza...3 3.1 Vlastnosti Admineru...3 3.2 Funkce Admineru...5 3.3 Analýza GUI Admineru verze 2.3.2...6 3.4 MSSQL vs. MySQL...8 3.4.1 Podpora operačních systemů... 10 3.4.2 Omezení serverů... 10 3.4.3 Datové typy... 11 3.4.4... 12 3.4.5 Zobrazení informací z DB... 12 3.4.6 Licence... 13 3.4.7 Komunita... 14 3.5 MSSQL a PHP... 15 ix

3.6 Licenční ujednání programu Adminer... 17 4 Řešení... 19 4.1 Funkce souboru mssql.inc.php... 21 4.2 Funkce SQL jazyka... 22 5 Instalace... 25 5.1 Konfigurace SQL Server 2008... 25 5.2 SQLSRV 1.1... 26 5.3 Uživatelská práva... 26 6 Testování... 27 6.1 Způsob testování... 27 6.2 Instalace... 27 7 Závěr... 29 8 Přílohy... 31 8.1 Ukázky z programu Adminer... 33 8.2 Vývojové prostředí... 36 x

2 Zadání 2.1 Cíle Projekt Správa MSSQL databáze přes webové rozhraní (dále jen projekt) byl zadán v rámci pilotních prací Laboratoře Interoperability na Fakultě elektrotechnické ČVUT. Časový horizont projektu byl od listopadu 2009 do února 2010. Zadavatelem projektu je prostřednictvím Laboratoře Interoperability firma MICROSOFT s. r. o. Projekt byl vypracován jako studentská semestrální práce s možnou návazností na bakalářskou práci. Vzhledem k tomu, že byl tentýž projekt vypracováván nezávisle více studenty, bylo zadání práce dále upřesněno do následující podoby. Rozšiřte open source produkt Adminer (www.adminer.org) o možnost správy Microsoft SQL databáze. Pro připojení k databázi použijte ovladač SQLSRV 1.1. Pokud to bude možné, nezasahujte do původního kódu. Výsledný produkt otestujte vhodnou metodou, například unit testy. Svůj produkt dobře zdokumentujte tak, aby bylo možné ho dále rozšiřovat v rámci open source komunity. Program Adminer verze 2.3.2 není připraven na použití jiného databázového serveru než je MySQL. Bude potřeba refaktorovat stávající kód do podoby, kdy budou části kódu pro jednotlivé databázové servery odděleny a bude možné co nejjednodušším způsobem přidat nový databázový server (např. MSSQL) nebo nový ovladač databázového serveru. Mezi databázovými servery MySQL a MSSQL jsou rozdíly, které je potřeba eliminovat a to jak v rámci SQL příkazů, tak v rámci kódu PHP. Uživatelé programu Adminer by neměli poznat rozdíl v uživatelském rozhraní mezi jednotlivými databázemi. Takto vzniklý kód je potřeba otestovat, aby při případných dalších rozšiřování programu Adminer bylo jasné, že nevznikla žádná změna v kódu, která poruší původní funkčnost.

2

3 Analýza Adminer 1 je PHP 2 aplikace, vzniklá z potřeby rychlého, malého nástroje pro správu databázového serveru. V současné verzi 2.3.1 spolupracuje s databázovým serverem MySQL 3. Adminer byl vytvořen Ing. Jakubem Vránou 4. Přístup k SQL Serveru můžeme uskutečnit přes několik protokolů TCP/IP, Named Pipes, Shared Memory, a VIA. Každý z těchto protokolů je potřeba povolit či zakázat pro každého uživatele SQL Serveru pomocí SQL Server Configuration Manager. Pro MySQL je standartním portem TCP/IP port 3306 a pro MSSQL je port 1433. V současné době lze ovládat databázový server například pomocí podobných nástrojů jako je Management Studio, OSQL nebo SQLCMD, které komunikují přes různé protokoly. Management Studio je program s grafickým rozhraním, díky kterému jde v databázi SQL Serveru spouštět skripty, zálohovat databázi, spravovat uživatelské účty a další. OSQL a SQLCMD jsou programy bez grafického rozhraní. Ovládají se pomocí příkazové řádky, dokážou zpracovávat skripty a transakce, ale jejich použití je omezené. Tento způsob nemusí být vždy pohodlný z důvodu nutnosti využívat systém Microsoft Windows s programy, které nejsou v základní instalaci systému. 3.1 Vlastnosti Admineru Program Adminer je psaný v jazyce PHP. Ke spuštění je potřeba tento program mít na webovém serveru s nainstalovanou podporou jazyka PHP od verze 4.3.2. Na obrázku (Obr. 1) je patrná komunikace mezi klienty a webovým serverem, kde dynamický obsah představuje program Adminer. Klienti zasílají požadavek z různých 1 Adminer http://adminer.org 2 PHP http://php.net 3 MySQL - http://mysql.com 4 Ing. Jakub Vrána http://php.vrana.cz 3

počítačů a operačních systémů pomocí webového prohlížeče a čekají na odpověď. IIS nebo Apache, kteří zabezpečují službu webového serveru, dle požadavku vygenerují dynamický obsah nebo statický zobrazí. Generování dynamického obsahu se děje za pomoci skriptovacího jazyka PHP, který obsluhuje databázi pomocí určitého ovladače. Obr. 1 Webový server Obr. 2 Kompilace programu Adminer 4

Program Adminer je velice uživatelsky vstřícný díky přívětivému uživatelskému rozhraní a jednoduchostí ovládání. Pro administrátora serveru je také výhoda, že je to pouze jediný dlouhý soubor PHP (ve verzi 2.3.1 má velikost pouze 180kB), který se jediný umístí na server. Jedná se o zkompilovaný soubor obsahující všechna potřebná data, jejich struktura a způsob přeměny na poskytovanou verzi je zobrazena na obrázku (Obr. 2). Mezi těmito daty jsou různé jazyky včetně češtiny a slovenštiny. 3.2 Funkce Admineru Adminer poskytuje webové GUI (grafické uživatelské rozhraní) pro správu databáze. V tomto rozhraní zvládá velkou řadu funkcí, mezi ty hlavní patří: Připojení k databázovému serveru pod zadaným uživatelským jménem a heslem Výběr databáze, vytvoření nové databáze Seznam sloupců, indexů, cizích klíčů a triggerů tabulky Změna názvu, úložiště, porovnávání, auto_increment a komentáře tabulky Změna názvu, typu, porovnávání, komentáře a výchozí hodnoty sloupců Přidání a smazání tabulek a sloupců Vytvoření, změna, smazání a vyhledávání podle indexů včetně fulltextových Vložení, úprava a smazání záznamu Podpora všech datových typů, práce s BLOB přes nahrávání souborů Provedení libovolného SQL příkazu zadaného přímo nebo nahraného ze souboru Přehled uživatelů a práv s možností jejich nastavení Další funkční vlastnosti lze nalézt na webových stránkách projektu. 5 5 Projekt Adminer http://adminer.org 5

3.3 Analýza GUI Admineru verze 2.3.2 Verze 2.3.2 po spuštění nabízí možnost výběru jednoho z velkého množství jazyků. K přihlášení jsou vyžadovaná data: server, uživatelské jméno, heslo. Pokud se tyto údaje nevyplní, Adminer použije údaje ze souboru php.ini. Při neúspěšném přihlášení vypíše chybovou hlášku, kterou vrátí databázový server. Po úspěšném přihlášení vypíše verzi MySQL serveru, jméno uživatele, adresu serveru a přes jaký ovladač je program připojen. Ovladače mají svou prioritu od nejvyšší: MySQLi, MySQL a PDO_MySQL. Dále lze vidět na stejné stránce jednotlivé databáze a jejich porovnávání. Z této stránky je také možnost vytvoření nové databáze, odstranění databáze, změny oprávnění, vypsání seznamu procesů, proměnné serveru, aktuální stav databáze a její export. Pokud během používání programu Adminer vznikne potřeba jiného dotazu nad databází, než jsou naimplementované, pak je možnost vlastního SQL příkazu. V detailu databáze je výpis tabulek a jejich vlastností, jako je úložiště, porovnávání, velikost dat, velikost indexů, volné místo, auto increment, počet záznamů v tabulce a komentář. Kromě základních úkonů, jako jsou změna názvu a porovnávání databáze, vykreslení schématu databáze, hledání, tvorba tabulek, pohledu, procedur, funkcí a událostí, vypsání dat, jsou zde také možnosti analyzování, optimalizování a kontroly tabulek. Samozřejmostí je zobrazení struktury jednotlivých tabulek s možností jejch úpravy. Program Adminer má přizpůsobitelný vzhled díky existenci několika základních CSS stylů, které lze nahrát k souboru Adminer.php na server a používat. Lze si také vytvořit vlastní styl, který by vzhledově vyhovoval nejlépe. Na obrázku (Obr. 3) je vidět ukázka již připravených stylů převzatá ze stránek http://adminer.org. 6

Obr. 3 Náhledy různých vzhledů programu Adminer 7

3.4 MSSQL vs. MySQL MySQL je multiplatformní databázový systém, vytvořený švédskou firmou MySQL AB, nyní vlastněný společností Sun Microsystems, dceřinou společností Oracle Corporation. K dispozici je pod bezplatnou licencí GPL. MSSQL je relační databázový systém, vytvořený společností Microsoft. Je nabízený v několika různých verzích. Každá je jinak omezena, např. maximálním množstvím procesorů a velikostí dat. Jak MySQL tak MSSQL využívají pro komunikaci jazyk SQL 6, ale do jeho standardů (SQL92) si každý přidal svou jedinečnou implementaci, většinou dle požadavků zákazníků. Rozdíly jsou jak na bázi syntaxe, tak sémantiky. Sémantické rozdíly můžeme vidět na příkladu jiného návratového typu. Příklad syntaktického rozdílu: MySQL využívá zpětných uvozovek `tabulka`, ale MSSQL používá hranaté závorky [tabulka]. Další ukázky rozdílů jsou v tabulce (Tab. 1). Tab. 1 Rozdíly mezi MySQL a MSSQL MySQL MSSQL Komentáře # komentář -- komentář Generování jedinečného numerického klíče AUTO_INCREMENT IDENTITY(1,1) Současný čas CURRENT_TIMESTAMP() GETDATE() 6 SQL jazyk - http://cs.wikipedia.org/wiki/sql 8

Výpis tabulek SHOW TABLES EXEC SP_TABLES List sloupců a typů DESCRIBE tablename HELP tablename Funkce pro délku řetězce CHARACTER_LENGTH() LEN() Určení proměnné SELECT VERSION() SELECT @@VERSION Deklarace proměnné declare test int declare @test int Výběr vrchních záznamů LIMIT TOP Úplné spojení není FULL JOIN Přirozené spojení NATURAL JOIN není Vložení s ošetřením kolize REPLACE() záleží na velikosti písmen REPLACE() nezáleží na velikosti pismen Microsoft pro své produkty počítá, že nejvíce uživatelů přistupuje k programům pomocí grafického uživatelského rozhraní. Proto většina ovládání databázového serveru MSSQL se provádí pomocí nabídek v programech Management Studio nebo Configuration Manager. Např. vytváření uživatelských práv je primárně od Microsoftu doporučováno spravovat přes Management Studio. Sice existuje několik uložených procedur, které na úrovni SQL jazyka některé úkony ovládají a daly by se použít přes příkazovou řádku, ale nezvládají všechny úkony a je potřeba vždy oprávnění administrátora. 9

3.4.1 Podpora operačních systemů MSSQL je produkt společnosti Microsoft, pro spuštění serveru je zapotřebí mít nainstalovaný některý operační systém Microsoft Windows, jehož verze je spojena s minimální verzí pro MSSQL. Společnost Microsoft doporučuje spustit SQL Server 2008 na počítačích s formátem souborů NTFS. Naproti tomu MySQL lze spustit jak na systému Microsoft Windows, tak také Mac OSX, Linux, Unix, BSD, Solaris, OpenSolaris, AmigaOS a dokonce na Symbianu. Jelikož MySQL má otevřené zdrojové kódy, můžeme ho pomocí vlastní kompilace zdrojových kódů spustit na mnoha různých operačních systémech. 3.4.2 Omezení serverů Maximální velikost MSSQL databáze je určena na 524 258 TB (32767 souborů násobena 16 TB maximální velikost souboru). U MySQL je tato velikost neomezená, resp. záleží pouze na velikosti pevných disků na serveru, kde je databáze spuštěná. Velikost tabulek a záznamů je v tabulce (Tab. 2). Tab. 2 Omezení velikostí tabulek a záznamů MSSQL MySQL Velikost tabulky 524 258 TB 256 TB (MyISAM) 64 TB (Innodb) Velikost záznamu omezena velikostí tabulky 64 kb Innodb 8 000 byte Sloupců na záznam 30 000 4 096 Velikost názvu sloupce 128 znaků 64 znaků 10

Omezení pro různé datové typy jsou také rozdílná. Velikost datového typu CHAR je u MSSQL až 2 GB za předpokladu, že využijeme konstrukci VARCHAR(MAX). MySQL je omezen na 64 kb. U čísel má také MSSQL větší možnou velikost (126 bitů) než MySQL (64 bitů). Typ DATE končí u obou serverů rokem 9999, ale u MSSQL začíná rokem 0001 a u MySQL rokem 1000. 3.4.3 Datové typy Datové typy jsou také rozdílné a to jak různým pojmenováním a různou velikostí, tak mají své vlastní datové typy. Veškeré detaily jsou vidět v tabulce (Tab. 3). Tab.3 Datové typy jednotlivých databází MSSQL MySQL Celá čísla TINYINT, SMALLINT, INT, BIGINT TINYINT (8-bit), SMALLINT (16-bit), MEDIUMINT (24-bit), INT (32-bit), BIGINT (64-bit) Desetinná čísla FLOAT, REAL FLOAT (32-bit), DOUBLE (64- bit) Řetězce CHAR, VARCHAR, TEXT, NCHAR, NVARCHAR, NTEXT CHAR, BINARY, VARCHAR, VARBINARY, TEXT TINYTEXT, TEXT, MEDIUMTEXT, LONGTEXT Dekadické NUMERIC, DECIMAL, SMALLMONEY, MONEY DECIMAL Datum, Čas DATE, DATETIMEOFFSET, DATETIME2, SMALLDATETIME, DATETIME, TIME DATETIME, DATE, TIMESTAMP, YEAR 11

Binární BINARY, VARBINARY, IMAGE, FILESTREAM TINYBLOB, BLOB, MEDIUMBLOB, LONGBLOB Další CURSOR, TIMESTAMP, HIERARCHYID, UNIQUEIDENTIFIER, SQL_VARIANT, XML, TABLE ENUM, SET, GIS data types (Geometry, Point, Curve, LineString, Surface, Polygon, GeometryCollection, MultiPoint, MultiCurve, MultiLineString, MultiSurface, MultiPolygon) 3.4.4 Zobrazení informací z DB V každé databázi je potřeba zjistit informace o jednotlivých databázích, tabulkách, triggerech atd. Nejznámější metodou získávání metadat (informací) z různých databází je použití INFORMATION SCHEMA, kde jsou jinak tyto informace k dispozici přes nestandartní příkazy. V relačních databázích se toto schéma využívá jako ANSI standart pro čtení všech informací z tabulek, pohledů, sloupců a procedur. Např. pro zobrazení informací o tabulkách v databázích se využívá část information_schema - TABLES, která je u obou databází stejná, ale každá má i svojí vlastní podobu: MSSQL: MySQL: EXEC sp_tables @table_type = "'TABLE'"; SHOW TABLES; U některých objektů neexistuje stejná varianta pomocí information schema, ale je potřeba využívat pouze vlastní příkazy. Pokud chceme například získat výpis triggerů, použijeme tyto příkazy: MSSQL: MySQL: SELECT name FROM sys.triggers WHERE is_ms_shipped = 0; SHOW TRIGGERS; 12

Podobné je to při zjištění uživatelů na serveru: MSSQL: MySQL: EXEC sp_who 'active'; SELECT * from mysql.user; 3.4.5 Licence 3.4.5.1 MySQL MySQL je Open Source software. To znamená, že má jak technickou dostupnost kódu, tak legální dostupnost - licenci software, která umožňuje, při dodržení jistých podmínek, uživatelům zdrojový kód využívat, například prohlížet. Také nabízí možnost šířit tyto změny do té doby, dokud je software stále Open Source, a to díky licenci GPL. Při dodržení požadavků GPL je MySQL zdarma. 3.4.5.2 MSSQL U MSSQL je licenčních jednání více dle nabízené edice: Enterprise Edition (Server + CAL, Pre processor) Standard Edition (Server + CAL, Pre processor) Workgroup Edition (Server + CAL, Pre processor) Express Edition (zdarma) Compact Edition 3.5 s SP1 (zdarma) Web Edition (Pre processor) Standard Edition for Small Business (Server + CAL) Developer Edition (licence na uživatele) Licence Server + CAL (Client Access Licence) znamená, že před spuštěním instance serverového softwaru musí být licence přiřazena serveru. Server je fyzické hardwarové zařízení. Tento server je licencovaným serverem pro tuto konkrétní licenci. Stejnému serveru můžete přiřadit i jiné softwarové licence, stejnou licenci však nemůžete přiřadit více než jednomu serveru. Pro každou přiřazenou licenci 13

můžete spustit současně jednu instanci serverového softwaru v jednom POSE nebo VOSE na licencovaném serveru. Pre processor dle společnosti Microsoft znamená, že před spuštěním instance serverového softwaru na serveru musíte určit požadovaný počet softwarových licencí a přiřadit je serveru. Server je fyzické hardwarové zařízení. Tento server je licencovaným serverem pro tuto konkrétní licenci. Celkový počet softwarových licencí požadovaných pro server je dán součtem softwarových licencí pro každý fyzický procesor používaný prostředím POSE a každý virtuální procesor používaný prostředími VOSE. Pokud prostředí VOSE používá část virtuálního procesoru, tato část se počítá jako celý virtuální procesor. Stejnému serveru můžete přiřadit i jiné softwarové licence, stejnou licenci však nemůžete přiřadit více než jednomu serveru. 3.4.6 Komunita Každý z těchto serverů má různou základnu uživatelů. Původní rozložení uživatelů bylo následující: MSSQL kvůli vysoké cenně a nemožnosti běhu na jiném operačním systému než Microsoft Windows využívaly výhradně velké firmy, naopak MySQL využíval uživatel, kterému stačilo si do databáze uložit pár svých tabulek pro osobní webové stránky. V současné době se oba tyto servery snaží protlačit i do sféry, kde se používá konkureční řešení. Např. MSSQL vydalo edice, které jsou i pro komerční použití zdarma, a MySQL má i placené verze, které se mohou pyšnit velkou podporou. Díky původnímu rozložení uživatelů se také vyvinuly různé druhy komunit okolo daného serveru. MySQL má rozsáhlá uživatelská fóra na internetu, kde se zkušenějsí uživatelé snaží pomoci uživatelům méně zkušeným. Vznikají blogy, na kterých uživatelé MySQL školí svými články bez nároku na honorář. Naproti tomu MSSQL má komunitu ještě poměrně velmi uzavřenou. Jednotlivé firmy si najímají programátory, kteří jim řeší problémy, a jelikož tato řešení musí platit, tak zůstávají firemním know how jednotlivých firem nebo programátorů. Existuje velké množství školení, kde se lze dozvědět mnoho informací, ale stojí nemalé částky. 14

Existují také oficiální dokumentace na stránkách jednotlivých serverů, ale i zde je znát vliv komunit. Oproti MSSQL má MySQL možnost uvádět příklady z praxe i na velkém fóru, kde se dá kromě definic nalézt i příklady jiných a konkrétních řešení. 3.5 MSSQL a PHP Pro připojení k SQL Serveru 2008 lze v jazyce PHP využít několik různých ovladačů. Nejpoužívanější je ovladač MSSQL 7, který je populární díky podobnosti s ovladači pro MySQL a zatím jako jediný z ovladačů má velkou podporu i ze strany uživatelů PHP. Další alternativou je ovladač SQLSRV 8, který byl v době zadávání a práce na projektu ve verzi 1.1. SQL Server Driver je rozšíření PHP 5, které umožňuje přístup k datům na SQL Server 2005 a novější verze. Rozšíření poskytuje procedurální rozhraní (SQLSRV prodloužení) a nejnovější verze 2.0 také objektově-orientované rozhraní (rozšíření PDO) pro přístup k datům ve všech verzích (včetně Express) začínající s SQL Server 2005. Díky němu můžeme ověřovat systém Windows, podporovat transakce, streaming, metadata a výpis chyb. Implementace se liší od ovladače MySQL ve větší míře a některé funkce úplně chybí. V tabulce (Tab. 4) jsou základní rozdíly a popis funkcí je zde pouze pro ukázání rozdílů mezi ovladači. Není to úplná syntaxe funkcí. 7 MSSQL driver - http://php.net/manual/en/book.mssql.php 8 SQLSRV driver - http://msdn.microsoft.com/en-us/library/cc296172(v=sql.90).aspx 15

Tab. 4 Rozdíly ovladačů PHP MySQL SQLSRV pozn. Připojení k DB mysql_connect (server, username, passwoord, new_link, client_flags) sqlsrv_connect(servername, connectioninfo (UID, PWD, Database, )) Verze serveru mysql_get_server_info (resource) array sqlsrv_server_info (resource) Sqlsrv vrátí asociované pole a v něm je hodnota SQLServerVersion Výběr databáze mysql_select_db (db, resource) neexistuje U sqlsrv nutno nahradit posláním query s SQL dotazem Získání záznamu z výsledku dotazu mysql_result (result, row, field) array sqlsrv_fetch_array (result, SQLSRV_FETCH_NUMERIC, SQLSRV_SCROLL_NEXT) Sqlsrv vrátí číselné pole a lze na pozici pole field získat buňku Informace o poslední chybě mysql_error (resource) array sqlsrv_errors () Sqlsrv pro každou chybu vrací pole hodnot: SQLSTATE, kód a zprávu 16

3.6 Licenční ujednání programu Adminer Program Adminer je zdarma pro komerční i nekomerční použití. Tento program je pod licencí Apache 9. Jedná se o OPEN SOURCE program. 9 Licence Apache - http://www.apache.org/licenses/license-2.0.html 17

18

4 Řešení Program Adminer byl původně psaný pouze pro ovladač MySQL a nepočítal s budoucí podporou jiné databáze. Z tohoto důvodu bylo nutné překonat několik problémů, které se vyskytly během implementace: neoddělené funkce pro konkrétní databázi a pro jádro Adminera refaktoring stávajícího kódu rozdílnost logiky ovladače MySQL a SQLSRV a s tím spojená absence funkcí neexistence jazykových konstrukcí jazyka jednotlivých serverů např. SHOW SQL Server lze ovládat pomocí některého nástroje (např. Management Studio) pomocí přístupu přes internet, pokud je tato možnost povolena. Problém vzniká, pokud je před místní sítí (INTRANET) s počítačem s SQL Serverem firewall, který blokuje přístupy pro nestandardní porty. Problém je popsán na obrázku (Obr. 4). Během práce s programem Adminer se může na straně klienta využívat pouze webový prohlížeč, který komunikuje s webovým serverem pomocí portu 80, který je standardní pro prohlížení webových stránek a tedy firewall neblokuje přístupu do sítě. 19

Obr. 4 Připojení k MSSQL pomocí webového prohlížeče (WB) přeš webový server (WS) V ideálním případě by struktura propojení k databázi pomocí programu Adminer vypadala jako na obrázku (Obr. 5). Všechny funkce a SQL příkazy takto byly odděleny mimo vlastní jádro Admineru. Bohužel tomu tak ve většině případů nebylo a bylo nutné zasahovat i do jádra. Vytvořil se soubor mssql.inc.php, který obsahuje veškeré nutné funkce pro ovládání MSSQL pomocí programu Adminer. Velká část kódu byla přenesena z vlastního jádra, aby bylo možné tyto funkce používat i pro další databázové servery. 20

Obr. 5 Architektura propojení databází k programu Adminer 4.1 Funkce souboru mssql.inc.php Po přihlášení do programu Adminer pomocí formulářové nabídky, kde si vyberete databázi MSSQL, se tato informace uloží do proměnné GET a poté se v souboru bootstrap.inc.php rozhodne, který soubor ovladače pro databázi v programu Adminer se bude používat. Pokud je nainstalováno rozšíření SQLSRV v PHP pro práci s databází MSSQL, bude využito s nejvyšší prioritou. Pokud by nebylo nainstalované, využije se rozšíření MSSQL. Oboje rozšíření se nacházejí v souboru mssql.inc.php, který obsahuje přepis funkcí pro ovládání databáze MSSQL. Po porovnání proměnné GET se vytvoří objekt Min_DB dle použitého rozšíření, který obsahuje základní funkce pro práci s MSSQL. Connect připojení k databázi Tato funkce se připojí k databázi s přihlašovacími údaji získanými na úvodní stránce. Původní verze pouze pro MySQL četla v případě, že se tyto údaje nezadaly, ze souboru php.ini, kam si tyto informace může ukládat. Ovladač SQLSRV tuto možnost nepoužívá. Po úspěšném připojení se získá informace o serveru, ke kterému jsme připojeni. Ze všech informací, které server vrací pomocí funkce 21

sqlsrv_server_info(), je využita pouze informace o verzi kvůli podobnosti s MySQL. V případě jakékoliv chyby je ta chyba hned zobrazena uživateli. Quote Tato funkce převádí řetězec, který chceme poslat databázi, na escapovaný ohraničený apostrofem. Pokud se znak apostrofu objeví i uvnitř řetězce, pak je zdvojen. Je to pro obranu vůči sql injection, což je útok vsunutím jiného kódu přes neošetřené vstupy do databáze. Select_DB Pokud chceme vybrat k používání databázi, v MySQL existovala přímo funkce pro tento úkon. SQLSRV toto neumožňuje, proto je potřeba poslat databázi SQL příkaz v podobě: USE databáze. Query, multi query, store result a result Tyto funkce zpracují poslaný příkaz v jazyce SQL, získají o něm informace, jako je počet záznamů ovlivněných, a ke každému získají informace o jednotlivých sloupcích. Pokud proběhne příkaz bez chyb, pak se vytvoří objekt Min_result, díky kterému můžeme pomocí dalších funkcí získat výsledek dotazu nad databází. Min_result Funkce tohoto objektu jsou velice podobné běžně využívaným funkcím ovladače pro MySQL. Jsou to fetch_assoc(), vracející asociované pole hodnot, fetch_row, vracející číselné pole hodnot, a fetch_field(), která načte informace o sloupci z výsledku do proměnné objektu. 4.2 Funkce SQL jazyka Jako další funkce v souboru mssql.inc.php jsou funkce pro základní dotazy nad databází. Jsou obecné a nezávislé na použitém ovladači pro databázový server MSSQL. Většina byla původně umístěna ve všech souborech programu Adminer a 22

nebyla oddělena. Pokud jsou ale umístěny zvlášť, lze použít program Adminer pro různé databázové stroje. Mezi ty nejdůležitější funkce patří následující: get_databases, limit, logged_user, table_list, count_tables, table_status, fields, indexes, collations, rename_databases, foreign_keys, trigger, triggers, alter_indexes a alter_table. Get_databases Je to funkce pro výpis všech databází na serveru. V ovladači pro MySQL je tato funkce použita voláním dotazu SHOW DATABASES. Konstrukce SHOW však nad databázovým serverem MSSQL neexistuje. Proto je potřeba volat uloženou proceduru sp_databases, která dělá přesně to samé. Limit Tato funkce umožnuje při výpisu záznamů z tabulky omezit počet zobrazených záznamů. U MySQL je konstrukce LIMIT a OFFSET (LIMIT číslo1 OFFSET číslo2), Triggers Tato funkce vrací výpis triggerů pro tabulku, která je vstupním parametrem této funkce. V MySQL je kód pouze SHOW TRIGGERS LIKE název_tabulky. Server MSSQL nemá konstrukci SHOW a tedy je potřeba tyto informace získat ze systémových objektů a tím pádem se SQL příkaz změní na: SELECT sys1.name, CASE WHEN OBJECTPROPERTY(sys1.id, 'ExecIsInsertTrigger') = 1 THEN 'INSERT' WHEN OBJECTPROPERTY(sys1.id, 'ExecIsUpdateTrigger') = 1 THEN 'UPDATE' WHEN OBJECTPROPERTY(sys1.id, 'ExecIsDeleteTrigger') = 1 THEN 'DELETE' END [Event], CASE WHEN OBJECTPROPERTY(sys1.id, 'ExecIsInsteadOfTrigger') = 1 THEN 'INSTEAD OF' ELSE 'AFTER' END [Timing] FROM sysobjects sys1 JOIN sysobjects sys2 ON sys1.parent_obj = sys2.id WHERE sys1.xtype = 'TR' AND sys2.name = název_tabulky 23

Podobně je na tom funkce trigger, která místo všech triggerů pro jednu tabulku vypíše trigger podle jména. Alter_table Oproti serveru MySQL, kde jde ALTER TABLE zapsat na více sloupců do jednoho bloku, kde jde pomocí jednoho příkazu změnit název tabulky, název sloupce, je to u MSSQL o něco složitější. Změna každého sloupce musí být provedena zvlášť, vždy musí každý sloupec začínat i ALTER TABLE. Změna jména se musí provádět pomocí uložených procedur. Collation lze měnit, ale jen u jednotlivých sloupců. Další funkce jsou uvedené v tabulce (Tab. 5). Tab. 5 Další funkce SQL MySQL MSSQL Logged_user Select user() Select suser_name() Get_databases Show databases Exec sp_databases Tables_list Show faull tables Select table_name, table_type from information_schema.tables Count_table Show tables in databáze Select count(*) from information_schema.tables Collation Show collation Select name from fn_helpcollations() 24

5 Instalace Pro instalaci Admineru s SQL Server 2008 na hostitelském PC je potřeba mít nainstalováno následující software, bez tohoto nelze spustit serverovou část: Microsoft Windows Vista/7 Microsoft Visual Studio 2008 Microsoft. NET Framework 3.5 Windows PowerShell 1.0 (v případě Windows Vista) Microsoft SQL Server 2008 PHP IIS7/Apache SQL Server Driver for PHP 1.1 Minimální konfigurace počítače je závislá pouze na požadavcích jednotlivého softwaru. Největší důraz je kladen na SQL Server 2008. Pro využívání programu Adminer pouze pro vzdálenou správu stačí použít jakýkoliv webový prohlížeč. 5.1 Konfigurace SQL Server 2008 V nastavení SQL Serveru 2008 je nutné nastavit mixed mode, který dovolí se přihlásit pomocí SQL autentifikace. Původní konfigurace povoluje přístup pouze pomocí přihlašovacích údajů systému Windows. 25

5.2 SQLSRV 1.1 10 K instalaci ovladače SQLSRV verze 1.1, který zprostředkuje komunikaci mezi vlastní PHP aplikací a MSSQL, je zapotřebí stáhnout soubor EXE 11, který je potřeba rozbalit do adresáře rozšíření PHP (např. C:\php\ext). Ten je nastaven v souboru php.ini. Do něj je potřeba přidat, který dll soubor použijeme viz přiložená dokumentace. Ověření funkčnosti se provádí spuštěním funkce phpinfo(). 5.3 Uživatelská práva V současné době není implementované rozhraní pro správu práv, proto je potřeba nastavit práva vlastníka databáze pomocí MS Management Studia. V SQL Server 2008 máme tři základní skupiny práv administrátor, vlastník databáze a běžný uživatel. Pokud provedeme operaci, na kterou nemáme oprávnění, pak nám SQL Server 2008 vypíše chybovou hlášku. 10 SQLSRV 1.1 - http://sqlsrvphp.codeplex.com/wikipage 11 Download SQLSRV - http://www.microsoft.com/downloads/en/confirmation.aspx?familyid=ccdf728b-1ea0-48a8-a84a-5052214caad9&displaylang=en 26

6 Testování Testování samotného PHP kódu ovladače MSSQL pro program Adminer je psáno za pomocí PHPUnit testů. PHPUnit je framework pro vytváření Unit testů pro jazyk PHP. Princip testování pomocí Unit testů spočívá ve spouštění sad testů, které by měly prověřit všechny aspekty testovaných částí kódu. Takových testů je nutno napsat celou řadu a měly by zkoušet především to, povedlo-li se objekt vytvořit a provádí-li správně požadované operace. 6.1 Způsob testování Při spuštění testu se spustí funkce setup(), která nastaví proměnnou GET na hodnotu mssql, aby po přiložení souboru mssql.inc.php, který budeme testovat, mohla být otestovaná část pro ovladač SQLSRV, a připojí se k databázi podle údajů uložených v souboru SetTesting.php. Poté se otestují jednotlivé funkce tříd Min_DB a Min_result. Některé jsou na sobě závislé, a proto je nejde testovat všechny samostatně. Dále jsou testované obecné funkce jazyka SQL, které jsou totožné jak pro ovladač SQLSRV, tak i pro další spojené se serverem MSSQL. Aby tyto funkce byly správně otestované, je potřeba si pro testy vytvořit vlastní databázi na serveru MSSQL a do ní vložit testovací data. Tyto data jsou v podobě SQL příkazu uloženy v souboru SetTest.php pro možné případné změny. Po skončení testu je tato databáze smazána. 6.2 Instalace Pro spuštění testů je potřeba mít nainstalovaní framework PHPUnit. Postup jeho instalace je v příloze pro jednotlivé systémy. Na začátku před spustěním je potřeba nastavit proměnné v souboru SetTesting.php jako jsou adresa serveru, jméno uživatele, heslo, případně zkontrolovat název testovací databáze, jestli není stejná databáze již na serveru MSSQL, a vyplnit parametry databáze. Je potřeba také pro uložené uživatelské jméno mít právo na vytvoření nové databáze. 27

Pro operační systém Microsoft Windows je potřeba spustit test pomocí souboru RunTest.bat, který například obsahuje následující příkaz: C:\php\phpunit.bat./ kde první cesta je závislá na tom, kde máte nainstalovaný framework PHPUnit. Všechny soubory testů (RunTest.bat, mssqltest.php, SetTesting.php) jsou uloženy v adresáři Test, který se nachází ve stejném adresáři jako je testovaný soubor mssql.inc.php. 28

7 Závěr V této práci jsem se zabýval správou MSSQL databáze přes webové rozhraní pomocí programu Adminer. Ten byl původně psaný pro databázový server MySQL a nebyl připraven pro použití s více databázemi. Cílem bylo, aby uživatel programu Adminer mohl používat stejný program se stejným uživatelským rozhraním jak pro databázi MySQL, tak pro MSSQL. Většina toho se povedla, vyjímky tvoří správa uživatelských účtů a sledování statistik serverů. Tyto věci jsou primárně podle společnosti Microsoft v databázi MSSQL určeny k úpravě přes grafické uživatelské rozhraní, ale ne přes SQL příkazy. Nyní s programem Adminer můžeme provádět základní operace nad databází MSSQL jako je práce s databází, s tabulkou, změnou dat, triggery, indexy, cizími klíči, zobrazování a editaci záznamů a psaní vlastního SQL dotazu. Testování je prováděno pomocí frameworku PHPUnit. Aplikace se neustále vyvíjí a jsou přidávány další funkčnosti v závislosti na tom, jak se snaží firma Microsoft podporovat standardy SQL. Aplikace vznikla ve spolupráci s laboratoří Interoperability Lab pro společnost Microsoft a ve spolupráci s Ing. Jakubem Vránou. Vizí do budoucna je správa práv a možnosti sledování statistik o SQL Serveru, které se opírají o možnosti či nemožnosti vlastností MSSQL. 29

30

8 Literatura [1] Hotek, Mike. Microsoft SQL Server 2008 Step by step. Microsoft Press, 2009. ISBN-10: 0-7356-2604-9 [2] Brust, Andrew. Forte, Stephen. Mistrovství v programování SQL Serveru 2005. Computer Press, 2007. ISBN: 978-80-251-1607-4 [3] Lacko, Luboslav. Jak vyzrát na Microsoft SQL Server 2008. Computer Press, 2009. ISBN: 978-80-251-2101-6 [4] Lacko, Luboslav. SQL Hotová řešení. Computer Press, 2003. ISBN:80-7226-975-5 [5] PHP [online]. [cit 2009-11-10]. < http://php.net>. [6] MySQL [online]. [cit 2009-10-05]. < http://mysql.com>. [7] Comparison of different SQL implementations [online]. [cit 2010-04-15]. <http://troels.arvin.dk/db/rdbms/>. [8] Alberton, Lorenzo. Extracting META information from SQL Server [online]. [cit 2010-04-15]. <http://www.alberton.info/sql_server_meta_info.html>. [9] SQLSRV API Reference [online]. [cit 2009-11-20]. <http://msdn.microsoft.com/en-us/library/cc296152(sql.90).aspx>. [10] Juřík, Kamil. Microsoft SQL Server 2008 licencování od A do Z [online]. [cit 2010-05-15]. <http://www.prosharepoint.cz/downloads/licensing/licencování%20sql%20serv eru%202008.pdf>. [11] SQL Server 2008 [online]. [cit 2010-05-10]. <http://msdn.microsoft.com/enus/sqlserver/bb671064.aspx>. 31

[12] Vrána, Jakub. Adminer [online]. [cit 2009-11-10]. <http://adminer.org>. [13] PHPUnit [online]. [cit 2010-04-20]. <http://www.phpunit.de/>. 32

9 Přílohy 9.1 Ukázky z programu Adminer Obr. 6 Přihlášení do aplikace Adminer 33

Obr. 7 Výpis struktury tabulky 34

Obr. 8 Ukázka provedení vlastního SQL příkazu 35

9.2 Instalace PHPUnit 9.2.1 Systém Windows Pro instalaci frameworku PHPUnit je potřeba mít nainstalovaný PEAR. Na stránce http://pear.php.net/go-pear se nachází PHP skript, který je potřeba spustit pomocí administrátorských práv z adresáže, kde máme nainstalované PHP (např. C:\PHP), a který celou instalaci provede. Pomocí Command Line spustíme v adresáři, kde máme PHP nainstalované, následující příkazy, které stáhnou a nainstalují vlastní framework: pear channel-discover pear.phpunit.de pear install phpunit/phpunit 9.2.2 Systém Linux/Unix Instalace se provede také pomocí PEAR, kde je postup stejný. Pouze instalace PEAR je odlišná a záleží na distribuci. 9.3 Vývojové prostředí Pro práci na vývoji bylo pracováno na tomto hardware s níže uvedeným software, jedná se tudíž o otestovanou konfiguraci, ne však o minimální. Dell Studio 1537 Intel Core 2 Duo CPU P8400 2,26GHz, 4GB RAM, ATI Mobility Radeon HD 3400 Series MS Windows 7 Professional Microsoft Visual Studio 2008 Professional Edition, Version 9.0.210022.8 RTM Microsoft Visual Studio 2008 SP1 36

Microsoft. NET Framework 3.5 SP1 Microsoft SQL Server 2008 Devenloper Edition (mixed mode active) XAMPP server (Apache 2.2.12 (IPv6 enabled) + OpenSSL 0.9.8k, MySQL 5.1.37 + PBXT engine, PHP 5.3.0, phpmyadmin 3.2.0.1,Webalizer 2.21-02 + GeoIP lite, FileZilla FTP Server 0.9.32, msmtp 1.4.17) IIS7 (funkce pro vývoj aplikací - CGI, Filtry ISAPI, rozšíření ISAPI) SQL Server Driver for PHP 1.1 Pro vývoj byl využíván jak Apache server (z balíku aplikací XAMPP), tak IIS7, který je implementován v systému Windows 7 Professional. O konfiguraci PHP se postará sám XAMPP, nebylo potřeba dělat žádné úpravy. 37