BETA
Aby się zalogować, najpiew wybierz portal.
Aby się zarejestrować, najpiew wybierz portal.
Podaj słowa kluczowe
Słowa kluczowe muszą mieć co najmniej 3 sąsiadujące znaki alfanumeryczne
Pole zawiera niedozwolone znaki

Baza wiedzy











Wykorzystanie protokołu http do obsługi bazy danych MS SQL

29-07-2004 15:37 | User 79899

Przedstawiłem dwie technologie obsługi bazy, z nastawieniem jednak na szablony XML, gdyż są one jedną z bezpieczniejszych form udostępniania danych, a zastosowanie w nich arkuszy stylów sprawia, że wizualnie idealnie nadają się do wykorzystania w witrynach internetowych.

Wszystkie przedstawione przykłady działają na własnych serwerach (lokalnych), czyli wpierw musicie skonfigurować  MS SQL Server (katalog wirtualny). Jeżeli serwer jest udostępniony na stałe, to zamiast localhost w odnośnikach należy wpisać własną nazwę serwera.

Konfiguracja katalogu wirtualnego

Katalog wirtualny IIS jest pierwszą rzeczą jaką musimy stworzyć by wykorzystać protokół http do obsługi bazy danych. Pozwala on nam na publikowanie danych XML z MS SQL Server. Narzędziem, które stosujemy do jego konfiguracji to "Configure SQL XML Support in IIS".

Wpierw należy udostępnić IIS. Może być on już domyślnie zainstalowany przez Windows 2000. Jeżeli nie, trzeba w oknie „Panel Sterowania” otworzyć „Dodaj/Usuń Programy”, wybrać „Dodaj/Usuń składniki systemu Windows” i dodać „Internetowe usługi informacyjne”. Uruchamiamy teraz "Configure SQL XML Support in IIS". Aby udostępnić nowy katalog wirtualny należy rozwinąć nazwę swego serwera, wybrać "Domyślna witryna sieci Web", a następnie z menu Akcja polecenie Nowy i „Virtual Directory”.

Teraz utworzymy katalog główny. Wykorzystamy w tym celu bazę danych Northwind. Nazwę katalogu wirtualnego wpiszemy northwinddata, natomiast w Local Path podajemy ścieżkę dostępu do fizycznego folderu w systemie.

Wybieramy zakładkę Security. Zabezpieczymy nasz wirtualny katalog główny. Do wyboru mamy 3 opcje "Always log on as", "Use Windows Integrated Authentication" i "Use Basic Authentication to SQL Server account".

Pierwsza z nich pozwala użyć konta użytkownika Windows lub login MS SQL Server w celu uzyskania dostępu do bazy danych. Jest to model zaufanego serwera. Jego wadą jest to, że nie będzie się wiedzieć kto uzyskał dostęp do bazy.

Druga i trzecia opcja należą do modelu impersonalizacji/delegacji, czyli zawsze mamy informacje kto łączył się z bazą. Różnice pomiędzy nimi są takie, że w pierwszy przypadku użytkownik potrzebuje przeglądarki lub aplikacji, która obsługuje uwierzytelnienie w trybie Windows, w drugim natomiast dane uwierzytelniające są przesyłane jako zwykły tekst. W ramach bezpieczeństwa korzystanie z tej ostatniej opcji jest wskazane tylko w szczególnych przypadkach i nie zaleca się jej stosowania. Dlatego my wybieramy opcje "Use Windows Integrated Authentication"

Na zakładce Data Source, w pierwszej ramce dokonujemy wyboru SQL Server, z którym użytkownik chce się połączyć. Można wpisać nazwę serwera lub przejrzeć ich listę, jakie są dostępne w sieci. Domyślna instalacja lokalnej kopii oznaczona jest jako (local).

W ramce Database wybieramy bazę danych, którą będziemy używać (my wybieramy Northwind).

Zakładka Settings umożliwia nam wybór dopuszczalnych zapytań do bazy (jak użytkownicy się z nią będą komunikować).

  • Allow URL queries - umożliwia wprowadzenie instrukcji Transact-SQL, które chcielibyśmy wykonać bezpośrednio pod wskazanym adresem URL. Nie jest to zbyt bezpieczne gdyż nie są tu nakładane żadne ograniczenia.

  • Allow Template Queries - zezwala na zapytania szablonowe. Jest najbezpieczniejszą opcją, gdyż użytkownik może korzystać tylko z tych zapytań jakie wcześniej zostały skonfigurowane w plikach szablonów.

  • Allow XPath - zezwala na stosowanie języka zapytań XPath do przedkładania zapytań, które korzystają z perspektyw SQL Servera.

  • Allow POST - pozwala utworzyć formularz HTML, który potem będą mogli wypełniać klienci. Aby z tego skorzystać musimy aktywować także pierwszą z powyższych opcji, a co za tym idzie bezpieczeństwo danych maleje. Możemy także ograniczyć rozmiar zapytań POST, aby do serwera nie były kierowane zbyt duże zapytania.

Wybierając zakładkę Virtual Names możemy opcjonalnie skonfigurować remapowanie w taki sposób, by klienci nie byli obciążeni znajomością ścieżek dostępu. Nazwę wirtualną możemy wykorzystać również jako alias.

Ostatnia zakładka Advanced, jak sama nazwa wskazuje umożliwia konfigurację zaawansowanych ustawień.

Pierwsza ramka umożliwia wybór lokalizacji biblioteki DLL aplikacji SQLISAPI. W następnej możemy wprowadzić własne ustawienia do ciągu połączenia OLEDB, służącego do łączenia z bazą danych. W ostatniej mamy możliwość wyłączenia buforowania schematów.

Kwerendy URL

Kwerendy URL służą do pobierania i zwracania w przeglądarce internetowej danych z naszej bazy MS SQL Server. Aby to zrobić należy przekazać do URL parametry kwerend oraz inne ustawienia odpowiadające za formatowanie otrzymanego rezultatu. 

Przykład 1:

Poniższe zapytanie zwróci nam listę pracowników z następującymi  wybranymi danymi: nazwisko, imię, miasto.

´;SELECT+LastName,+FirstName,+City+FROM+Employees+FOR+XML+AUTO;SELECT+´´ class="">http://localhost/northwinddata?sql=SELECT+´´;SELECT+LastName,+FirstName,+City+´;SELECT+LastName,+FirstName,+City+FROM+Employees+FOR+XML+AUTO;SELECT+´´ class="">FROM+Employees+FOR+XML+AUTO;SELECT+´´

Jak widać powyżej schemat tworzenia kwerendy URL jest prosty. Po znaku ? który znajduje się po adresie serwera następuje sql= a następnie możemy zadawać zapytania sql-owe łącząc je znakiem + lub ,+(przy wyborze różnych kolumn). Na końcu zaś sekwencja FOR+XML+AUTO służąca do pobierania danych w postaci XML.

Nie zawsze jednak zwracany dokument musi być w postaci XML. Jeżeli nasza przeglądarka internetowa nie obsługuje tego standardu możemy po prostu zwrócić strumień znaków. ilustruje to poniższy przykład, który wypisuje nazwiska z tabeli Employees.

Przykład 2:

http://localhost/northwinddata?sql=SELECT+LastName+FROM+Employees&contenttype=text/html

Niestety zwracane dokumenty przez kwerendy URL nie są zbyt czytelne. Aby poprawić ich przejrzystość musimy zastosować arkusze stylów (XSL). W tym celu należy umieścić napisany wcześniej arkusz stylów w katalogu wirtualnym i dodać do URL parametr xsl. To rozwiązanie jest niezastąpione gdy nasza przeglądarka nie obsługuje XML. 

Przykład 3:

Wyświetlimy teraz dane z przykładu drugiego jednak po zastosowaniu arkusza stylów. Wpierw tworzymy arkusz stylów i zapisujemy go w katalogu wirtualnym pod nazwą worker.xsl

<?xml version=´1.0´?>
  <xsl:stylesheet xmlns:xsl=´http://www.w3.org/1999/XSL/Transform´ version=´1.0´>
  <xsl:template match=´/´>
<HTML>
<BODY>
<TABLE border="1">
<TR>
  <TD><B>Last Name</B></TD>
  <TD><B>First Name</B></TD>
<TD><B>City</B></TD>
</TR>
<xsl:for-each select="worker/Employees">
<TR >
<TD>
<xsl:value-of select="@LastName"/>
</TD>
<TD>
<xsl:value-of select="@FirstName"/>
</TD>
<TD>
<xsl:value-of select="@City"/>
</TD>
  </TR>
  </xsl:for-each>
</TABLE>
</BODY>
</HTML>
</xsl:template></xsl:stylesheet>

Poniższa kwerenda wyświetli nam sformatowane dane

http://localhost/northwinddata?sql=SELECT+LastName,+FirstName,+City+

FROM+Employees+FOR+XML+AUTO&root=worker&xsl=worker.xsl

Jak widzimy otrzymany rezultat jest bardzo przejrzysty. Arkusz stylów połączony z html daje nam spore możliwości do przedstawienia danych w atrakcyjnej formie.

Szablony XML

Szablony XML są stosowane ze względów bezpieczeństwa, gdyż pozwalają ukryć dane, które mają być udostępnione. To znaczy kod dostępu do danych jest ukryty i klient otrzymuje tylko wyniki kwerendy, która była zapisana w szablonie.

Pliki szablonu możemy zapisać w katalogu skojarzoną z nazwą wirtualną typu template. Dodajmy teraz nazwę wirtualną do naszego katalogu. Z menu wybierzmy właściwości katalogu wirtualnego, dalej wybieramy zakładkę Virtual Names i tam dodamy nazwę workers (tu będą dane o pracownikach). Pamiętajmy że jest ona typu template.

Przykład 1:

Szablony są dokumentami XML zawierające co najmniej jedną kwerendę. Prosty plik (nazwijmy go workerlist.xml) wygląda następująco:

<?xml version=´1.0´?>
<workerlist xmlns:sql=´urn:schemas-microsoft-com:xml-sql´>
  <sql:query>
SELECT LastName, FirstName, City
FROM Employees
FOR XML AUTO, ELEMENTS
  </sql:query>
</workerlist>

http://localhost/northwinddata/workers/workerlist.xml

Wyświetli nam listę pracowników

Przykład 2:

Aby zwiększyć funkcjonalność zapytań, za pomocą znacznika header możemy definiować parametry. Poniższy przykład wyświetli nam listę pracowników mieszkających w Seattle (plik zapiszemy jako workercity.xml w katalogu workers).

<?xml version=´1.0´?>
<workercity xmlns:sql=´urn:schemas-microsoft-com:xml-sql´>
  <sql:header>
<sql:param name=´City´>Seattle</sql:param>
  </sql:header>
  <sql:query>
SELECT LastName, FirstName, City
FROM Employees
WHERE City = @City
FOR XML AUTO, ELEMENTS
  </sql:query>
</workercity>

http://localhost/northwinddata/workers/workercity.xml

Jeżeli chcemy zmienić naszą domyślną wartość (w tym wypadku Seattle) należy do odnośnika dopisać ?City=poszukiwane_miasto. Poniżej wyświetlimy listę pracowników mieszkających w Londynie.

http://localhost/northwinddata/workers/workercity.xml?City=London

Aby dane zwracane do klienta były w przejrzystej formie należy zastosować arkusz stylów. Są dwa sposoby jego użycia. Pierwszy z nich to zastosowanie arkusza stylów na serwerze. 

Przykład 3:

W pliku xml, gdzie będziemy chcieli uzyskać sformatowaną listę pracowników (domyślnie pracujących w Seattle) musimy dodać odwołanie do pliku xsl.

plik workerxml.xml

<?xml version=´1.0´?>
<workerxml xmlns:sql=´urn:schemas-microsoft-com:xml-sql´
  sql:xsl=´workerxsl.xsl´>
  <sql:header>
<sql:param name=´City´>Seattle</sql:param>
  </sql:header>
  <sql:query>
SELECT LastName, FirstName, City
FROM Employees
WHERE City = @City
FOR XML AUTO, ELEMENTS
  </sql:query>
</workerxml>

plik workerxsl.xsl

<?xml version=´1.0´?>
<xsl:stylesheet xmlns:xsl=´http://www.w3.org/1999/XSL/Transform´ version=´1.0´>
<xsl:template match=´/´>
<HTML>
<BODY>
  <TABLE border="1">
  <TR>
<TD><B>Last Name</B></TD>
<TD><B>First Name</B></TD>
<TD><B>City</B></TD>
  </TR>
  <xsl:for-each select=´workerxml/Employees´>
  <TR >
  <TD>
<xsl:value-of select=´LastName´/>
  </TD>
  <TD>
<xsl:value-of select=´FirstName´/>
  </TD>
  <TD>
<xsl:value-of select=´City´/>
  </TD>
  </TR>
  </xsl:for-each>
</TABLE>
</BODY>
</HTML>
</xsl:template>
</xsl:stylesheet>

Na końcu odwołania musimy dodać sekwencję ?contenttype=text/html w celu poprawnego sformatowania przez przeglądarkę.

http://localhost/northwinddata/workers/workerxml.xml?contenttype=text/html

Aby wyświetlić pracowników z Londynu trzeba zastosować sekwencję łączoną &.

http://localhost/northwinddata/workers/workerxml.xml?City=London&contenttype=text/html

Przykład 4:

Użyjemy teraz arkusza stylów aby wyświetlić listę miast w jakich żyją pracownicy, a po wybraniu któregoś z nich ukażą nam się właśnie Ci pracownicy z tego miasta. 

plik workercityxml.xml

<?xml version=´1.0´?>
<workerxml xmlns:sql=´urn:schemas-microsoft-com:xml-sql´
  sql:xsl=´workercityxsl.xsl´>
  <sql:query>
SELECT DISTINCT City
FROM Employees
FOR XML AUTO, ELEMENTS
  </sql:query>
</workerxml>

plik workercityxsl.xsl

<?xml version=´1.0´?>
<xsl:stylesheet xmlns:xsl=´http://www.w3.org/1999/XSL/Transform´ version=´1.0´>
<xsl:template match=´/´>
<BODY>
<TABLE>
<TR>
<TD><B>Wybierz miasto</B></TD>
</TR>
<xsl:for-each select=´workerxml/Employees´>
<TR >
<TD>
<A>
<xsl:attribute name=´HREF´>
workerxml.xml?City=<xsl:value-of select=´City´/>&contenttype=text/html
</xsl:attribute>
<xsl:value-of select=´City´/>
</A>
</TD>
</TR>
</xsl:for-each>
</TABLE>
</BODY>
</xsl:template>
</xsl:stylesheet>

http://localhost/northwinddata/workers/workercityxml.xml?contenttype=text/html

Należy zwrócić uwagę, że plik workercityxsl.xsl korzysta również z pliku workerxml.xml, który stworzyliśmy wcześniej. Polecenie DISTINCT w pliku workercityxml.xml służy do tego aby nazwy miast się nie powtarzały.

Zastosujemy teraz arkusz stylów po stronie klienta. Warunkiem działania jest obsługa przez klienta XML. Ten sposób zmniejsza nieco obciążenie serwera, jednak nadaje się tylko do wewnętrznych aplikacji lub witryn internetowych. 

Przykład 5:

Aby wyświetlić pracowników w danym mieście musimy dodać do naszego wcześniejszego przykładu instrukcje przetwarzania.

plik workercityClient.xml

<?xml version=´1.0´?>
<?xml-stylesheet type=´text/xsl´ href=´workerxslClient.xsl´?>
<workercity xmlns:sql=´urn:schemas-microsoft-com:xml-sql´>
<sql:header>
<sql:param name=´City´>Seattle</sql:param>
</sql:header>
<sql:query>
SELECT LastName, FirstName, City
FROM Employees
WHERE City = @City
FOR XML AUTO, ELEMENTS
</sql:query>
</workercity>

plik workerxslClient.xsl

<?xml version=´1.0´?>
<xsl:stylesheet xmlns:xsl=´http://www.w3.org/1999/XSL/Transform´ version=´1.0´>
<xsl:template match=´/´>
<HTML>
<BODY>
<TABLE border="1">
<TR>
<TD><B>Last Name</B></TD>
<TD><B>First Name</B></TD>
<TD><B>City</B></TD>
</TR>
<xsl:for-each select=´workercity/Employees´>
<TR >
<TD>
<xsl:value-of select=´LastName´/>
</TD>
<TD>
<xsl:value-of select=´FirstName´/>
</TD>
<TD>
<xsl:value-of select=´City´/>
</TD>
</TR>
</xsl:for-each>
</TABLE>
</BODY>
</HTML>
</xsl:template>
</xsl:stylesheet>

http://localhost/northwinddata/workers/workercityClient.xml?contenttype=text/html

Podsumowanie

Jak mogłeś zauważyć drogi czytelniku zagadnienie nie jest to skomplikowane i jest pewną alternatywą dla ASP. Pozostało jeszcze omówienie kwestii wstawiania danych do bazy ale to już jest temat na kolejny artykuł. W załączniku znajdują się przedstawione powyżej przykłady.

Załączniki:

Komentarze 1

ocekerax97834
ocekerax97834
0 pkt.
Nowicjusz
21-01-2010
oceń pozytywnie 0
Artykul jest malo przejrzysty; niektore fragmenty to "kliknij tu, kliknij tam"; fragment o kontroli bezpieczenstwa jest mocno belkotliwy, a to przeciez niezwykle wazny aspekt; albo zakladasz, ze czytelnik zna SQL, albo wyjasniasz, co znaczy "DISTINCT"; sam tekst niewieli wnosi wiecej od tego, co oferuje klawisz F1, a to podstawowy czynnik decydujacy o atrakcyjnosci artykulu. Bledy interpunkcyjne i literowki.
pkt.

Zaloguj się lub Zarejestruj się aby wykonać tę czynność.