(Возврат на основную страницу)

 

Содержание номера за Февраль 2008 год

 

SQL Server

Февраль 2008
№ 2 (86)

 

Editorial

Майкл Оти

SQL Server как платформа обработки данных, наконец-то 

 

DB Design & Warehousing

Крэг С. Маллинс

Руководство по свойствам Журнала Транзакций

 

Programming

Эрланд Зоммарског

Предоставление разрешений  посредством хранимых  процедур

 

Гектор Корреа

Создание Wiki Веб-сайтов  с помощью ASP.NET  и SQL Server

 

Other

Динеш Асанка

DDL Триггеры в версии SQL Server 2005

 

SQL Server как платформа обработки данных, наконец-то

Майкл Оти (Michael Otey)

В августе 2007 я написал статью «Слишком рано для SQL Server 2008?», в которой  утверждал, что многие организации, использующие SQL Server в качестве СУБД, не будут готовы к миграции на SQL Server 2008. Я по­прежнему считаю, что график выпуска SQL Server  не дает заказчикам времени на адаптацию к изменениям, но должен признать, что не нашел в готовящейся версии ничего отрицательного. Более того, новая версия — это та цель, на которую нас нацеливали sql server 7.0/2000/2005.

На конференции Professional Association for SQL Server (PASS) мне удалось поговорить с Франсуа Айенстатом (Francois Ajenstat), директором группы разработки SQL Server в Microsoft. Речь шла о SQL Server 2008. Франсуа пояснил, что Microsoft рассматривает SQL Server 2008 как нечто большее, чем просто реляционная СУБД. Корпорация рассматривает сервер в качестве корпоративной платформы обработки данных. Несмотря на то, что реляционный процессор данных — по­прежнему является сердцем SQL Server 2008, широта возможностей, предоставляемых SQL Server 2008 распространяется далеко за рамки простого реляционного хранилища. Продолжая движение в направлении, указанном при создании SQL Server 7.0, SQL Server 2008 предлагает полноценную, законченную платформу обработки данных.

В SQL Server 7.0 впервые появились службы аналитической обработки данных (OLAP Services) и средства интеллектуального бизнеса (business intelligence (BI)). Это обозначило начало трансформации SQL Server из обычной реляционной СУБД, в платформу работы с данными. В версии SQL Server 2000 были добавлены средства расширенного масштабирования и глубинного анализа данных (data­mining). В SQL Server 2005 была добавлена возможность создания серверов отчетов средствами SQL Server Reporting Services (SSRS).

Все это подготовило основание, на котором крепится набор возможностей SQL Server 2008, который наконец делает реальностью платформу обработки данных. Четыре основные направления, на развитие которых устремлены усилия Microsoft, это — платформа для критичных приложений (mission­critical platform), динамическая разработка (dynamic development), обработка неструктурированных данных (beyond relational data) и аналитические средства поддержки бизнеса (pervasive business insight). В качестве платформы критичных приложений SQL Server 2008 предлагает встроенное шифрование данных и основанное на политиках управление через декларативную среду управления (Declarative Management Framework (DMF)). В области динамической разработки появилась поддержка языка, интегрированного с запросами (Language­Integrated Query (LINQ)), реализованного в форме расширений .NET Framework. Новые типы данных (date, file stream и географические данные) расширяют возможности SQL Server по хранению неструктурированной информации. А расширения в подготовке отчетов и интеграция с Microsoft Office предлагают конечным пользователям более удобный способ взглянуть на информацию о состоянии бизнеса.

Тот факт, что SQL Server 2008 стал платформой, выделяет его из толпы конкурентов и дает дополнительные доказательства в пользу того, что новая версия — лидер во внедрении инноваций на высоко конкурентном рынке систем управления базами данных. Кроме того, в отличие от конкурентов, Microsoft по­прежнему не намерена взимать дополнительную плату за компоненты, обеспечивающие средства интеллектуального бизнеса.

Получается, что SQL Server 2008 служит и как средство поддержки бизнеса, и как средство поддержки инфраструктуры. На базе SQL Server  строятся не только бизнес­приложения и веб­сайты, но и все возрастающее число «коробочных» продуктов как в самой Microsoft, так и у третьих фирм, строится вокруг хранилища, предоставляемого SQL Server. На мой взгляд, единственной проблемой, которая может возникнуть, будет миграция на новую версию и неиспользование ее новых возможностей (последнее, конечно, когда вы будете готовы мигрировать).

Руководство по свойствам Журнала Транзакций

Крэг С. Маллинс (Craig S. Mullins)

У каждой базы в SQL Server есть как минимум два связанных с ней файла: один файл данных, который содержит собственно информацию и файл журналов транзакций. Журнал транзакций является фундаментальным компонентом системы управления базой данных. Все изменения данных в приложении последовательно записываются в базе данных в журнал транзакций. Используя эту информацию, DBMS может отследить, какая транзакция вызвала какое изменение данных в SQL Server.

Основы ведения журналов

Выражение CREATE DATABASE используется для создания базы данных в Microsoft SQL Server. Блок LOG ON используется для идентификации созданного файла журнала транзакций для базы данных. После создания данные сохраняются в файле базы данных, а записи об изменении этих данных сохраняются в файле журнала транзакций.

При внесении изменений в базу данных, журнал транзакций базы данных будет расти. Так как большинство изменений базы данных заносятся в журнал, Вам придется все время следить за размером файлов журнала транзакций, потому что, если данные постоянно меняются, журнал будет постоянно расти.

В каждой контрольной точке Microsoft SQL Server гарантирует, что все записи журнала и измененные страницы базы данных благополучно сохранены на диске. Файлы журнала транзакций используемые Microsoft SQL Server при операциях восстановления для подтверждения завершенных транзакций и отката незавершенных транзакций. Информация, сохраненная в журнал транзакций, содержит:

•    время начала каждой транзакции

•    актические изменения данных и информация достаточная для отмены изменений сделанных во время каждой транзакции (обеспечивает использование образа данных до и после изменения)

•    выделение и освобождении страниц базы данных

•    фактическое подтверждение или откат каждой транзакции.

Используя эти данные, Microsoft SQL Server обеспечивает целостность операций над данными для сохранения верных данных в базе. Журнал транзакций используется при перезагрузке SQL Server, при откате транзакций, и для восстановления базы данных в состояние предшествующее транзакции.

При перезагрузке SQL Server, каждая база проходит через процесс восстановления. SQL Server определяет, какие транзакции необходимо откатить вперед в первую очередь. Это относится к транзакциям, о которых неизвестно были ли все внесенные изменения сохранены в кэш или на диск. Так как операция Checkpoint принудительно сохраняет все измененные страницы на диск, она является отправной точкой при восстановлении для отката транзакций. Так как все страницы, измененные до последней операции Checkpoint гарантированно сохранены на диске, нет необходимости откатывать назад что­то сделанное до нее.

При откате транзакции SQL Server копирует в базу данных исходные образы для всех изменений сделанных после оператора BEGIN TRANSACTION.

По сценарию восстановления Вы можете использовать журнал транзакций для восстановления базы данных. При этом будет выполнен откат вперед по журналу транзакций. При откате вперед SQL Server скопирует измененные образы каждого изменения внесенного в базу данных. Используя данные из журнала, SQL Server гарантирует, что все изменения будут сделаны в том же порядке, в котором он происходили первоначально.

Как видите, журнал транзакций очень полезно иметь под рукой на случай ошибок в базе данных, ошибок транзакций и для обеспечения целостности данных.

Предоставление разрешений посредством хранимых процедур

Цепочка владения, сертификаты и проблематика предложения EXECUTE AS

Эрланд Зоммарског (Erland Sommarskog)

DOWNLOAD

Когда вы проектируете приложение для SQL Server, желание предоставить пользователям все права доступа к таблицам базы данных возникает редко. Многие приложения разрабатываются таким образом, чтобы доступ к базе данных осуществлялся исключительно через хранимые процедуры, и с помощью таких процедур пользователи могут обращаться к данным и обновлять их. Процедуры проверяют соблюдение бизнес-правил, чтобы обеспечить защиту целостности базы данных.

В этой статье я рассмотрю пять различных способов, позволяющих реализовать сказанное:

•    Цепочку владения.

•    Подписание процедур с помощью сертификатов.

•    Заимствование прав с помощью предложения EXECUTE AS.

•    Роли приложения.

•    «Приложения­посредники».

В указанном списке второй и третий пункты — это новинки версии SQL 2005, и в данной статье внимание уделяется в основном этим двум методам. О! Прежде чем продолжить, я должен сказать о том, что в статье речь идет исключительно о версии SQL 2005, и решения для версии SQL 2000 в ней не рассматриваются.

Обзор

Классическим методом выдачи разрешений с помощью хранимых процедур является цепочка владения (ownership chaining). Этот метод все еще сохраняет свое главенство при организации стандартного доступа к таблицам, но вам не удастся с его помощью предоставить все возможные права доступа. Два случая невозможности применения данного метода, которые мы будем рассматривать в этой статье, — это динамические SQL­запросы и перезагрузка данных в таблицу с помощью операции BULK INSERT. Вследствие его важности, цепочка владения — это тот механизм, который я рассмотрю в данной статье первым. Однако, перед этим я расскажу о разделении владельца/схемы — изменении, представленном в версии SQL 2005, которое, возможно, поразит воображение «старых» пользователей SQL Server и которое влияет в ряде случаев на цепочку владения.

Версия SQL 2005 предлагает два новых метода, позволяющих обеспечить пользовательский доступ посредством хранимых процедур: вы можете подписать процедуры с помощью сертификатов или прибегнуть к заимствованию прав (impersonation) с помощью предложения EXECUTE AS. Оба эти метода позволяют инкапсулировать в хранимой процедуре любое разрешение. Сертификаты сложнее в применении, тогда как простота использования предложения EXECUTE AS может оказаться обманчивой. То есть, использование предложения EXECUTE AS сопровождается некоторыми побочными эффектами, возможно, неприятным. Если вы являетесь разработчиком, то в этом тексте я пытаюсь заставить вас осознать, какой вред могло бы нанести неоправданное использование предложения EXECUTE AS. А если вы — DBA­администратор, тогда эта статья предупреждает вас о том, что изобретательные разработчики способны сотворить с вашей базой данных с помощью предложения EXECUTE AS.

Хотя первые три из перечисленных методов можно применять к отдельным процедурам, роли приложений и «приложения­посредники» — это решения, которые, как правило, используются в масштабе приложения. Я довольно краток, говоря об этих методах, а «приложения­посредники» — это нечто такое, о чем я упоминаю большей частью мимоходом, рассматривая предложение EXECUTE AS. (В этой статье выражение «приложения­посредники» я беру в кавычки, поскольку сам его выдумал, и оно, возможно, не относится к устоявшейся терминологии.)

Замечания по поводу примеров сценариев

В данной статье рассматриваются несколько примеров сценариев, демонстрирующих различные методы. Прежде чем вы ринетесь выполнять эти сценарии, мне хотелось бы обратить ваше внимание на ряд вещей.

Все предлагаемые сценарии предполагают, что вы выполнили вход в систему с правами sysadmin, и я настоятельно рекомендую выполнять их на компьютере, предназначенном для разработки. Некоторые сценарии предполагают, что в вашей системе разрешено выполнение хранимой процедуры xp_cmdshell, которая по умолчанию отключена. Разрешите использование этой процедуры с помощью хранимой процедуры sp_configure или, воспользовавшись инструментальным средством Surface Area Configuration, если такое разрешение не противоречит вашей локальной политике безопасности. (Хранимая процедура xp_cmdshell используется главным образом удобства ради и для демонстрации основных компонентов приводимых примеров не нужна. Эти действия вы могли бы выполнить вручную.)

Более того, во всех сценариях создается как минимум одна база данных и минимум одно регистрационное имя (login). В некоторых сценариях создаются также файлы в файловой системе. Если выполнение этих сценариев не прерывается, все созданные объекты в конце работы удаляются; регистрационные имена, базы данных и файлы, в равной степени. (Поэтому вначале убедитесь, что у вас нет никаких баз данных, чьи имена совпадают с именами, используемыми в сценарии!)

Причина, по которой в сценариях создаются базы данных, — простота. Такой подход позволяет мне создать в базе данных объекты, пользователей и т. д., и выполнить полную чистку путем удаления базы данных. Регистрационные имена создаются, поскольку трудно демонстрировать возможности, обеспечивающие выдачу разрешений, если выполнять сценарии с учетной записью sysadmin.

Чтобы вместить все в один сценарий, я интенсивно использую новые предложения EXECUTE AS и REVERT, хотя подробно буду говорить о них только во второй половине этой статьи. До тех пор рассматривайте их просто как альтернативу, позволяющую открыть второе окно запросов и работать в нем как тестовый пользователь. Если это вас устраивает больше, можете остановить сценарий на предложении EXECUTE AS, выполнить процедуру входа (log) во втором окне запросов, чтобы выполнить фрагмент до предложения REVERT.

В некоторых сценариях, представленных в первой части этой статьи, используются предложения, которые я рассматриваю в ней позже. Так что, если видите что­то для вас незнакомое, не прерывайте чтения.

Если сценарии выполняются на сервере, который работает под управлением ОС Windows 2003, вы можете получить сообщения об ошибках: некоторые пароли не соответствуют локальной политике паролей. С наибольшей вероятностью это может случиться с паролями для сертификатов. Просто модифицируйте такие пароли надлежащим образом.

Философия безопасности

Прежде, чем перейти к основной части статьи, мне хотелось бы сделать краткое отступление и поговорить о безопасности вообще.

При программировании система безопасности часто конфликтует с другими интересами. У вас есть пользователи, требующие решения, и они хотят получить его немедленно. На этой стадии безопасность их совершенно не волнует, они просто хотят, чтобы их предприятие работало. Но если вы даете им решение, которое имеет брешь, и впоследствии эта брешь будет использована, повесят именно вас. Поэтому как программист вы всегда должны помнить о безопасности и убедиться в том, что со своей стороны сделали все как надо.

Распространенная ошибка в связи с безопасностью — думать, что «у нас есть сетевой брандмауэр /шифрование/что­то еще, следовательно, мы защищены». Я предпочитаю воспринимать систему безопасности как нечто, состоящее из нескольких линий защиты (defence lines). Каждый, кто работал с компьютерными системами, знает, что в них вносится масса изменений, как в конфигурацию, так и в программный код. Ваш исходный проект может быть продуманным и защищенным, но по мере развития системы, неожиданно может обнаружиться брешь в защите и серьезная уязвимость в системе.

При наличии нескольких линий защиты вы сможете снизить риск такой случайности. Если брешь окажется открытой, вы можете смягчить последствия тех действий, которые позволяет выполнить эта «дыра». Неотъемлемая часть такой стратегии — никогда не давать разрешений больше, чем это совершенно необходимо. Именно к тому, что это означает в данном контексте, я и должен обратиться.

Создание Wiki Веб-сайтов с помощью ASP.NET и SQL Server

Вы можете легко создать Wiki Веб-сайт используя ASP.NET и SQL Server и предоставить вашей команде одно из самых мощных средств совместной работы в Веб.

Гектор Корреа (Hector J. Correa)

DOWNLOAD

В данной статье описываются некоторые преимущества Wiki Веб-сайтов и возможность использования ASP.NET и SQL Server для создания вашего собственного Wiki. вы узнаете, как пишутся мощные синтаксические анализаторы с использованием класса регулярных выражений.NET, вы откроете для себя добавление функции сложного поиска для вашего веб-сайта, используя SQL Server сервис полнотекстового поиска.

Представьте себе, что вы зашли на Веб­сайт, который предлагает информацию о .NET. вы начинаете читать одну из страниц посвященных классу String, и тут понимаете, что синтаксис одного из методов неверен. вы щелкаете на кнопку Редактировать, обновляете синтаксис метода, обновляете пример, который описывает использование этого метода и сохраняете ваши изменения, чтобы другим читатели могли извлечь из них пользу. вы только что воспользовались Веб­сайтом Wiki.

Wiki позволяет пользователям редактировать содержимое текущей Веб­страницы. Wiki также предоставляет пользователям возможность добавления новых Веб­страниц. Чтобы отредактировать тему, пользователь просто нажимает на кнопку Редактировать. Любой текст введенный в «верблюжьем стиле» (два или более слова, написанные вместе, как например CamelCase или DevCon) автоматически становятся ссылками на новую тему. После этого пользователь может перейти по данной ссылке и отредактировать содержание новой темы.

Вард Каннингем (Ward Cunningham) автор первого Wiki, определяет Wiki как «самую простую онлайновую базу данных, которая может работать».

Как вы поняли из данной статьи, Wiki это простые онлайновые базы данных, к которым пользователь может получить доступ через Веб­сайт. Несмотря на их простоту, они являются замечательным средством для людей работающих вместе и создающих хранилища данных.

Поддержкой большинства существующих Веб­сайтов занимаются администраторы и разработчики. Легко заметить каким разным может быть веб­сайт поддерживаемый разными пользователями, как это влияет на сообщество пользователей и качество информации.

На Wiki веб­сайте, владельцы информации могут обновлять свою информацию. Это увеличивает вероятность того, информация всегда будет своевременной, и позволяет пользователям улучшать содержание сайта.

Сотрудничество с веб-сайтами Wiki

Wiki это средство для совместной работы. Если у вас есть проект, в котором хотят принять участие несколько человек, возможно вам захочется использовать для работы Wiki.

Например, вы можете использовать Wiki веб­сайт для хранения информации о ходе разработки программного обеспечения. Пользователи могут использовать Wiki для добавления новых требований к проекту ввиду появившихся новых потребностей, разработчики могут размещать здесь в процессе разработки системы документацию по оформлению, тестеры могут сохранять результаты тестов, управляющие могут размещать график работ, члены команды обмениваться информацией, например, информацией о клиентах, провайдерах и продавцах, имеющих отношение к проекту.

Вы также можете воспользоваться Wiki в качестве Менеджера Личной Информации. вы можете использовать Wiki для хранения информации о ваших любимых книгах, фотографий из последнего путешествия по руинам Майя, и другой информации, которой вы хотите поделиться с другими людьми.

На Wiki веб­сайте, владельцы информации могут обновлять свою информацию. Это увеличивает вероятность того,что информация всегда будет своевременной, и позволяет пользователям улучшать содержание сайта.

Преимущества

Wiki веб­сайты способствуют совместной работе. Если вы еще ни разу не посещали Wiki веб­сайт, вы будете поражены количеством информации, которую могут собрать люди, совместно работая над проектом. В отличие от блогов (веб журналы), в которых информация предоставляется в одностороннем порядке (от автора читателям), Wikis же обеспечивает настоящий двусторонний канал для общения, в котором каждый является и автором и читателем.

Wikis также работает и с существующими технологиями. Любой пользователь использующий браузер и подключение к Internet может посетить Wiki веб сайт и внести свой вклад. Для этого не потребуется специальный текстовый редактор или установка какого­либо другого программного обеспечения для использования Wiki.

Недостатки

Несмотря на всю свою привлекательность, у Wiki есть несколько недостатков, которые вы должны учесть, прежде чем решите использовать Wiki веб­сайт в своей компании.

Вы можете конфигурировать свои Wiki веб­сайты как общедоступные, в этот случае любой пользователь сможет получать к ним доступ, или же вы можете создавать частные Wiki веб­сайты и разрешать к ним доступ только сотрудникам вашей организации. Независимо от того, какой вид доступа вы выберите, сам факт того, что пользователь имеет возможность редактирования темы, подвергает риску вашу безопасность. Пользователь может нечаянно удалить текст или изменить смысл предложения. Однако, у большинства реализаций Wiki есть механизмы для восстановления тем, которые были ( сознательно или нет) изменены.

Другой очевидный недостаток Wiki веб­сайтов это отсутствие WYSIWYG (What­You­See­Is­What­You­Get «что видишь, то и получаешь») редактора. В большинстве реализаций Wiki для редактирования пользователями тем используются устаревшие текстовые редакторы (элементы управления HTML для ввода). Если вы хотите изменить шрифт, например на жирный, вам придется ввести несколько подобий тэгов. И в сравнении с таким доступным сейчас текстовым процессором как Word, текстовый редактор явно проигрывает.

Популярные Wiki веб-сайты

Несмотря на недостатки, Wiki является ценным ин­струментом. Вы можете посетить огромное коли­чество общественных Wiki веб сайтов, чтобы увидеть концепцию в действии. Среди сайтов которые вам, возможно, захочется посмотреть будут и следующие два хорошо известных Wiki:

Portland Pattern Repository(хранилище примеров Портланда) На сайте размещено более 26000 тем, охватывающих огромное сферу интересов, большинство из которых связано с разработкой программного обеспечения. Также этот сайт является хорошей возможностью узнать больше о Wiki веб­сайтах в целом (http://c2.com/cgi/wiki).

При использовании ВерблюжьегоСтиля слова пишутся следующим образом: первая буква заглавная, за ней несколько прописных, далее снова заглавная буква, за которой следуют прписные.

Wikipedia (www.wikipedia.org/)- Это онлайновая энциклопедия использующая Wiki концепцию. В ее составе более 200 000 статей на русском и более 2000000 статей на английском языке.

.Wiki Проект

Вы можете выбирать из нескольких вариантов реализации (Wiki клоны), которые дают пользователям возможность заводить Wiki веб сайты. В следующем разделе я рассмотрю создание Wiki с нуля. Проект будет называться DotWiki и будет реализован с использованием ASP.NET, VB.NET, и SQL Server/MSDE.

.

DDL-Триггеры в версии SQL Server 2005

Динеш Асанка (Dinesh Asanka)

В 2002 году Конгресс США принял закон Сарбейнса-Оксли (Sarbanes-Oxley Act), согласно которому компании обязаны иметь надежные процедуры управления изменениями для ИТ-систем. Одно из требований этого закона — знать: кто, что и когда делал с объектами базы данных. В версии SQL Server 2000 имеются способы, позволяющие удовлетворить это требование: аудит уровня безопасности C2 (C2 level auditing) или внедрение инструментальных средств независимых производителей. Тем не менее, в версии SQL Server 2005 для соблюдения закона Сарбейнса-Оксли представлена новая функциональная возможность, которая называется DDL-триггеры. Триггеры — это не новость для сервера SQL Server. Но до появления версии SQL Server 2005 триггеры являлись триггерами языка DML и срабатывали только тогда, когда выполнялись операции INSERT,UPDATE или DELETE. Создание новой таблицы, базы данных или нового пользователя сопровождается наступлением событий языка DDL, и для мониторинга таких событий в версии SQL Server 2005 были представлены DDL-триггеры.

 

 

(Возврат на основную страницу)

Hosted by uCoz