Č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: Mgr. Jakub Vrána Studijní program Elektrotechnika a informatika strukturovaný bakalářský Obor: Informatika a výpočetní technika květen 2011
ii
Poděkování Děkuji velmi panu Mgr.. 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 Zadání ............................................................................................................... 1
2 2.1
Cíle ....................................................................................................................... 1 Analýza ............................................................................................................. 3
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ů .......................................................................... 12
3.4.2
Omezení serverů ............................................................................................. 13
3.4.3
Datové typy..................................................................................................... 14
3.4.4
Zobrazení informací z DB .............................................................................. 16
3.4.5
Licence............................................................................................................ 17
3.4.6
Komunita ........................................................................................................ 18
3.5
MSSQL a PHP ................................................................................................... 19
3.6
Licenční ujednání programu Adminer ............................................................... 20 ix
4
Řešení ............................................................................................................. 21
4.1
Funkce souboru mssql.inc.php ........................................................................... 23
4.2
Funkce SQL jazyka ............................................................................................ 24
5
Instalace .......................................................................................................... 33
5.1
Konfigurace SQL Server 2008 ........................................................................... 33
5.2
SQLSRV 1.1....................................................................................................... 34
5.3
Uživatelská práva ............................................................................................... 34
6
Testování ........................................................................................................ 35
6.1
Způsob testování ................................................................................................ 35
6.2
Instalace .............................................................................................................. 35
6.3
Spuštění testu...................................................................................................... 36
7
Závěr ............................................................................................................... 39
8
Literatura ........................................................................................................ 41
9
Přílohy ............................................................................................................ 43
9.1
Ukázky z programu Adminer ............................................................................. 43
9.2
Vývojové prostředí ............................................................................................. 46
x
2 Zadání 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.
2.1 Cíle 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.2 spolupracuje s databázovým serverem MySQL3. Adminer byl vytvořen Ing. Jakubem Vránou4. 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
Adminer – http://adminer.org PHP – http://php.net 3 MySQL - http://mysql.com 4 Ing. Jakub Vrána – http://php.vrana.cz 1
2
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. Rozdíly mezi těmato serverama jsou mnohem menší než dříve. MSSQL byl určen hlavně pro velké firmy, kde je potřeba zpracovávat velice rychle velké objemy dat. V tomto směru mělo MSSQL jasnou výhodu, která byla kompenzována vysokou pořizovací cenou. Na druhé straně MySQL se využívalo převážně pro webové aplikace – např. servery Yahoo Finance a Slashdot dodnes MySQL využívají, což svědčí o její kvalitě. V současné době jsou tyto systémy stále podobnější. MySQL v současné verzi 5.6 dokáže se postupně vyrovnávat v rychlosti s MSSQL verze 2008 a na druhé straně společnost Microsoft dává k dispozici verzi zdarma i pro komerční použití a to s omezením do 4GB dat a využitím maximálně jednoho procesoru. Dřívější verze MySQL nižší než 5 nepodporovala triggery, uložené procedury a další, toto vše je již naimplementované. MySQL nabízí několik typů úložných enginů (storage engine), které se liší svými možnostmi, použitím a způsobem ukládání dat do souborů dle požadavků zákazníků. MSSQL má navíc podporu schémat. Tato schémata umožňují seskupit objekty a poskytují bezpečnostní hranici. Slouží jako oddělující vrstva mezi uživatelem databáze a objekty v rámci databáze (uživatelé vlastní schémata, ta vlastní jednotlivé objekty). Tím pádem lze udělat, aby schéma mohlo vlastnit více uživatelů. Přidělením schématu pro uživatele získá všechna oprávnění, která dané schéma v sobě obsahuje. Také MSSQL má možnost využívání kursorů. Kurzory umožňují sekvenčně zpracovávat
8
řádky dotazu. Toho se využívá např. v uložených procedurách a triggerech, kdy se příkazy SELECT potřebují postupně získat a zpracovat. 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ář
-- komentář
AUTO_INCREMENT
IDENTITY(1,1)
Současný čas
CURRENT_TIMESTAMP()
GETDATE()
Výpis databází
SHOW DATABASES
EXEC sp_databases
Komentáře Generování jedinečného numerického klíče
Výpis jednotlivých kolekcí Zjištění aktuálně přihlášeného uživatele
6
SELECT name FROM
SHOW COLLATION
fn_helpcollations()
SELECT USER()
SELECT SUSER_NAME()
SQL jazyk - http://cs.wikipedia.org/wiki/SQL
9
Počet tabulek v
SHOW TABLES IN
databázi
databáze
USE databáze SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLES
Získání informací o
SHOW FULL COLUMNS
sloupcích tabulky
FROM tabulka
SELECT c.*, t.name type, d.definition [default] FROM sys.all_columns c JOIN sys.all_objects o ON c.object_id = o.object_id JOIN sys.types t ON c.user_type_id = t.user_type_id LEFT JOIN sys.default_constraints d ON c.default_object_id = d.parent_column_id WHERE o.type IN ('S', 'U', 'V') AND o.name = tabulka
SELECT collation_name FROM
Výpis způsobu
SHOW CREATE
porovnávání databáze
DATABASE databáze
sys.databases WHERE name = databáze SELECT VIEW_DEFINITION FROM
Výpis pohledů nad
SHOW CREATE VIEW
tabulkou
tabulka
INFORMATION_SCHEMA.VIEWS WHERE TABLE_SCHEMA = SCHEMA_NAME() AND TABLE_NAME = tabulka
Informace o triggeru
SHOW TRIGGERS WHERE `Trigger` = trigger
SELECT s.name [Trigger], CASE WHEN OBJECTPROPERTY(s.id, 'ExecIsInsertTrigger') = 1 THEN 'INSERT' WHEN OBJECTPROPERTY(s.id, 'ExecIsUpdateTrigger') = 1 THEN 'UPDATE' WHEN OBJECTPROPERTY(s.id, 'ExecIsDeleteTrigger') = 1 THEN 'DELETE' END [Event], CASE WHEN OBJECTPROPERTY(s.id, 'ExecIsInsteadOfTrigger') = 1 THEN 'INSTEAD OF' ELSE 'AFTER' END [Timing], c.text FROM sysobjects s JOIN syscomments c ON s.id = c.id WHERE s.xtype = 'TR' AND s.name = trigger
10
Informace o triggerech
SHOW TRIGGERS LIKE
nad tabulkou
tabulka
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 = tabulka
Výpis tabulek
SHOW TABLES
EXEC SP_TABLES
List sloupců a typů
DESCRIBE tablename
HELP tablename
CHARACTER_LENGTH()
LEN()
Určení proměnné
SELECT VERSION()
SELECT @@VERSION
Deklarace proměnné
declare test int
declare @test int
LIMIT
TOP
Úplné spojení
není
FULL JOIN
Přirozené spojení
NATURAL JOIN
není
REPLACE()
REPLACE()
Funkce pro délku řetězce
Výběr vrchních záznamů
Vložení s ošetřením kolize
11
– záleží na velikosti písmen
– nezáleží na velikosti pismen
CREATE TRIGGER
Vytvoření triggeru
trigger AFTER
CREATE TRIGGER trigger
INSERT ON table
ON tabulka AFTER INSERT AS
FOR EACH ROW
BEGIN
BEGIN
Trigger_body
trigger_body
END
END 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.
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.
12
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ů
Velikost tabulky
MSSQL
MySQL
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ů
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.
13
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
TINYINT, SMALLINT, INT, BIGINT
TINYINT (8-bit), SMALLINT (16-bit), MEDIUMINT (24-bit), INT (32-bit), BIGINT (64-bit)
FLOAT, REAL
FLOAT (32-bit), DOUBLE (64bit)
Ř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
Celá čísla
Desetinná čísla
14
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)
15
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:
EXEC sp_tables @table_type = "'TABLE'";
MySQL:
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:
SELECT name FROM sys.triggers WHERE is_ms_shipped = 0;
MySQL:
SHOW TRIGGERS;
Podobné je to při zjištění uživatelů na serveru: MSSQL:
EXEC sp_who 'active';
MySQL:
SELECT * from mysql.user;
16
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 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 17
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. 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í.
18
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č MSSQL7 , 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č SQLSRV8, 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í. Tab. 4 – Rozdíly ovladačů PHP
Připojení k DB
Verze serveru
MySQL
SQLSRV
mysql_connect (server, username, passwoord, new_link, client_flags)
sqlsrv_connect(serverName, connectionInfo (UID, PWD, Database, …))
mysql_get_server_info (resource)
array sqlsrv_server_info (resource)
pozn.
Sqlsrv vrátí asociované pole a v něm je hodnota SQLServerVersion
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
19
Výběr databáze
mysql_select_db (db, resource)
Získání záznamu z výsledku dotazu
Informace o poslední chybě
mysql_result (result, row, field)
mysql_error (resource)
neexistuje
U sqlsrv nutno nahradit posláním query s SQL dotazem
Sqlsrv vrátí číselné array sqlsrv_fetch_array (result, pole a lze na pozici SQLSRV_FETCH_NUMERIC, pole field získat SQLSRV_SCROLL_NEXT) buňku
array sqlsrv_errors ()
Sqlsrv pro každou chybu vrací pole hodnot: SQLSTATE, kód a zprávu
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í Apache9. Jedná se o OPEN SOURCE program.
9
Licence Apache - http://www.apache.org/licenses/LICENSE-2.0.html
20
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ě.
21
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.
22
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é 23
server
vrací
pomocí
funkce
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
24
nebyla oddělena. Pokud jsou ale umístěny zvlášť, lze použít program Adminer pro různé databázové stroje. idf_escape Pro vstupní parametr typu string převede na escapovaný tvar pro databázi (identifikátor databáze). table Převede vstupní string na escapovaný tvar pro název tabulky, pohledu a schématu. connect Připojí se k databázi vytvořením instance objektu Min_DB. Tuto instanci má jako návratovou hodnotu, v případě chyby vrátí string. get_databases Získá pole stringů s názvy všech databázích, které jsou na připojeném serveru. limit Formuluje SQL požadavek do databáze na selekci s omezeným počtem ůdajů. Příklad použití pro vypsání dvou položek z tabulky TEST s podmínkou, že TEST_ID není rovno hodnotě 500: limit(" * from [TEST]", " where `TEST_ID` != '500'", "2");
limit1 Stejný případ jako výše uvedený, jen určuje formulaci pro vypsání jednoho řádku tabulky. db_collation Vstupem je název databáze a pro MSSQL prázdný druhý parametr, funkce získá kolekci dané databáze. 25
engines Vrací pole enginů databáze, MSSQL nepodporuje a tak vrací prázdné pole. logged_user Získá přihlášeného uživatele, jeho login. tables_list Před voláním této funkce je potřeba pomocí select_db() vybrat databázi. Z této databáze získá asociované pole s klíčem jako jméno tabulky a hodnotou typem objektu. count_tables Pro vstupní parametr pole s názvy databází vypíše počet tabulek, které v těchto databázích se nachází. table_status Vrací asociované pole s názvem a druhem tabulek v aktivní databázi. Před použitím této funkce je nutné použít select_db(). is_view Vrací pravdivostní hodnotu, jestli je daný objekt pohled. Využívá výše uvedenou funkci table_status(). fk_support Zjišťuje, jestli je podpora cizích klíčů. Používá se hlavně pro MySQL, kde cizí klíče podporuje pouze InnoDB. fields Získá informace o sloupcích tabulky – název, datový typ, velikost, nulovost, identitu a další. 26
indexes Pomocí této funkce lze získat informace o indexech tabulky, jejíž název je předán funkci jako parametr. view Získá SQL příkaz SELECT, pomocí kterého byl vytvořený pohled. collations Vrátí pole se způsobem porovnávání, které na daném serveru jsou k dispozici. information_schema Informuje, zda-li databázový server podporuje klasické information_schema. error Vrací escapovanou informaci o poslední chybě na serveru. exact_value Definuje výraz pro binární porovnání. create_database Vytvoří databázi s názvem a kolekcí, které vstupují do funkce jako parametry. drop_databases Smaže databáze, které jsou předané funkci jako položky pole. rename_database Přejmenování databáze na nové jméno a změna způsobu porovnávání. Je potřeba před voláním této funkce mít definovanou konstantu DB, ve které bude současný název databáze.
27
auto_increment Vrací syntaxi příkazu pro generování unikátního klíče. Lze nastavit první číslo záznamu a to uložením této hodnoty do proměnné $_POST["Auto_increment". alter_table Tato funkce umožňuje tři operace: vytvoření tabulky, přejmenování tabulky a změnu tabulky a jejich sloupců. Vše je závislé na vstupních parametrech: $table(string), $name(string), $fields(array), $foreign(array), $comment(string), $engine(string),
$collation(string),
$auto_increment(int),
$partitioning(string).
Příklad použití: $col = array( " TEST_NAME ", " varchar(5) ", " NOT NULL ", "", "", "", "" ); alter_table("", "tabulka", array(array("", $col, "")), array(), "", "", "", "", ""); Takto vytvoří tabulku s názvem tabulka a sloupcem TEST_NAME.
alter_indexes Může vytvořit nebo odstranit index. Záleží na vstupních parametrech. alter_indexes("NUMBERS", array(array("INDEX", "(EN)"))); - takto vytvoří index v tabulce NUMBERS nad sloupcem EN. alter_indexes("NUMBERS", array(array("INDEX", $name, DROP))); - takto tento index smaže. begin
28
Definuje začátek transakce. insert_into Definuje syntaxi SQL příkazu pro vložení záznamu do tabulky. insert_update Vloží nebo upraví záznamy v tabulce. last_id Získá poslední ID, které bylo určeno jako auto_increment (generovaný unikátní klíč). explain Zobrazí informaci, jak server provede příkaz SELECT. foreign_keys Vrátí pole s informace o cizích klíčích, které se nachází v dané tabulce. truncate_tables Vrátí syntaxi SQL příkazu na vyprázdnění tabulky od záznamů. drop_view Smaže všechny pohledy, které jsou uvedené ve vstupním poli. drop_tables Smaže všechny tabulky, které jsou uvedené ve vstupním poli. move_tables Přesune tabulky a pohledy do jiného schématu nebo databáze.
29
trigger Získá informace o triggeru ze systémových objektů. 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’ triggers Získá informace o všech triggerech, které souvisí a tabulkou. trigger_options Zobrazí možnosti triggerů, které umožňuje server – timing a type. schemas Získá jména všech schémat. set_schema Informuje o možnosti nastavení schématu. get_schema Získá aktuální schéma pro aktuální databázi. 30
use_sql Definuje syntaxi SQL příkazu pro změnu databáze. show_variables Ukáže proměnné serveru, MSSQL nemá naimplementované. show_status Ukáže proměnné stavu serveru, MSSQL nemá naimplementované. support Lze zjistit, jaké části jsou na serveru naimplementované.
31
Další rozdílné kontrukce 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 full 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()
32
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.
33
5.2 SQLSRV 1.110 K instalaci ovladače SQLSRV verze 1.1, který zprostředkuje komunikaci mezi vlastní PHP aplikací a MSSQL, je zapotřebí stáhnout soubor EXE11, 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 11
SQLSRV 1.1 - http://sqlsrvphp.codeplex.com/Wikipage Download SQLSRV - http://www.microsoft.com/downloads/en/confirmation.aspx?familyId=ccdf728b-1ea0-
48a8-a84a-5052214caad9&displayLang=en
34
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 s projde adresář s ovladači a načte si všechny. Poté postupně spouští testy – vytváří instanci objektu driverTesting. Nastavení testovací databáze se dá projít v souboru setTesting.php. Otestují se 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.
6.2 Instalace Instalace se provádí pomocí instalačního nástroje pro PEAR v PHP, který představuje distribuční systém balíčků pro PHP od verze 4.3.0. Pro instalaci PHPUnit testů verze 3.6 je potřeba mít PHP alespoň ve verzi 5.2.7., nejlépe ve verzi 5.3.3. a vyšší. Do PEAR je potřeba přidat nové kanály za pomocí následujících příkazů: pear channel-discover pear.phpunit.de pear channel-discover components.ez.no
35
pear channel-discover pear.symfony-project.com Nyní je možné spustit samostatnou instalaci, při které se využijí přidané kanály: pear install phpunit/PHPUnit Po úspěšném provedení by měli být nainstalované soubory v adresáři PEAR (např.: /usr/lib/php/PHPUnit nebo C:\xampp\php).
6.3 Spuštění testu Abychom mohli testy spustit, je potřeba provést následující operace. Pod operačním systémem „unixového typu“ stačí pouze spustit program phpunit následovně: phpunit UnitTest MujTest.php Kde MujTest.php jsou naše testy. Program phpunit umožňuje mnohem více věcí: phpunit --help PHPUnit 3.5.4 by Sebastian Bergmann.
Usage: phpunit [switches] UnitTest [UnitTest.php] phpunit [switches]
--log-junit
Log test execution in JUnit XML format to file.
--log-tap
Log test execution in TAP format to file.
--log-dbus
Log test execution to DBUS.
--log-json
Log test execution in JSON format.
--coverage-html
Generate code coverage report in HTML format.
--coverage-clover Write code coverage data in Clover XML format. --testdox-html --testdox-text
Write agile documentation in HTML format to file. Write agile documentation in Text format to file.
36
--filter <pattern>
Filter which tests to run.
--group ...
Only runs tests from the specified group(s).
--exclude-group ...
Exclude tests from the specified group(s).
--list-groups
List available test groups.
--loader
TestSuiteLoader implementation to use.
--repeat --tap
Runs the test(s) repeatedly. Report test execution progress in TAP format.
--testdox
Report test execution progress in TestDox format.
--colors
Use colors in output.
--stderr
Write to STDERR instead of STDOUT.
--stop-on-error
Stop execution upon first error.
--stop-on-failure
Stop execution upon first error or failure.
--stop-on-skipped
Stop execution upon first skipped test.
--stop-on-incomplete --strict
Mark a test as incomplete if no assertions are made.
--verbose --wait
Stop execution upon first incomplete test.
Output more verbose information. Waits for a keystroke after each test.
--skeleton-class --skeleton-test
--process-isolation --no-globals-backup
Generate Unit class for UnitTest in UnitTest.php. Generate UnitTest class for Unit in Unit.php.
Run each test in a separate PHP process. Do not backup and restore $GLOBALS for each test.
--static-backup
Backup and restore static attributes for each test.
--syntax-check
Try to check source files for syntax errors.
--bootstrap
A "bootstrap" PHP file that is run before the tests.
--configuration Read configuration from XML file. --no-configuration
Ignore default configuration file (phpunit.xml). 37
--include-path <path(s)> Prepend PHP's include_path with given path(s). -d key[=value] --help --version
Sets a php.ini value. Prints this usage information. Prints the version and exits.
V operačním systému Windows je postup odlišný. V adresáři s testy se vytvoří následující soubor RunTest.bat, který obsahuje následující příkaz: c:\PHP\phpunit.bat ./ Soubor RunTest.bat spustíme v příkazové řádce. Spustí všechny testy, které jsou končí v názvu na Test.php (např. MujTest.php).
38
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. Práce na projektu se skládala původně ze tří částí: přepsání nízkoúrovňových metod pro komunikaci s databází, vyčlenění funkcí specifických pro jednotlivé databázové systémy z hlavního jádra aplikace a implementace těchto funkcí. První a třetí část byla splněna i přes zdržení, které bylo způsobeno kvůli nedostatečné dokumentaci k nové verzi ovladače SQLSRV. Druhá část nebyla po konzultaci s Ing. Martinem Klímovou, Ph.D. implementována, jelikož její vyhotovení by vyžadovalo zásadní změny původního kódu, což by bylo v rozporu se zadáním bakalářské práce. 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. Ke konci vývoje byl využit protokol Git pro správu verzí. 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 Mgr. 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.
39
40
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]. . [8] Alberton, Lorenzo. Extracting META information from SQL Server [online]. [cit 2010-04-15]. . [9] SQLSRV API Reference [online]. [cit 2009-11-20]. . [10] Juřík, Kamil. Microsoft SQL Server 2008 licencování od A do Z [online]. [cit 2010-05-15]. . [11] SQL Server 2008 [online]. [cit 2010-05-10]. . 41
[12] Vrána, Jakub. Adminer [online]. [cit 2009-11-10]. . [13] PHPUnit [online]. [cit 2010-04-20]. . [14] Vrána, Jakub. 1001 tipů a triků pro PHP. Computer Press, 2010. ISBN: 97880-251-2940-1
42
9 Přílohy
9.1 Ukázky z programu Adminer
Obr. 6 – Přihlášení do aplikace Adminer
43
Obr. 7 – Výpis struktury tabulky
44
Obr. 8 – Ukázka provedení vlastního SQL příkazu
45
9.2 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
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.
46