 TechNet Magazine April 2008

TechNet Magazine April 2008

SQL Server 2008: Новые возможности

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

Randy Dyess SQL Server 2008: Безопасность

Система безопасности в SQL Server постоянно совершенствуется. В данной статье рассмотрены некоторые изменения, появившиеся в системе безопасности SQL Server 2008, — коснувшиеся, в частности, шифрования и проверки подлинности, — а также функции управления на основе политик и система аудита, призванная помочь соблюсти все требования и нормы.

Rick Byham SQL Server 2008: Новые типы данных

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

Kelly Wilson SQL Server 2008: Производительность запросов к хранилищу данных

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

S. Agarwal, T. Grabs, and J. Hammer SQL Server: Минимизация блокирования в SQL Server

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

Cherié Warren Microsoft Office: Интеграция баз данных Access и SharePoint

Множество предприятий до сих пор полагаются на Microsoft Access. К счастью, Microsoft Office SharePoint Server 2007 позволяет интегрировать устаревшие данные Access. Узнайте, как можно использовать эти возможности для создания новых решений для вашей организации.

Peter Serzo Письмо редактора: Старым и новым друзьям

Joshua Hoffman Письма в редакцию: Мнения читателей

Инструментарий: Новые продукты для специалистов по информационным технологиям

Greg Steen Вопросы и ответы по SQL: Увеличение баз данных, использование интерфейсов IFilter и удаленное соединение с сервером

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

Edited by Matthew Graven Обзор служебных программ: Средство анализа возможностей инфраструктуры веб-узла

Журналы веб-узла и анализ трафика позволяют предположить, как могут измениться объемы передаваемых данных с течением времени. Однако как оценить предельные возможности инфраструктуры? С помощью свободно распространяемого средства анализа возможностей инфраструктуры веб-узла можно проверить, как будут работать системы веб-узла под нагрузкой.

Greg Steen Кабельщик: Устранение неполадок принудительного применения NAP

Устранение неполадок в поведениях принудительного применения в рамках платформы защиты доступа к сети может оказаться сложной задачей. В статье «Кабельщик» обсуждается принцип выполнения оценки политики работоспособности NAP и способы устранения наиболее распространенных неполадок.

Joseph Davies Язык сценариев Windows PowerShell: А вот тут, пожалуйста, подпись...

Политика выполнения AllSigned предоставляет наиболее защищенную среду Windows PowerShell. Итак, как же подписываются сценарии Windows PowerShell? Дон Джонс демонстрирует этот процесс.

Don Jones Эй, автор сценариев!: Возвращение сценария базы данных

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

The Microsoft Scripting Guys На страже безопасности: Ну и где мои личные данные?

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

Frank Simorjay Документы о рабочей среде: Развертывание Windows XP с WAIK

Пакет автоматической установки Windows (WAIK) был разработан, в первую очередь, для Windows Vista и Windows Server 2008. Но он же, между прочим, может помочь с развертыванием Windows XP и Windows Server 2003. Здесь вы узнаете все, чтобы начать его использовать.

Wes Miller Полевые заметки: MAR – полезная инциатива

Узнайте, как новая программа Microsoft Authorized Refurbisher (авторизованный восстановитель от Майкрософт) (MAR) может помочь фирмам бороться с проблемами лицензирования программного обеспечения при восстановлении старых ПК.

Neil Fawcett О Windows из первых рук: Общие и сходные с ними ресурсы

«Вы уверены, что хотите удалить этот совместно использующийся файл?» — Raymond Chen объясняет, почему деинсталлятор может задать такой вопрос в ходе удаления приложения.

Raymond Chen


 SQL Server 2008: Новые возможности
SQL Server 2008 Рэнди Дайэсс (Randy Dyess)

Новые возможности
Краткий обзор:
  • Большие возможности управления
  • Улучшенная производительность и масштабируемость
  • Улучшенная безопасность и доступность
  • Изменения для разработчиков

Корпорация Майкрософт снова выпустила новую версию сервера SQL Server, обещающую упростить жизнь администраторов баз данных. Последняя версия, SQL Server 2008, содержит множество новых
функций и возможностей, значительно улучшающих администрирование.
Администраторы баз данных, использующие SQL Server® 2005 как-либо долго, обнаружат множество функций, используемых в ежедневной работе, но вскоре они также обнаружат, что эти знакомые средства улучшены в SQL Server 2008. Новые возможности, основанные на существующих функциях, позволяют уменьшить количество обходных путей или настроек, которые ранее требовались для использования различных функций в сложных средах баз данных.
Новые функции SQL Server 2008 включают большой диапазон ролей заданий базы данных, что усложняет их классификацию. При разделении функций по различным разделам я понял, что у некоторых читателей возникнет вопрос, почему я отнес функцию X к категории Y, когда она явно относится к категории Z. Это вопрос перспективы, на которую влияет, как именно ваша компания ведет дела.
Я понимаю, что специалисты по базам данных часто выполняют различные роли заданий, но я попытаюсь систематизировать новые функции по следующим общим категориям: управление, масштабируемость, производительность, высокая доступность, безопасность, разработка и бизнес-аналитика.

Новое для управления.
Для администраторов баз данных (таких, как я) дополнительные функции управления делают сервер SQL Server 2008 новым отличным продуктом. Новое управление политиками, возможность нескольких запросов сервера, серверы конфигурации и сборщик данных/ хранилище управления предоставляют новые мощные возможности для администраторов баз данных, которые часто ответственны за управление большими и сложными средами баз данных с сотнями или тысячами баз данных на десятках или даже сотнях серверов.
Функция управления политиками SQL Server 2008, которая называлась функцией динамического управления (DMF – Declarative Management Framework) в CTP-версиях, позволяет создавать и выполнять политики конфигурации для одного или нескольких серверов баз данных. Эти политики обеспечивают применение параметров стандартной конфигурации на всех целевых серверах и базах данных. Пример этой функции показан на рис. 1.
Figure 1 Политика рекомендаций по размещению файлов данных и журналов
Figure 1 Политика рекомендаций по размещению файлов данных и журналов
Политики создаются на основе предопределенного набора аспектов. Каждый аспект содержит подгруппу параметров конфигурации SQL Server 2008 и других событий, которыми можно управлять. Данным аспектам сопоставляются условия для создания политики. Условия – это значения, разрешенные для свойств аспекта, параметров конфигурации или других событий, содержащихся в данном аспекте.
Условиями также являются значения, используемые для фильтров политики. Предположим, политику необходимо применить только для определенной базы данных. В этом случае можно создать условие, содержащее имя базы данных, а затем добавить это условие к политике. После этого политика будет применяться только к данной базе данных. Поверьте мне, управление политиками SQL Server 2008 может показаться сложным, но если вы попробуете его использовать, то убедитесь, что это интуитивно понятный процесс.
Новые возможности взаимодействия нескольких серверов и серверы конфигурации удобны при необходимости одновременного выполнения запросов к нескольким серверам. Можно зарегистрировать серверы в среде Management Studio, а затем объединить их с помощью группирования. При необходимости выполнения политики или запроса для всех серверов в группировании ее следует просто щелкнуть правой кнопкой мыши и выполнить требуемые действия.
Дополнительным преимуществом является возможность настройки этой функции для возврата одного набора результатов для сервера или объединения наборов результатов в один большой набор. Также можно указать, будут ли имена сервера и баз данных являться частью результатов, чтобы отделить результаты для отдельных серверов. Возможность сохранения зарегистрированных серверов на сервере конфигурации, а не в отдельных Management Studio является большим преимуществом.
Другой новой привлекательной функцией управление является сборщик данных. Администраторам баз данных часто необходим сбор данных управления от большого числа серверов, и многие администраторы создали собственные решения для выполнения этого процесса. Сборщик данных – это встроенный механизм, упрощающий задачу сбора данных, относящихся к управлению. Он позволяет использовать агент SQL Server и службы SQL Server Integration Services (SSIS) для создания платформы для сбора и сохранения данных, предоставляя возможности обработки ошибок, аудита и ведения журнала сбора данных.
В отличие от средств сторонних разработчиков и пользовательских заданий сборщик данных будет достаточно понятен большинству администраторов баз данных, поскольку он использует агент SQL Server Agent и службы SSIS для создания набора заданий и пакетов для обработки подключений, сбора и хранения данных (как показано на рис. 2). После сохранения данных в централизованном хранилище, которое называется хранилищем управления, они могут просматриваться и систематизироваться с помощью набора инструкций T-SQL и отчетов служб SQL Server 2008 Reporting Services. Это централизованное хранилище данных значительно упрощает анализ и просмотр общих показателей управления среды базы данных.
Figure 2 Файл журнала использования дискового пространства сборщика данных
Figure 2 Файл журнала использования дискового пространства сборщика данных

Новое для масштабируемости.
По многолетним наблюдениям администраторов баз данных SQL Server размер их сред баз данных постоянно увеличивается. С увеличением размера среды базы данных требуются новые способы и средства для обеспечения масштабируемости, необходимой для большинства предприятий. В SQL Server 2008 появилось несколько новых функций, которые могут в этом помочь.
SQL Server 2008 имеет встроенную функцию сжатия, позволяющую сжимать файлы базы данных и журналов транзакций, связанные с соответствующей базой данных. В SQL Server 2005 появилась возможность сжатия данных файлов или файловых групп, доступных только для чтения, но эта форма сжатия просто использует возможность сжатия файловой системы Windows® NTFS. В SQL Server 2008 появилось сжатие на уровне строк и страниц, которое предоставляет преимущества, недоступные при сжатии на уровне файлов данных.
Сжатие на уровне строк и страниц уменьшает необходимое пространство данных, а также необходимый объект памяти, поскольку данные в памяти остаются сжатыми. Сжатые данные в памяти позволяют увеличить использование памяти, что выгодно для масштабируемости множества систем.
В SQL Server 2008 также появилось сжатие на уровне резервной копии. Хотя при резервном копировании базы данных создается только резервная копия активной части базы данных, это обеспечивает высвобождение сотен гигабайт или даже десятков терабайт свободного пространства. В средах баз данных с несколькими копиями файла резервной копии объемом несколько терабайт эти резервные копии часто занимают ценное дисковое пространство, которое могло использоваться более эффективно. Предоставляя администраторам баз данных возможность сжатия файлов резервных копий SQL Server 2008 освобождает часть этого пространства, чтобы оно могло использоваться для реальных данных.
Также появился регулятор ресурсов. Эта новая функция позволяет определять объем ресурсов, который может использоваться отдельными рабочими нагрузками или группами рабочих нагрузок во время выполнения. Регулятор ресурсов позволяет создавать среду, в которой на одном сервере сосуществует множество различных рабочих нагрузок без опасности того, что одна или несколько этих нагрузок вызовут перегрузку сервера или снижение производительности других рабочих нагрузок.
Преимущество этой функции заключается в том, что она обеспечивает возможность более эффективного использования общего объема ресурсов, доступных на серверах баз данных. На рис. 3 показан пример использования регулятора ресурсов для ограничения операций на сервере.
Figure 3 Limit activity with the Resource Governor (Close Figure 3)
USE master
go

--Drop function
IF OBJECT_ID('rgclassifier_demo','Function') IS NOT NULL
DROP FUNCTION rgclassifier_demo
go

--Create a classifier function for report group
CREATE FUNCTION rgclassifier_demo() RETURNS SYSNAME
WITH SCHEMABINDING
AS
BEGIN
    DECLARE @group_name AS SYSNAME
  IF (USER_NAME() LIKE '%Launch_Demo%')
         SET @group_name = 'demogroup'
    RETURN @group_name
END
GO

--Drop workload group for anything coming from Management Studio
IF EXISTS (SELECT name FROM sys.resource_governor_workload_groups
  WHERE name = 'demogroup')
BEGIN
  DROP WORKLOAD GROUP demogroup
END
GO

--Create workload group
CREATE WORKLOAD GROUP demogroup
GO

--Register the classifier function with
--Resource Governor
ALTER RESOURCE GOVERNOR WITH (CLASSIFIER_FUNCTION= dbo.rgclassifier_demo)
GO

--Alter the dbogroup workload group to only
--allow 10% of CPU for each workload request
ALTER WORKLOAD GROUP demogroup
WITH (REQUEST_MAX_CPU_TIME_SEC = 10)
GO

--Create a new resource pool and set a maximum CPU limit for all workloads.
IF EXISTS (SELECT name FROM sys.resource_governor_resource_pools
  WHERE name = 'pooldemo')
DROP RESOURCE POOL pooldemo
GO

CREATE RESOURCE POOL pooldemo
WITH (MAX_CPU_PERCENT = 40)
GO

--Configure the workload group so it uses the
--new resource pool.
ALTER WORKLOAD GROUP demogroup
USING pooldemo
GO

--Apply the changes to the Resource Governor
--in-memory configuration.
ALTER RESOURCE GOVERNOR RECONFIGURE
GO

Новое для производительности.
SQL Server 2008 увеличивает общую производительность баз данных. Благодаря нескольким новым функциям, представленным в SQL Server 2008, появилась возможность управления и наблюдения за производительностью баз данных и приложений, которые выполняются на них.
При наличии множества транзакций, выполняемых каждую секунду, блокировка, обычно происходящая во при выполнении этих транзакций, может иметь негативное воздействие на производительность приложений базы данных. SQL Server обеспечивает уменьшение общего число блокировок, сохраняемых процессом, благодаря укрупнению небольших блокировок уровня строк и страниц до больших блокировок уровня таблиц. Но важно понимать, что такое укрупнение блокировок может вызывать проблемы. Например, одна транзакция может блокировать всю таблицу и препятствовать работе других транзакций с ней.
SQL Server 2008 работает с механизмом секционирования таблиц (который появился в SQL Server 2005), позволяя ядру SQL Server укрупнять блокировки на уровне секции до уровня таблицы. Этот промежуточный уровень блокировки может значительно снизить эффект укрупнения блокировок в системах с обработкой сотен и тысяч транзакций в секунду.
SQL Server 2008 предлагает несколько новых улучшений обработчика запросов для взаимодействия запроса с секционированными таблицами. Теперь оптимизатор запросов может выполнять поиск запросов в секциях так же, как и в отдельных индексах, работая только с идентификатором секции, а не с механизмом секционирования на уровне таблиц.

Новое для высокой доступности.
С повышением сложности сред баз данных и ростом размеров баз данных возможность обеспечения доступности этих баз данных значительно усложняется. Знакомые механизмы, использовавшиеся ранее для достижения высокой доступности, сохранились в SQL Server 2008. Но некоторые из этих функций улучшены в SQL Server 2008, кроме того, добавлены новые функции.
Сервер SQL Server 2005 позволил множеству администраторов использовать зеркальное отображение базы данных для достижения высокой доступности. SQL Server 2008 предоставляет множество улучшений зеркального отображения базы данных. Например, ранее зеркальное отображение базы данных иногда приводило к появлению проблем производительности, относящихся к переносу данных журнала транзакций из основных баз данных в зеркальные. С учетом этого SQL Server 2008 теперь уменьшает объем информации, передаваемой по сети между журналами транзакций основной и зеркальной баз данных, с помощью сжатия информации до ее отправки в журнал транзакции зеркальной базы данных с целью усиления защиты.
Теперь имеется возможность восстановления поврежденных страниц данных на основном сервере. Если в основной базе данных имеются поврежденные страницы данных, обусловленные ошибками 823 и 824, основной сервер может запросить текущую копию этих страниц данных у зеркальных серверов. Этот запрос рабочих страниц данных – автоматизированный процесс, который скрыт это всех пользователей, обращающихся в это время к основным базам данных.
Другая новая функция, ЦП с поддержкой горячей замены, позволяет устанавливать на сервере базы данных дополнительные ЦП, не влияя на доступность баз данных, находящихся на этом сервере. Однако необходимо знать, что ЦП с поддержкой горячей замены имеет некоторые ограничения, поскольку полезна только для 64-разрядных выпусков Windows Server® 2008 Enterprise Edition и Datacenter Edition для систем с процессорами Itanium и для нее необходим выпуск Enterprise Edition сервера SQL Server 2008.

Новое для безопасности.
В SQL Server 2005 появилась безопасность данных в форме шифрования данных. В SQL Server 2008 шифрование значительно улучшено благодаря введению двух новых функций: расширенное управление ключами и прозрачное шифрование данных.
Расширенное управление ключами обеспечивает улучшенную структуру для безопасного сохранения ключей, используемых в инфраструктуре шифрования — не только в самой базе данных, но и вне ее в программных модулях сторонних разработчиков или с аппаратным модулем безопасности.
Прозрачное шифрование данных обеспечивает более высокую гибкость шифрования данных, позволяя шифрованию быть свойством базы данных, а не результатом функций в строке кода. В результате администраторам не требуется выполнять множество необходимых изменений структуры базы данных и кода приложений при выполнении шифрования на уровне данных. В коде на рис. 4 показан пример шифрования базы данных с прозрачным шифрованием данных.
Figure 4 Using Transparent Data Encryption (Close Figure 4)
USE master;
GO

--Create a master key
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'YouWillNeedToCreateAStrongPassword';
GO

--Create a certificate to use with TDE
CREATE CERTIFICATE TDECERT WITH SUBJECT = 'TDECert'
GO

--Change to the database to encrypt
USE AdventureWorks
GO

--Create your database master key
CREATE DATABASE ENCRYPTION KEY
WITH ALGORITHM = AES_128 --Use a strong algorithm
ENCRYPTION BY SERVER CERTIFICATE TDECERT
GO

--Alter the database to encrypt it with the
--master database key
ALTER DATABASE AdventureWorks
SET ENCRYPTION ON
GO

Новое для разработчиков.
Администраторы баз данных – не единственные, кому непосредственно выгодны изменения SQL Server 2008. Появился ряд новых функций, предназначенных для разработчиков баз данных. К ним относятся несколько новых улучшений T-SQL для новых компонентов, помогающих разработчикам в создании и использовании запросов баз данных.
Множество разработчиков баз данных занимается созданием запросов, необходимых для возврата данных, которые необходимы их приложениям. Вы, вероятно, знакомы со средством LINQ (Language Integrated Query), позволяющим разработчикам баз данных выполнять запросы к базам данных, используя язык программирования на основе Microsoft® .NET вместо обычных инструкций T-SQL. SQL Server 2008 улучшает LINQ, предоставляя нового поставщика LINQ to SQL, который позволяет разработчикам выполнять команды LINQ непосредственно для столбцов и таблиц SQL Server. Это уменьшает количество времени, необходимого для создания новых запросов данных.
При разработке для баз данных разработчики используют объекты более высокого уровня, сопоставляемые с отдельными столбцами и таблицами баз данных. Эти объекты, также называемые сущностями, представляют данные, необходимые приложениям баз данных, поэтому разработчику не требуется знать действительную структуру хранения данных и схему базы данных. Новая платформа ADO.NET Entity Framework позволяет разработчикам создавать запросы баз данных с помощью этих сущностей. Абстрагирование базовой структуры базы данных позволяет увеличить производительность разработчиков.
SQL Server 2008 включает множество различных улучшений T-SQL, позволяющих увеличить производительность разработчиков. В качестве примера можно привести новую инструкцию MERGE, которая позволяет разработчикам проверять существование данных до их вставки. Это проверка, осуществляемая до выполнения инструкции INSERT, обеспечивает возможность обновления данных. Больше не требуется создавать сложные соединения для обновления существующих и вставки новых данных в одной инструкции.
Кроме того, отделение данных даты и времени от смешанного типа данных даты-времени значительно упрощено. В SQL Server 2008 представлены два отдельных типа данных для обработки данных даты и времени. Различные типы данных приводят к улучшению производительности для множества запросов, для использования данных в запросе больше не требуется предварительное выполнение операции с данными.
При создании новых структур баз данных разработчики часто растягивают структуры для реализации приложений сопоставления. SQL Server 2008 помогает разрешить эту проблему с помощью новых пространственных типов данных. Два пространственных типа данных, GEOGRAPHY и GEOMETRY, позволяют разработчикам сохранять данные, относящиеся к размещению, непосредственно в базе данных без необходимости разбивки этих элементов данных в форматы, соответствующие стандартным типам данных. В коде на рис. 5 показан пример простой пространственной таблицы.
Figure 5 A simple spatial table (Close Figure 5)
IF OBJECT_ID ( 'Demo_SpatialTable', 'Table' ) IS NOT NULL
    DROP TABLE Demo_SpatialTable
GO

--Create table to hold spatial data
CREATE TABLE Demo_SpatialTable
    ( SpatialID int IDENTITY (1,1),
    SpatialInputCol geography,
    SpatialOutputCol AS SpatialInputCol.STAsText() )
GO

--Insert data into table
INSERT INTO Demo_SpatialTable (SpatialInputCol)
VALUES (geography::STGeomFromText('LINESTRING(47.656 -122.360, 47.656 -122.343)', 4326));

INSERT INTO Demo_SpatialTable (SpatialInputCol)
VALUES (geography::STGeomFromText('POLYGON((47.653 -122.358, 47.649 -122.348, 47.658 -122.348, 47.658 -122.358, 47.653 -122.358))', 4326));
GO

--View data to see that data has been converted and stored in col2
SELECT * FROM Demo_SpatialTable
Распространенной проблемой разработчиков баз данных в прошлом являлось сохранение и использование больших двоичных объектов, таких как документы и файлы мультимедиа. Обычно использовавшимся способом было сохранения файлов вне базы данных, а в базе данных сохранялся только указатель на внешний файл. Однако при использовании этого способа при перемещении файла также необходимо помнить об обновлении указателя.
В SQL Server 2008 эта проблема решается с помощью нового типа данных FILESTREAM. При использовании этого типа данных файлы могут сохраняться не в базе данных, но данные считаются частью базы данных для обеспечения согласованности транзакций. Это позволяет использовать общие файловые операции, сохраняя преимущества производительности и безопасности базы данных.

Как насчет бизнес-аналитики?
Увеличение использования SQL за последние несколько лет в значительной степени обусловлено внедрением стратегий бизнес-аналитики. Возможности бизнес-аналитики существовали в SQL Server и раньше, но в SQL Server 2008 включен ряд новых функций.
Например, при сохранении данных в хранилищах данных пространство часто тратится на значения NULL. Столбцы, в которых сохранены значения NULL, занимают пространство наибольшего допустимого размера данных, определенного в столбце. Это означает, что столбец с тысячами значений NULL может занимать много МБ пространства, в действительности не храня никаких данных.
В SQL Server 2008 появились разреженные столбцы, позволяющие сохранять значения NULL, не занимая физического пространства на диске. Поскольку разреженные столбцы не занимают фактического пространства, размер таблиц, содержащих разреженные столбцы, может превышать ограничение 1 024.
В SQL Server 2008 также появился новый механизм, отслеживание изменений в данных, для управления добавочными изменениями, которые должны быть загружены в хранилище данных. Выполняется отслеживание и размещение измененных данных в наборе таблиц изменений. Отслеживание обновленных, удаленных и вставленных данных в простой в использовании схеме хранения позволяет выполнять добавочную загрузку хранилищ данных из этих таблиц — в отличие от необходимости создания пользовательских инструкций INSERT, пытающихся определить изменения существующих строк данных, выполненные до загрузки хранилища данных.

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

Рэнди Дайэсс (Randy Dyess) – преподаватель компании Solid Quality Mentors. Он специализируется на системах OLTP SQL Server. Рэнди является автором книги TransactSQL Language Reference Guide, соавтором MCTS Self-Paced Training Kit: Microsoft SQL Server 2005 Implementation and Maintenance (Exam 70-431), а также написал множество статей для журналов и информационных бюллетеней. Рэнди также является директором программ группы пользователей North Texas SQL Server Users Group и обладает статусом SQL Server MVP. Посетите его блог blogs.solidq.com/EN/rdyess/default.aspx.
© 2007 Корпорация Майкрософт и компания CMP Media, LLC. Все права защищены; полное или частичное воспроизведение без разрешения запрещено.


 SQL Server 2008: Безопасность
SQL Server 2008 Рик Бихэм (Rick Byham)

Безопасность
Краткий обзор:
  • Усовершенствования в области шифрования.
  • Усовершенствования в области проверки подлинности.
  • Аудит системы безопасности.
  • Управление на основе политик.

В SQL Server 2008 появилось немало новых функций и возможностей, повышающих общий уровень безопасности баз данных. Среди них ключевые возможности шифрования и проверки подлинности, а также новая система аудита,
позволяющая составлять отчеты по действиям пользователей и обеспечивать соблюдение всех норм и требований.
В данной статье мы вкратце рассмотрим самые важные изменения, произошедшие в системе безопасности SQL Server® с выходом версии 2008. Первое, на что обращаешь внимание, — это отсутствие средства «Настройка контактной зоны», которое присутствовало в SQL Server 2005. Параметры протокола, которые раньше были доступны в этом средстве, теперь перенесены в диспетчер конфигураций. Включение и выключение функций теперь выполняется через новую среду управления на основе политик, реализованную в SQL Server 2008.

Усовершенствования в области шифрования
В системе шифрования были сделаны два серьезных изменения. Во-первых, ключи теперь могут храниться на внешних аппаратных модулях сторонних разработчиков. Во-вторых, данные, хранящиеся в SQL Server, можно шифровать с использованием метода, понятного для приложений, подключающихся к базе данных. Это означает, что администратор может зашифровать все содержимое базы данных, не меняя при этом код приложения.
Первое нововведение стало возможным благодаря функции расширенного управления ключами (EKM) — она имеется в SQL Server 2008 Enterprise, Developer и Evaluation. EKM зарегистрировать в SQL Server системы управления корпоративными ключами и аппаратные модули безопасности (HSM), разработанные сторонними компаниями. После регистрации устройства пользователь может хранить ключи на этом модуле.
Кроме того, производитель модуля может добавить дополнительные возможности шифрования (например, задать правила устаревания и замены ключей). В некоторых конфигурациях это позволяет закрыть доступ к данным тем администраторам, которые не являются членами группы администраторов системы. Криптографические инструкции T-SQL выполняют шифрование и расшифровку данных с применением ключей, хранящихся на внешнем EKM-устройстве.
Еще одна новая функция, прозрачное шифрование, позволяет шифровать файлы баз данных, не меняя код приложений. Шифрование и расшифровка входных и выходных данных и журналов происходит в режиме реального времени. При этом используется ключ шифрования баз данных (DEK), хранящийся в загрузочной записи базы данных: так его можно использовать при восстановлении. Ключ DEK защищен сертификатом, которых находится в основной базе данных сервера. Схема на рис. 1 демонстрирует архитектуру, обеспечивающую прозрачное шифрование данных.
Figure 1 Архитектура прозрачного шифрования данных
Figure 1 Архитектура прозрачного шифрования данных
Все описанное помогает защитить статические данные. Существуют различные способы повышения безопасности баз данных: шифрование, настройка брандмауэра на серверах баз данных. Но дело в том, что физический носитель, на котором хранятся базы данных (в том числе и ленты с резервными копиями) подвергаются опасностям еще и другого характера. Злоумышленник может украсть сам носитель, а это, возможно, позволит ему получить доступ к информации, имеющейся на нем.
Используя прозрачное шифрование, можно зашифровать конфиденциальные данные и защитить ключи при помощи сертификата. Тем самым будет обеспечено соблюдение многих законодательных требований и отраслевых рекомендаций по обеспечению безопасности данных.
Функции прозрачного шифрования данных позволяют применять алгоритмы AES и 3DES. Шифрование файла базы данных выполняется на уровне страницы, причем страница шифруется перед записью на диск, а потом расшифровывается во время считывания в память. Для шифрования резервных файлов тоже используется ключ шифрования базы данных.
Для расшифровки базы данных необходимо иметь доступ к сертификату или асимметричному ключу, использованному при шифровании. В противном случает базу данных восстановить не удастся. Ключи следует хранить, пока резервная копия не перестанет использоваться.

Усовершенствования в области проверки подлинности
Kerberos — это сетевой протокол, предоставляющий высоконадежное средство взаимной проверки подлинности между клиентом и сервером (или двумя участниками системы безопасности). Kerberos помогает снизить число уязвимостей в случае атак с приманкой и попыток перехвата «посредником». Этот протокол имеет отношение к проверке подлинности Windows® NTLM, но он надежнее и производительнее.
Чтобы использовать Kerberos для взаимной проверки подлинности, необходимо, чтобы экземпляр SPN, относящийся к SQL Server, был зарегистрирован в Active Directory®, а драйвер клиента при подключении должен предоставить зарегистрированный SPN. В SQL Server 2008 проверка подлинности Kerberos была распространена на все сетевые протоколы, включая TCP, именованные каналы, общую память и адаптеры VIA. По умолчанию драйвер клиента выводит нужный SPN из экземпляра SQL Server, к которому он подключается. SPN можно также указать явным образом в параметрах строки подключения: это повышает уровень безопасности и контроля, упрощает поиск и устранение неполадок.
Службы IIS перестали использоваться для доступа к веб-службам ASP.NET, диспетчеру отчетов и серверу отчетов. В SQL Server 2008 службы отчетов обрабатывают все запросы на проверку подлинности, проводя их через новую специальную подсистему, поддерживающую как проверку подлинности Windows, так и нестандартные варианты проверки.
Службы отчетов теперь размещают Microsoft® .NET Framework и технологии ASP.NET, встроенные в среду CLR SQL Server, кроме того, они используют возможности HTTP.SYS, предлагаемые в операционной системе. Сервер отчетов включает в себя прослушиватель HTTP, который принимает запросы, направленные на URL-адрес и порт, указанные во время настройки сервера. Резервированием и регистрацией URL теперь управляет непосредственно сервер отчетов (через HTTP.SYS).

Аудит системы безопасности
Подсистема аудита — это новая функция SQL Server, позволяющая проверять события ядра базы данных и настраивать параметры проверки. Для записи данных аудита используются расширенные события. В подсистеме имеются средства и процессы, которые необходимы для того, чтобы проводить, сохранять и просматривать конфигурации аудита для различных серверов и объектов баз данных.
Подсистема аудита SQL Server работает быстрее, чем функция трассировки, а среда SQL Server Management Studio упрощает создание и контроль журналов аудита. Теперь можно проводить более подробные проверки: отслеживать инструкции SELECT, INSERT, UPDATE, DELETE, REFERENCES и EXECUTE для отдельных пользователей. Более того, подсистема аудита польностью поддерживает инструкции T-SQL CREATE SERVER AUDIT и CREATE SERVER AUDIT SPECIFICATION, а также связанные с ними инструкции ALTER и DROP.
Для настройки аудита необходимо его создать и указать место записи событий. Аудит может храниться в журнале безопасности Windows, в журнале приложений Windows или в любом файле. Вы присваиваете аудиту имя и настраиваете его характеристики, в частности, путь к файлу аудита и его максимальный размер. Также можно настроить аудит так, чтобы в случае сбоя проверки работа SQL Server завершалась. Если события аудита нужно записывать в несколько журналов, создается несколько аудитов.
Следующий этап — создание спецификаций аудита. В спецификации аудита сервера собирается информация об экземпляре SQL Server; в нее включаются объекты, относящиеся к серверу: данные учетных записей, членство в серверных ролях. Там же имеется информация о базе данных, контролируемая в основной базе данных, например сведения о правах доступа к базе. При создании спецификации аудита вы указываете, в какой аудит будут поступать наблюдаемые события. Вы можете создать несколько аудитов сервера и несколько спецификаций аудита, но аудит может иметь только одну активную спецификацию в каждый конкретный момент времени.
Также можно создать спецификации аудита базы данных: они будут использоваться для отслеживания событий по отдельной базе данных. В аудит можно добавить несколько спецификаций аудита баз данных, но в каждом аудите сервера активной может быть только одна спецификация аудита баз данных.
События подсистемы аудита SQL Server, используемые в спецификациях аудита сервера, объединяются в коллекции связанных событий. Они предоставляются в виде групп действий аудита. Если такую группу добавить в спецификацию аудита, можно будет отслеживать события, включенные в группу. К примеру, существует группа действий аудита DBCC_GROUP, предоставляющая доступ к командам DBCC. Отдельно же команды DBCC включаться в аудит не могут.
Всего существует 35 групп действий аудита сервера, причем некоторые из них тесно связаны друг с другом. Например, группы SUCCESSFUL_LOGIN_GROUP, FAILED_LOGIN_GROUP и LOGOUT_GROUP. Также есть тип действий аудита AUDIT_ CHANGE_GROUP, который можно использовать для проверки самого процесса аудита.
В спецификациях аудита баз данных можно также указывать группы событий аудита, собранные в группы действий аудита на уровне баз данных. Кроме групп действий аудита, спецификации аудита баз данных могут включать в себя отдельные события аудита, позволяющие проверять инструкции, отвечающие за работу с данными. Эти события можно настроить таким образом, чтобы отслеживать всю базу данных или только определенные объекты. Действие SELECT, в частности, может использоваться для проверки запросов SELECT, обращенных как к отдельной таблице, так и ко всей схеме в целом. Кроме того, события такого рода можно настроить так, чтобы отслеживать действия по отдельным пользователям или ролям, например db_writers.
Скажем, действие SELECT можно использовать для проверки запросов SELECT, обращенных к отдельной таблице, источником которых является пользователь Mary, или роль FINANCE_DEPT, или роль базы данных Public. Нельзя не отметить, что все это предоставляет широчайшие возможности контроля и дает большой запас гибкости при настройке аудита.

Отчеты о зависимостях
В модуле составления отчетов о зависимостях появилось новое представление каталогов и новые системные функции. Если использовать sys.sql_expression_dependencies, sys.dm_sql_referencing_entities и sys.dm_sql_referenced_entities, можно создавать отчеты по зависимостям между серверами, зависимостям между базами данных и SQL-зависимостями в пределах базы данных как для привязанных к схеме объектов, так и для непривязанных.

Новые роли баз данных
В роли баз данных, включенные в базу данных msdb, был внесен ряд изменений. Роль db_dtsadmin была переименована в db_ssisadmin, db_dtsltduser — в db_ssisltduser, db_dtsoperator — в db_ssisoperator. Для поддержки обратной совместимости старые роли при обновлении серверов добавляются как члены новых ролей.
Кроме этого, были добавлены новые роли для поддержки новых функций SQL Server 2008. В частности, появились новые роли для групп серверов (ServerGroupAdministratorRole и ServerGroupReaderRole), управления на основе политик (PolicyAdministratorRole), сборщика данных (dc_admin, dc_operator, and dc_proxy). В базе данных хранилища данных управления также появились новые роли для сборщика данных (mdw_admin, mdw_writer, and mdw_reader).

Безопасность файловых потоков
В SQL Server появилась поддержка хранилища файловых потоков, которое позволяет приложениям SQL Server хранить неструктурированные данные, к примеру файлы и изображения, в файловой системе. Это означает, что клиентские приложения могут воспользоваться потоковыми API, причем согласованность транзакций между структурированными и соответствующими неструктурированными данными будет поддерживаться по-прежнему.
Данные файловых потоков должны храниться в файловых группах типа FILESTREAM — это специальные файловые группы, содержащие не сами файлы, а системные каталоги. Эти каталоги, так называемые контейнеры данных, формируют интерфейс между хранилищем ядра базы данных и хранилищем файловой системы.
Что касается безопасности, то данные файловых потоков защищаются точно так же, как и любые другие данные: на уровне таблиц или столбцов предоставляются разрешения. Единственная учетная запись, получающая разрешения NTFS для контейнера файловых потоков, — это учетная запись, под которой работает учетная запись службы SQL Server. При открытии базы данных SQL Server ограничивает доступ к контейнерам данных файловых потоков. Исключение делается только в том случае, если доступ осуществляется при помощи транзакций T-SQL и OpenSqlFilestream API.

Управление на основе политик
Управление на основе политик — это новая система управления SQL Server, появившаяся в SQL Server 2008. Она позволяет создавать политики для тестирования и создания отчетов по различным аспектам SQL Server. Политики можно применять к отдельным базам данных, отдельным экземплярам SQL Server или ко всем управляемым экземплярам SQL Servers.
Управление на основе политик позволяет тестировать параметры конфигурации SQL Server, а также многие параметры системы безопасности. Для некоторых параметров системы безопасности можно создать политики, которые будут обнаруживать серверы баз данных, не соответствующие заданным требованиям, и пытаться исправить их.
В SQL Server 2008 некоторые не самые важные функции отключены по умолчанию для сокращения возможностей атаки. Управление на основе политик позволяет выборочно включать и отключать функции. После этого можно по расписанию проверять конфигурацию и получать уведомления в случае несоответствия параметров конфигурации установленной политике.
Управление на базе политик объединяет связанные свойства и предоставляет их в пользование в виде компонентов, называемых аспектами. Например, аспект под названием Surface Area Configuration включает такие свойства как Ad Hoc Remote Queries, CLR Integration, Database Mail, OLE Automation, Remote DAC, SQL Mail, Web Assistant и xp_cmdshell. Можно создать политику, которая будет включать свойство CLR Integration, а все остальные — отключать. В политике могут задаваться сложные условия, например можно отключить свойство Database Mail на всех экземплярах SQL Server, кроме Customer_Response.
После создания политики можно ее проверить на свех серверах и создать отчет о том, какие серверы не соответствуют требованиям. Чтобы согласовать параметры серверов с требованиями политики, нужно нажать кнопку «Настроить». Политику следует проверять регулярно, чтобы контролировать состояние серверов. Аспекты Surface Area Configuration доступны для ядра базы данных, служб аналитики и служб отчетов.
Обратите внимание, что управление на основании политик не предназначено для внедрения средств повышения безопасности. В большинстве случаев пользователь, имея достаточные привилегии, может использовать инструкции, противоречащие политике или обходить ее и применять параметры действий, идущие вразрез с установленной политикой безопасности. Функцию управления на основе политик, реализованную в SQL Server 2008, следует рассматривать всего лишь как вспомогательное средство для наблюдения за параметрами системы безопасности SQL Server.
Разные аспекты различаются способностью принудительно изменять параметры. Это зависит от того, могут ли связанные инструкции DDL работать в режиме, отличном от режима автофиксации. В некоторых случаях аспект настраивает параметры экземпляра ядра базы данных, но администратор после этого может вернуть прежние значения. Некоторые аспекты могут вызываться серверным триггером. В таком случае пользователи с низкими привилегиями не смогут изменить параметры, да и вероятность случайного изменения параметров администратором снижается. Здесь администратору приходится временно отключать политику, чтобы изменить значения. Другая группа аспектов только создает отчеты о состоянии свойства, но менять его не может. Так работает политика, проверяющая длину симметричного и асимметичного ключа (см. рис. 2).
Figure 2 Аспекты для асимметричных ключей
Figure 2 Аспекты для асимметричных ключей
Аспекты существуют для большинства типов объектов баз данных, и многие из них участвуют в обеспечении безопасности. Например, аспект для входа в систему может определить, применяется ли политика использования паролей при входе. Аспект для хранимых процедур может проверять, все ли процедуры шифруются. Есть аспекты, которые проверяют свойства пользователей, схем, поставщиков криптографии, соответствие общим критериям, выполняют аудит C2.

Windows Server 2008
SQL Server 2008 полностью протестирован на стабильность работы в Windows Server® 2008, который поставляется со включенным брандмауэром. Следующим шагом было бы неплохо научиться настраивать параметры брандмауэра. Кроме того, Windows Server 2008 обеспечивает управление доступом пользователей, так же, как и Windows Vista®. Это приводит к ограничению привилегий, получаемых администратором автоматически. Эти функции влияют на работу всех версий SQL Server.

В заключение
Система безопасности в SQL Server постоянно совершенствуется. Появляются новые возможности шифрования и проверки подлинности. Новая подсистема аудита и управление на основании политик, реализованное в SQL Server 2008, дают средства, позволяющие контролировать соблюдение установленных норм безопасности.

Рик Бихэм (Rick Byham) работает в корпорации Майкрософт с 1995 года. Он был инженером группы поддержки SQL Server в центре обслуживания клиентов, а потом перешел в группу SQL Server на Microsoft Learning. В 2003 году Рик занял должность технического редактора в группе SQL Server Books Online, в которой он и по сей день отвечает за документацию по вопросам безопасности. Связаться с ним можно по адресу rick.byham@microsoft.com.


 SQL Server 2008: Новые типы данных
SQL Server 2008 Kelly Wilson

Новые типы данных
Краткий обзор:
  • Новые типы данных даты и времени
  • Представление позиции в иерархии
  • Две модели для работы с пространственными данными

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

Дата и время
Используя старый формат datetime, пользователи SQL Server® не могли работать с информацией о дате и времени отдельно. Четыре новых типа данных – date, time, datetime2 и datetimeoffset – меняют дело, упрощая работу с данными о дате и времени, обеспечивая больший диапазон дат, точность до долей секунды и поддержку часовых поясов. Новые приложения для баз данных будут использовать эти новые типы данных вместо устаревшего datetime. Посмотрим на эти новые версии вблизи.
Тип данных date сохраняет дату без компонента времени. Диапазон – от 1 января 1000 года до 31 декабря 9999 года (от 0001-01-01 до 9999-12-31). Каждая переменная даты требует трех байтов для хранения и имеет точность в 10 цифр. Точность типа данных ограничена отдельным днем.
На рис. 1 показано, как содавать и инициализировать переменные Date в сценариях T-SQL. Переменная @myDate1 инициализируется строкой в формате 'MM/DD/YYYY'. Переменная @myDate2 не инициализируется, она будет иметь значение NULL. Переменная @myDate3 инициализируется на дату локальной системы компьютера. Значение переменных может быть в любой момент изменено с помощью инструкций SELECT или SET, это показано на примере изменения значения @myDate2. Столбцы дат можно создавать и в таблицах. На рис. 2 показано, как создать таблицу с тремя столбцами дат.
Figure 2 Create a table with three date columns (Close Figure 2)
USE TempDB
GO

CREATE TABLE myTable
(
    myDate1 date,myDate2 date,myDate3 date
)
GO

INSERT INTO myTable
VALUES('01/22/2005',
       '2007-05-08 12:35:29.1234567 +12:15',
       GetDate())

SELECT * FROM myTable

--Results
--myDate1    myDate2    myDate3
------------ ---------- ----------
--2005-01-22 2007-05-08 2007-11-20
Figure 1 Create and initialize date variables in T-SQL scripts (Close Figure 1)
DECLARE @myDate1 date = '01/22/2005'
DECLARE @myDate2 date
DECLARE @myDate3 date = GetDate()

SELECT @myDate2 = '2007-05-08 12:35:29.1234567 +12:15'

SELECT @myDate1 AS '@myDate1',
       @myDate2 AS '@myDate2',
       @myDate3 AS '@myDate3'

--Results
--@myDate1   @myDate2   @myDate3
------------ ---------- ----------
--2005-01-22 2007-05-08 2007-11-20
Тип данных time сохраняет время суток без компонента даты. Он основан на 24-часовом формате, поэтому поддерживаемый диапазон – от 00:00:00.0000000 до 23:59:59.9999999 (часы, минуты, секунды и доли секунды). Точность в долях секунды можно задать при создании типа данных. По умолчанию используется 7 цифр и точность 100 наносекунд. Точность влияет на занимаемый объем, который меняется от 3 байт для двух цифр, 4 байт для от 3 до 4 цифр и до 5 байт для от 5 до 7 цифр.
Сценарий T-SQL на рис. 3 показывает, как неявные преобразования значения инициализации строки влияют на точность переменной. Сперва код T-SQL создает и инициализирует на одинаковые значения восемь отдельных переменных времени. Точность в долях секунды каждой переменной соответствует ее названию. Например, @myTime3 имеет точность в три знака после запятой. Результаты показывают, что точность каждого типа данных time эквивалентна точности в долях, с которой она объявляется. Цифры, не попадающие в диапазон, отбрасываются.
Figure 3 Display time data type's variable precision (Close Figure 3)
DECLARE @myTime  time = '01:01:01.1234567 +01:01'
DECLARE @myTime1 time(1) = '01:01:01.1234567 +01:01'
DECLARE @myTime2 time(2) = '01:01:01.1234567 +01:01'
DECLARE @myTime3 time(3) = '01:01:01.1234567 +01:01'
DECLARE @myTime4 time(4) = '01:01:01.1234567 +01:01'
DECLARE @myTime5 time(5) = '01:01:01.1234567 +01:01'
DECLARE @myTime6 time(6) = '01:01:01.1234567 +01:01'
DECLARE @myTime7 time(7) = '01:01:01.1234567 +01:01'

SELECT @myTime  AS '@myTime',
       @myTime1 AS '@myTime1',
       @myTime2 AS '@myTime2',
       @myTime3 AS '@myTime3',
       @myTime4 AS '@myTime4',
       @myTime5 AS '@myTime5',
       @myTime6 AS '@myTime6',
       @myTime7 AS '@myTime7'

--Results
--@myTime          @myTime1   @myTime2    @myTime3     @myTime4
------------------ ---------- ----------- ------------ -------------
--01:01:01.1234567 01:01:01.1 01:01:01.12 01:01:01.123 01:01:01.1235
--
--@myTime5       @myTime6        @myTime7
---------------- --------------- ----------------
--01:01:01.12346 01:01:01.123457 01:01:01.1234567

DROP TABLE myTable
Тип данных time можно создать как столбец в таблице. Сценарий T-SQL DROP TABLE myTable на рис. 4 создает таблицу «myTable1» и добавляет в нее три столбца времени. Затем в таблицу помещается запись; содержимое таблицы отображается с помощью инструкции SELECT.
Figure 4 Create myTable1 (Close Figure 4)
USE TempDB
GO

CREATE TABLE myTable1
(
    myTime1 time(1),
    myTime2 time(2),
    myTime3 time(3)
)
GO

INSERT INTO myTable1
VALUES('01:30:01.1234567',
       '02:34:01.1234567',
       '03:01:59.1234567')

SELECT * from myTable1

--Results
--myTime1    myTime2     myTime3
------------ ----------- ------------
--01:30:01.1000000 02:34:15.1200000 03:01:59.1230000

DROP TABLE myTable1

Datetimeoffset и Datetime2
Тип данных datetimeoffset обеспечивает сведения о часовом поясе. Тип данных time не содержит часового пояса и работает только для местного времени. На глобальых рынках, тем не менее, часто нужно знать, как время в одной части планеты соотносится со временем в другой. Сдвиг часового пояса одзначается как + или - ЧЧ:мм.
Этот код создает переменную datetimeoffset и инициализирует ее на значение времени 8:52 по стандартному тихоокеанскому времени:
DECLARE @date DATETIMEOFFSET = '2007-11-26T08:52:00.1234567-08:00'
PRINT @date
--Results
--2007-11-26 08:52:00.1234567 -08:00
Строка, которая инициализирует переменную datetimeoffset (в сценарии – @date) форматируется особым образом, с расположением от наиболее значимого элемента к наименее. Элементы даты и времени разделяются одной заглавной T. Знак «минус» отделяет элементы времени от часового пояса. Между минусом и элементами времени или часового пояса нет пробелов. Этот формат – один из двух форматов ISO 8601, поддерживаемых типом данных datetimeoffset. (ISO 8601 – это международный стандарт записи даты и времени.)
Точность компонента времени задается так же, как для типа данных time, по умолчанию – те же семь цифр. Диапазон – такой же.
Тип данных datetime2 – это расширение исходного типа datetime. Он поддерживает больший диапазон дат и большую точность в долях секунды, позволяя задавать точность. Диапазон дат типа datetime2 – от 1 января 0001 до 31 декабря 9999, в отличие от диапазона исходного datetime от 1 января 1753 до 31 декабря 9999. Как и в типе time, доступна точность долей секунды в семь знаков. Исходный тип datetime позволял использовать три цифры и диапазон времени от 00:00:00 до 23:59:59.999. Вот как создается и инициализируется на время и дату локального сервера переменная datetime2:
DECLARE @datetime2 DATETIME2 = GetDate();
PRINT @datetime2

--Results
--2007-11-26 09:39:04.1370000
Теперь посмотрим на новый тип данных hierarchyid. Этот тип данных работает с отношением между элементами данных в таблице, а не с конкретными данными о дате или времени.

Тип данных hierarchyid
Тип данных hierarchyid позволяет создавать отношения между элементами данных в таблице, для того, чтобы задать позицию в иерархии. Начнем изучать этот тип данных, создав базу данных MyCompany и заполнив ее данными о сотрудниках с помощью сценария с рис. 5.
Figure 5 Create and populate the MyCompany database (Close Figure 5)
USE MASTER
GO

CREATE DATABASE MyCompany
GO
USE MyCompany
GO

--Create a table called employee that will store
--the data for the employees for MyCompany.

CREATE TABLE employee
(
    EmployeeID int NOT NULL,
    EmpName    varchar(20) NOT NULL,
    Title      varchar(20) NULL,
    Salary     decimal(18, 2) NOT NULL,
    hireDate   datetimeoffset(0) NOT NULL,
)
GO

--These statements will insert the data for the employees of MyCompany.

INSERT INTO employee
VALUES(6,   'David',  'CEO', 35900.00, '2000-05-23T08:30:00-08:00')

INSERT INTO employee
VALUES(46,  'Sariya', 'Specialist', 14000.00, '2002-05-23T09:00:00-08:00')

INSERT INTO employee
VALUES(271, 'John',   'Specialist', 14000.00, '2002-05-23T09:00:00-08:00')

INSERT INTO employee
VALUES(119, 'Jill',   'Specialist', 14000.00, '2007-05-23T09:00:00-08:00')

INSERT INTO employee
VALUES(269, 'Wanida', 'Assistant', 8000.00, '2003-05-23T09:00:00-08:00')

INSERT INTO employee
VALUES(272, 'Mary',   'Assistant', 8000.00, '2004-05-23T09:00:00-08:00')
GO
--Results
--EmployeeID  EmpName Title      Salary   hireDate
------------- ------- ---------- -------- --------------------------
--6           David   CEO        35900.00 2000-05-23 08:30:00 -08:00
--46          Sariya  Specialist 14000.00 2002-05-23 09:00:00 -08:00
--271         John    Specialist 14000.00 2002-05-23 09:00:00 -08:00
--119         Jill    Specialist 14000.00 2007-05-23 09:00:00 -08:00
--269         Wanida  Assistant  8000.00  2003-05-23 09:00:00 -08:00
--272         Mary    Assistant  8000.00  2004-05-23 09:00:00 -08:00
Поулчается показанная на рис. 6 простая база данных, состоящая из одной таблицы сотрудников. Эта таблицы в базе данных MyCompany не имеет определенной структуры. Это нормально для реляционной базы данных, где структура определяется динамически за счет приложения через его его запрос и код обработки.
Figure 6 Таблица сотрудников MyCompany
Figure 6 Таблица сотрудников MyCompany
Однако деловая информация чаще всего имеет некую внутренную структуру. Например, каждая фирма имеет некую схему отчетности, как та, которая показана для MyCompany на рис. 7. Все сотрудники MyCompany отчитываются перед директором (CEO) Дэвидом (David). Некоторые отчитываются напрямую, как Джилл (Jill). Некоторые, как Мэри (Mary), отчитываются через промежуточное звено. В терминах программирования, структура отчетности MyCompany можно назвать деревом, она напоминает его по форме. Дэвид, на самом верху, ни перед кем не отчитывается; он «родитель» или «предок». Сотрудники, отчитывающиеся перед Дэвидом, находятся ниже. Такие узлы называются «дочерними» или «потомками». У Дэвида может быть столько «потомков», сколько нужно, чтобы обозначить прямые отчеты.
Figure 7 Организационная структура MyCompany
Figure 7 Организационная структура MyCompany
Сценарий на рис. 8 строит базу данных MyCompany с помощью типа данных hierarchyid, создавая отношения, соответствующие структуре отчетности MyCompany. Дял добавления столбца типа hierarchyid используется инструкция ALTER TABLE. Затем, с помощью метода hierarchyid GetRoot вставляется узел Дэвида. Затем в дерево добавляются отчитывающиеся перед Дэвидом напрямую с помощью метода GetDescendant.
Figure 8 Rebuild the database using hierarchyid (Close Figure 8)
DELETE employee
GO
ALTER TABLE employee ADD OrgNode hierarchyid NOT NULL
GO

DECLARE @child hierarchyid,
@Manager hierarchyid = hierarchyid::GetRoot()

--The first step is to add the node at the top of the
--tree. Since David is the CEO his node will be the
--root node.

INSERT INTO employee
VALUES(6,   'David',  'CEO', 35900.00,
       '2000-05-23T08:30:00-08:00', @Manager)

--The next step is to insert the records for
--the employees that report directly to David.

SELECT @child = @Manager.GetDescendant(NULL, NULL)

INSERT INTO employee
VALUES(46,  'Sariya', 'Specialist', 14000.00,
       '2002-05-23T09:00:00-08:00', @child)

SELECT @child = @Manager.GetDescendant(@child, NULL)
INSERT INTO employee
VALUES(271, ‚John',   ‚Specialist', 14000.00,
       '2002-05-23T09:00:00-08:00', @child)

SELECT @child = @Manager.GetDescendant(@child, NULL)
INSERT INTO employee
VALUES(119, ‚Jill',   ‚Specialist', 14000.00,
       ‚2007-05-23T09:00:00-08:00', @child)

--We can now insert the employee that reports to
--Sariya.
SELECT @manager = OrgNode.GetDescendant(NULL, NULL)
FROM employee WHERE EmployeeID = 46

INSERT INTO employee
VALUES(269, ‚Wanida', ‚Assistant', 8000.00,
       ‚2003-05-23T09:00:00-08:00', @manager)

--Next insert the employee that report to John.
SELECT @manager = OrgNode.GetDescendant(NULL, NULL)
FROM employee WHERE EmployeeID = 271

INSERT INTO employee
VALUES(272, ‚Mary',   ‚Assistant', 8000.00,
       ‚2004-05-23T09:00:00-08:00', @manager)
GO
После добавления записей базы данных и создания структуры, содержимое таблицы сотрудников можно вывести с помощью такого запроса:
SELECT EmpName, Title, Salary, OrgNode.ToString() AS OrgNode
FROM employee ORDER BY OrgNode
GO
--Results
--EmpName  Title      Salary    OrgNode
---------- ---------- --------- -------
--David    CEO        35900.00  /
--Sariya   Specialist 14000.00  /1/
--Wanida   Assistant  8000.00   /1/1/
--John     Specialist 14000.00  /2/
--Mary     Assistant  8000.00   /2/1/
--Jill     Specialist 14000.00  /3/
OrgNode – столбец hierarchyid. Каждый символ косой черты (/) в результатах означает узел в дереве иерархии. Дэвид находится в корне, что обозначено одной чертой. Сария (Sariya), Джон (John) и Джил отчитываются перед Дэвидом и имеют по две черты, это значит, что они – второй узел иерархии. Числа 1, 2 и 3 показывают порядковый номер соответствующего дочернего узла. Эта система обладает большой гибкостью. Дочерние узлы можно удалять, добавлять и вставлять как угодно. Если мы, например, добавим сотрудника между Джоном и Джилл, этот сотрудник будет обозначен в результатах как /2.1/.
Чтобы найти ответ на вопрос, положим, «Кто отчитывается перед Сарией?», можно создать запрос вроде этого:
DECLARE @Sariya hierarchyid

SELECT @Sariya = OrgNode
FROM employee WHERE EmployeeID = 46

SELECT EmpName, Title, Salary, OrgNode.ToString() AS 'OrgNode'
FROM employee
WHERE OrgNode.GetAncestor(1) = @Sariya
GO
--Results
--EmpName Title     Salary  OrgNode
--------- --------- ------- -------
--Wanida  Assistant 8000.00 /1/1/
Этот запрос использует метод hierarchyid GetAncestor, который возвращает родительский узел текущего узла hierarchyid. В приведенном коде, переменная @Sariya установлена на узел иерархии Сарии. Так получается потому, что Сария – прямой «предок» любого сотрудника, отчитывающегося перед ней. Поэтому запрос, возвращающий сотрудников, отчитывающихся прямо перед Сарией, должен состоять из получения ее узла из дерева, а затем выбора всех сотрудников, для которых узел-предок – это узел Сарии.
Столбцы hierarchyid обычно очень компактные, потому что количество бит, требующихся для представления узла дерева, зависит от среднего числа дочерних узлов (которое обычно называют ветвлением узла). Например, новый узел в организационной иерархии 100000 сотрудников со средним уровнем ветвления шесть уровней, займет примерно пять байт места.
Тип данных hierarchyid обеспечивает несколько методов, облегачающих работу с иерархическими данными. Они обобщены на рис. 9. Подробную информацию о всех методах можно найти на SQL Server Books Online (электронные книги по SQL Server) (msdn2.microsoft.com/ms130214).
Figure 9 Methods provided by the hierarchyid data type (Close Figure 9)

Метод | Описание
GetAncestor | Возвращает hierarchyid, представляющего n-ного предка этого узла hierarchyid.
GetDescendant | Возвращает дочерний узел этого узла hierarchyid.
GetLevel | Возвращает целое число, представляющее глубину это узла hierarchyid в общей иерархии.
GetRoot | Возвращает корневой узел hierarchyid этого дерева иерархии. Статический.
IsDescendant | Возвращает true, если переданный дочерный узел является потомком этого узла hierarchyid.
Parse | Переводит строчное представление иерархии в значение hierarchyid. Статический.
Reparent | Передвигает узел в другое положение в иерархии.
ToString | Возвращает строку, содержащую логическое представление этого hierarchyid.

Пространственные типы данных
Пространнственные данные – это данные, определяющие географические расположения и формы, преимущественно на Земле. Это могут быть ориентиры, дороги и даже расположение фирмы. В SQL Server 2008 есть географические (geography) и геометрические (geometry) типы данных для работы с этой информацией.
Тип данных geography работает с инфорацией для шарообразной земли. Модель шарообразной земли использует при расчетах кривизну земной поверхности. Информация о положении задается широтой и долготой. Эта модель хорошо годится для приложений, связанных с морскими перевозками, военным планированием и краткосрочными приложениями, имеющими привязку к земной поверхности. Эту модель нужно использовать, если данные хранятся в виде широт и долгот.
Тип данных geometry работает с планарной моделью или моделью плоской земли. В этой модели земля считается плоской проекцией из определенной точки. Модель плоской земли не принимает в расчет кривизну поверхности земли, поэтому используется, в первую очередь, для описания коротких расстояний, например, в базе данных приложения, описывающего внутреннюю часть строения.
Типы geography и geometry создаются из векторных объектов, заданных в форматах Well-Known Text (WKT) или Well-Known Binary (WKB). Это форматы для перенесения пространственных данных, описанные в простых функциях открытого геопространственного консорциума (Open Geospatial Consortium (OGC) Simple Features) для спецификаций SQL (SQL Specification). На рис. 10 перечислены семь типов векторных объектов, поддерживаемых SQL Server 2008.
Figure 10 Vector objects supported by SQL Server 2008 (Close Figure 10)

Объект | Описание
Point | Расположение.
MultiPoint | Набор расположений.
LineString | Набор из нуля или более точек, соединенных линиями.
MultiLineString | Набор прямых (linestring).
Polygon | Непрерывная область, описываемая набором закрытых прямых (linestring).
MultiPolygon | Набор многоугольников (polygon).
GeometryCollection | Собрание типов geometry.
Чтобы создать тип geography с одним или несколькими векторными объектами, сперва надо объявить тип geography в своем сценарии T-SQL, как на рис. 11. Затем нужно вызвать один из методов с рис. 12 и передать строку символов своего векторного объекта и идентификатор пространственного отношения (Spatial Reference ID) (SRID). SRID – это система идентификации пространственного отношения, созданная европейской группой нефтепоисковых исследований (European Petroleum Survey Group). Это часть набора стандартов, разработанных для картографии, геодезии и хранения геодезических данных. Каждый SRID задает для географических расчетов определенный тип эллипсоида. Это важно, потому что земля – не идеальная сфера. SQL Server 2008 может выполнять расчеты только на идентичных SRID.
Figure 12 Construct objects for geography and geometry (Close Figure 12)

Метод | Описание
STGeomFromText | Создает элементы geography из текста на вводе.
STPointFromText | Создает элемент geography Point из текста на вводе.
STMPointFromText | Создает элемент geography MultiPoint из текста на вводе.
STLineFromText | Создает элемент geography LineString из текста на вводе.
STMLineFromText | Создает элемент geography MultiLineString из текста на вводе.
STPolyFromText | Создает элемент geography Polygon из текста на вводе.
STMPolyFromText | Создает элемент geography MultiPolygon из текста на вводе.
STGeomCollFromText | Создает элемент geography GeometryCollection из текста на вводе.
Figure 11 Create points, lines, and polygon geometry (Close Figure 11)
DECLARE @geo1 geometry
SELECT @geo1 = geometry::STGeomFromText('POINT (3 4)', 0)
PRINT @geo1.ToString()

DECLARE @geo2 geometry
SELECT @geo2 = geometry::Parse('POINT(3 4 7 2.5)')
PRINT @geo2.STX;
PRINT @geo2.STY;
PRINT @geo2.Z;
PRINT @geo2.M;

DECLARE @geo3 geography;
SELECT @geo3 = geography::STGeomFromText(
    'LINESTRING(47.656 -122.360, 47.656 -122.343)', 4326);
SELECT @geo3.ToString();

--Results
--POINT (3 4)
--3
--4
--7
--2.5

DECLARE @gx geometry;
SET @gx = geometry::STPolyFromText(
    'POLYGON ((5 5, 10 5, 10 10, 5 5))', 0);
PRINT @gx.ToString();
--Results
--POLYGON ((5 5, 10 5, 10 10, 5 5))

Различия между geography и geometry
Типы данных geography и geometry созданы для работы с различными видами данных, поэтому следует знать о некоторых ключевые отличиях между ними. В типе данных geometry, расстояния и площади задаются в тех же единицах измерения, что и координаты объектов. Например, расстояние между точками (0,0) и (6,8) всегда будет 10 единиц. В типа geography иначе, он использует эллиптические координаты, выражающиеся в градусах широты и долготы.
Если координаты выражены парами широты и долготы, тип данных GEOMETRY возвращает некорректные результаты. Следующий код T-SQL расчитывает расстояние между POINTS (точками) (90 0) и (90 180). Обе они находятся на северном полюсе, поэтмоу расстояние должно быть равным 0. В случае GEOMETRY расчетное расстояние оказывается 180.
DECLARE @g1 GEOMETRY, @g2 GEOMETRY, @g3 GEOGRAPHY, @g4 GEOGRAPHY
SELECT @g1 = GEOMETRY::STGeomFromText('POINT (90 0)', 0)
SELECT @g2 = GEOMETRY::STGeomFromText('POINT (90 180)', 0)

SELECT @g3 = GEOGRAPHY::STGeomFromText('POINT (90 0)', 4326)
SELECT @g4 = GEOGRAPHY::STGeomFromText('POINT (90 180)', 4326)
SELECT @g2.STDistance(@g1) AS 'GEOMETRY',
       @g4.STDistance(@g3) AS 'GEOGRAPHY';

--Results
--GEOMETRY               GEOGRAPHY
------------------------ ----------------------
--180                    0
Ориентация пространственных данных для этих типов данных тоже различается. В планарной системе, используемой типом данных geometry, ориентация многоугольника не является важным фактором. Например, многоугольник с координатами ((0, 0), (10, 0), (0, 20), (0, 0)) – то же самое, что и многоугольник ((0, 0), (0, 20), (10, 0), (0, 0)). Напротив, тип данных geography использует модель, в которой необходимо определять ориентацию многоугольника. Возьмем, например, кольцо вдоль экватора. Относится ли многоугольник, описываемый этим кольцом, к северному или южному полушарию? Это значит, что при работе с данными geography, ориентация и расположение должны описываться точно.
Есть и дополнительные ограничения, накладываемые SQL Server 2008 на тип данных geography. Например, каждый элемент должен попадать в одно полушарие. Большие пространственные объекты недопустимы и вызовут ArgumentException. Типы данных geography, требующие двух вводов, возвращают NULL, если результаты методов не попадают в одно полушарие.
В SQL Server есть несколько методов, позволяющих выполнять операции с объектами geography и geometry. На рис. 13 показаны некоторые примеры использования методов работы с пространственными данными в SQL Server 2008. Я не могу в ограниченном объеме статьи рассказать об этом подробнее, но вы сможете найти полные описания в SQL Server Books Online.
Figure 13 Working with spatial data (Close Figure 13)
DECLARE @gm geometry;
DECLARE @gg geography;
DECLARE @h geography;

SET @gm = geometry::STGeomFromText('POLYGON((0 0, 13 0, 3 3, 0 13, 0 0),(2 2, 2 1, 1 1, 1 2, 2 2))', 0);
SELECT @gm.STArea();

--Results
--38

SET @gg = geography::STGeomFromText('LINESTRING(0 0, 5 5)', 4326);
--Calculate the distance to a point slightly offset from the LINESTRING.
SET @h = geography::STGeomFromText('POINT(4 4)', 4326);
SELECT @gg.STDistance(@h);

--Results
-- 430.182777043046

--Calculate the distance to a point on the LINESTRING.
SET @h = geography::STGeomFromText('POINT(5 5)', 4326);
SELECT @gg.STDistance(@h);

--Results
-- 0

DECLARE @temp table ([name] varchar(10), [geom] geography);

INSERT INTO @temp values ('Point', geography::STGeomFromText('POINT(
5 10)', 4326));
INSERT INTO @temp values ('LineString', geography::STGeomFromText(
'LINESTRING(13 5, 50 25)', 4326));
--Calculate the distance to a point on the LINESTRING.
--Display the number of dimensions for a geography object stored in a --table variable.
INSERT INTO @temp values ('Polygon', geography::STGeomFromText(
'POLYGON((47.653 -122.358, 47.649 -122.348, 47.658 -122.348, 47.658 -122.358, 47.653 -122.358))', 4326));

SELECT [name], [geom].STDimension() as [dim]
FROM @temp;

--Results
--name       dim
------------ -----------
--Point      0
--LineString 1
--Polygon    2
Надеюсь, что эта информация о семи новых типах данных в SQL Server 2008 принесла пользу.

Kelly Wilson разрабатывает программное обеспечение более 20 лет. Она занималась приложениями под SQL Server, трехмерной графикой, играми и наукой о цвете. Сейчас Келли работает техническим писателем в группе SQL Server корпорации Майкрософт.


 SQL Server 2008: Производительность запросов к хранилищу данных
SQL Server 2008 Sunil Agarwal and Torsten Grabs and Dr. Joachim Hammer

Производительность запросов к хранилищу данных
Краткий обзор:
  • Оптимизация запроса типа «звезда»
  • Параллелизм секционированных таблиц
  • Сжатие ROW и PAGE
  • Индексированные представления, выровненные по секциям

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

Логическая структура базы данных: многомерное моделирование
Транзакционные бизнес-приложения обычно имеют нормализованную схему базы данных. Логическая структура схемы базы данных для реляционных хранилищ данных не так связана с нормализацией. Многие современные структуры реляционных хранилищ данных основаны на подходе многомерного моделирования, который стал популярен после выхода книги Ральфа Кимбалла (Ralph Kimball) и Марджи Росс (Margy Ross) «The Data Warehouse Toolkit: The Complete Guide to Dimensional Modeling» (Инструментарий хранилища данных: полное руководство по многомерному моделированию).
Те, кто работает с хранилищами данных, наверняка знакомы с обычными схемами для реляционных хранилищ данных (такие, как «звезда» и «снежинка»). В многомерном моделировании выделяются таблицы измерений и таблицы фактов. Таблицы измерений содержат основные данные (продукты, клиенты, магазины или страны), а таблицы фактов содержат данные транзакций (продажи, заказы, покупки или возвраты).
Таблицы измерений и фактов имеют связь «первичный (PK)-внешний (FK) ключ». Многие хранилища данных не используют ограничения FK для уменьшения требований к объему хранилища. Это спасает от дополнительных затрат на хранение подлежащих индексов и сокращает стоимость поддержания таблицы фактов. Таблицы измерений в хранилище данных обычно небольшие, они содержат в среднем тысячи и до нескольких миллионов строк. Таблицы фактов, с другой стороны, могут быть очень большими и содержать от сотен миллионов до миллиардов строк. Поэтому логическая структура должна уделять особое внимание требованиям таблицы фактов к объему хранилища.
Этот фактор размера влияет на то, какой ключ следует выбрать из таблицы измерений, чтобы поддерживать соотношения таблицы фактов к таблице измерения. Составные ключи, основанные на бизнес-ключе измерения (то есть на реальном идентификаторе объекта, представленного измерением), обычно занимают несколько столбцов. Следует знать, что это проблема для соответствующего внешнего ключа в таблице фактов, потому что составной ключ из нескольких столбцов будет повторяться для каждой строки таблицы фактов.
Чтобы этого не было, для реализации отношений между таблицей фактов и ее измерениями часто применяют маленькие суррогатные ключи. Суррогатный ключ – это столбец идентификаторов типа integer, который служит искусственным первичным ключом таблицы измерения. Большие таблицы фактов, ссылающиеся на маленькие суррогатные ключи, требуют гораздо меньше места. На Рис. 1 показана схема хранилища данных на основе многомерной модели, использующая таблицы фактов и измерений с суррогатными ключами.
Figure 1 Пример схемы «звезда» с таблицей фактов и двумя таблицами измерений
Figure 1 Пример схемы «звезда» с таблицей фактов и двумя таблицами измерений
Схема «снежинка» распространяет одно или несколько измерений на множество уровней (например, клиент, страна и регион для измерения «клиент»), нормализуя большие измерения, которые могут быть перегружены избыточными данными. Уровни представлены отдельными таблицами, поэтому схема похожа на снежинку. Структура схемы «звезда», напротив, не распространяет измерения на таблицы. Эта схема имеет форму звезды, где центром служит таблица фактов, а вокруг нее собраны таблицы измерений.
В схемах "звезда" или «снежинка», смоделированных многомерно, запросы поддержки решения следуют такой типичной последовательности: запрос выбирает несколько нужных мер из таблицы фактов, объединяет строки фактов с одним или несколькими измерениями вместе с суррогатными ключами, размещает предикаты фильтров в бизнес-столбцы таблиц измерений, группирует по одной или нескольким бизнес-столбцам и собирает меры, полученные из таблицы фактов за промежуток времени. Ниже приведена эта последовательность, которую иногда называют «запрос типа ‘звезда’»:
select ProductAlternateKey,
CalendarYear,sum(SalesAmount)
from FactInternetSales Fact
     join DimTime
on Fact.OrderDateKey = TimeKey
     join DimProduct
on DimProduct.ProductKey =
   Fact.ProductKey
where CalendarYear between 2003 and 2004
      and ProductAlternateKey like 'BK%'
group by ProductAlternateKey,CalendarYear

Физическая модель
Многие запросы SQL в реляционном хранилище данных следуют такой структуре запроса типа «звезда». Тем не менее, запросы поддержки решения меняются со временем, потому что руководители постоянно пытаются улучшить понимание фундаментальных данных бизнеса новыми способами. Именно поэтому в рабочих нагрузках на хранилища данных много незапланированных запросов. Это усложняет физическую модель запросов поддержки решения и схемы многомерно смоделированного хранилища данных.
Обычно под SQL Server разработчики хранилищ данных начинают с плана или физической модели, которую они улучшают и корректируют по мере развития рабочей нагрузки. Вы можете воспользоваться таким планом для собственной среды хранилища данных. В этом случае, не забывайте о рекомендациях для построения физических моделей баз данных, таких, как воздействие на скорость за счет поддержания индексов для обновления и требования индексов к объему хранилища.

Таблица фактов
План должен быть расчитан на типичную форму запроса «звезда» и он должен строить индексы на таблице фактов. Кластеризованный индекс таблицы фактов использует несколько столбцов суррогатных ключей измерений (столбцы внешнего ключа) в качестве ключей индекса. Столбцы, используемые чаще всего, должны появиться в списке ключей индекса. Не помешает проверить, что таким образом действительно получаются хорошие пути доступа для наиболее частых запросов в рабочей нагрузке.
Кроме того, план создает некластеризованный индекс в один столбец для каждого столбца суррогата измерения (внешнего ключа) в таблице фактов. Это обеспечивает высокоэффективный путь доступа для запросов, очень избирательных в одном из измерений.
Задача кластеризованного индекса – обеспечить хорошую производительность для большинства запросов рабочей нагрузки. Набор некластеризованных индексов предназначен для запросов, получающих меры таблицы фактов для определенного клиента или продукта. Эти некластеризованные индексы исключают, например, сканирование всей таблицы фактов при поиске данных о продажах одному клиенту.

Таблица измерений
Применяя план к таблицам измерений, нужно создавать индексы для каждой таблицы измерения. Это некластеризованный индекс ограничения первичного ключа на столбце суррогатного ключа измерения и кластеризованный индекс столбцов бизнес-ключа объекта измерения. Для больших таблиц измерений можно добавить некластеризованные индексы для столбцов, которые часто используются в очень избирательных предикатах.
Кластеризованный индекс увеличивает эффективность извлечения, преобразования и загрузки (ETL) в период обслуживания хранилища данных, которое часто ограничено во времени. Например, в случае медленно меняющихся измерений, существующие строки обновляются на месте, а новые – добавляются к таблице измерения. Такая схема доступа может быть эффективной только при хороших просмотре и обновлении таблицы измерения во время ETL.
План, описанный выше, служит хорошей отправной точкой для физических моделей реляционных хранилищ данных на SQL Server. Основываясь на этом типичном устройстве реляционного хранилища данных, мы можем рассмотреть ключевые новые функции SQL Server 2008.

Оптимизация запроса типа «звезда»
Обработка таблицы фактов – обычно самая продолжительная часть выполнения запроса «звезда» в реляционном хранилище данных на многомерной модели. В этом легко убедиться, потому что даже очень избирательные запросы получают на порядок больше строк из таблицы фактов, нежели из любого измерения. Поэтому использование наилучшего пути доступа в таблицу фактов важно для высокой производительности запроса.
SQL Server использует оптимизатор запроса на основе стоимости, то есть пытается создать план выполнения с минимальной оценочной стоимостью. В контексте хранения данных, главная задача -- убедиться, что оптимизатор запроса оценивает однозначные альтернативы путей доступа для плана выполнения запроса "звезда». В оптимизатор запросов SQL Server включено несколько функций, автоматически обеспечивающих производительные планы выполнения запросов типа «звезда».
Запросы типа «звезда» можно представить себе разделенными на три класса, как на рис. 2. Эти широкие классы также позволяют SQL Server определять правильные планы для таких запросов. SQL Server основан на главном принципе избирательности запросов по отношению к таблице фактов. Запрос тем более избирателен, чем меньше строк из таблицы фактов он употребляет. Проценты строк, полученных из таблицы фактов, используются для создания классов запросов. Эти проценты отражают значения из типичных запросов клиентов, но не являются строгими границами для создания определений пути доступа.
Figure 2 Диапазоны избирательности для запросов типа «звезда»
Figure 2 Диапазоны избирательности для запросов типа «звезда»
В первый класс включены высокоизбирательные запросы, обрабатывающие до 10 процентов строк таблицы фактов. Второй класс, со средней избирательностью, содержит запросы, обрабатывающие от 10 до 75 процентов строк таблицы фактов. Запросы в третьем классе, с низкой избирательностью, требуют обработки более 75 процентов строк таблицы фактов. Прямоугольники на рисунке показывают основные планы выполнения запросов для каждого класса избирательности.

Выбор плана на основании изибрательности
Так как высокоизбирательные запросы «звезда» обычно получают не более 10 процентов строк таблицы фактов, им можн позволить случайный доступ к таблице. Поэтому планы запросов для этого класса основаны на соединениях вложенных циклов вместе с поисками индексов (некластеризованных) и поиском закладок в таблице фактов. Так как они выполняют произвольный ввод/вывод в таблицу фактов, последовательный ввод/вывод, при получении больших количеств таблицы фактов, получается более производительным. Поэтому по мере роста количества строк, получаемых из таблицы фактов, выше определенного предела, применяется другой план запроса.
Так как запросы типа «звезда» средней избирательности обрабатывают значительную часть строк таблицы фактов, для доступа в таблицу фактов обычно применяются хэш-соединения со сканированием таблицы фактов или сканирование диапазона таблицы фактов. SQL Server использует растровые фильтры для улучшения производительности хэш-соединений.
На рис. 3 показано, как SQL Server использует растровые фильтры для улучшения производительности соединения при выполнении запроса типа «звезда». На рисунке показан план запроса к двум таблицам измерений, продукта и времени, которые соединяются с таблицей фактов через суррогатные ключи. Запрос использует предикаты фильтров, такие, как оператор WHERE, против обоих таблиц измерений так, что только одна строка подходит для каждого измерения. Это обозначано маленькими красными таблицами рядом с двумя операторами соединения.
Figure 3 План запроса типа «звезда» с обработкой уменьшения соединения
Figure 3 План запроса типа «звезда» с обработкой уменьшения соединения
Реализация соединения для каждого соединения – хэш-соединение, которое позволяет SQL Server взять информацию о соответствующих строках из таблиц измерений и получить то, что мы называем информацией об уменьшении соединения, для обоих таблиц измерений. Зелеными рамками на рисунке обозначены структуры данных информации об уменьшении соединения. Заполнив их из подлежащих таблиц измерений, SQL Server автоматически передает во время выполнения запроса эти структуры данных оператору, обрабатывающему таблицу фактов, такому, как сканирование таблицы. Этот оператор использует информацию о строках таблицы измерения, чтобы исключить строки таблицы фактов, которые не соответствуют условиям соединения против измерений.
SQL Server убирает эти строки таблицы фактов очень рано в процессе обработки запроса – после получения строки из таблицы фактов. Это позволяет экономить время работы ЦП и, возможно, сократить ввод/вывод с диска, потому что убранные строки не нужно обрабатывать в дальнейших операторах плана запроса. SQL Server использует растровое представление, чтобы эффективно реализовать структуры данных информации об уменьшении соединения во время выполнения запроса.

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

Эвристика соединения типа «звезда»
Многие физические модели хранилищ данных используют схему «звезда», но не полностью указывают отношения между таблицами измерения и фактов, как, например, с упомянутыми выше ограничениями внешнего ключа. Если ограничения внешнего ключа не заданы явно, SQL Server должен определять последовательности запросов в схеме «звезда» с помощью эвристики. Для этого применяется следующая эвристика.
  1. Наибольшая из таблиц, участвующих в n-арном соединении, считается таблицей фактов. Есть дополнительные ограничения на минимальный размер таблицы фактов. Например, если даже наибольшая таблица меньше определенного размера, n-арное не считается соединением типа «звезда».
  2. Все условия соединения двоичных соединений запроса типа «звезда» должны быть предикатами равенства обного столбца. Соединения должны быть внутренними. Это может показаться ограничением, но сюда попадает большинство соединений между таблицей фактов и таблицами измерений на суррогатных ключах в типичных схемах типа «звезда». Если соединение имеет более сложные условия, не соответствующие описанной выше схеме, оно исключается из соединения типа «звезда». Например, пятисторонное соединение может привести к трехстороннему (с двумя дополнительными позже), если два соединения имеют более сложные предикаты.
Заметьте, что это правила эвристики. В действительности ситуаций, в которых эвристика перепутает таблицу фактов с таблицей измерений, немного. Это влияет на выбор плана, но не изменяет правильности выбранного плана. Двоичные соединения, вовлеченные в запрос типа «звезда», затем сортируются по убыванию избирательности. Избирательность соединения в этом контексте определяется как отношение мощности ввода таблицы фактов и итоговой мощности соединения, то есть избирательность соединения означает, насколько определенное измерение уменьшает мощность таблицы фактов. В общем случае следует рассматривать соединения с большей избирательностью первыми.
Процессор запроса SQL Server автоматически применяет оптимизацию к запросам, соответствующим схеме "звезда" и упомянутым выше условиям, когда получаемые планы запроса оцениваются как выгодные. Поэтому нет необходимости изменять свое приложение, чтобы воспользоваться этим способом увеличения производительности. Заметьте, что некоторые из оптимизаций запроса типа «звезда», такие, как уменьшение соединения, доступны только в версии сервера SQL Server Enterprise Edition.

Результаты исследования производительности соединения типа «звезда»
В рамках проекта по оптимизации соединения типа «звезда» в SQL Server 2008, мы выполнили несколько исследований быстродействия, основываясь на экспериментальных и реальных клиентских рабочих нагрузках. Стоит посмотреть на результаты трех из этих нагрузок.
Хранилище данных по организации продаж копрорации Майкрософт Эта рабочая нагрузка прослеживает быстродействие хранилища данных, использующегося для поддержки принятия решений в отделе организации продаж корпорации Майкрософт. Мы взяли фрагмент базы данных размером около 750 ГБ (включая индексы). Запросы это рабочей нагрузки сложны для обработки, так как многие имеют более 10 соединений.
Розничная торговля Эта серия экспериментов основана на хранилище данных клиента, занятого в розничной торговле (обычный магазин и работа в Интернете). Особенности клиента – многомерная схема типа «снежинка» и обычные запросы типа "звезда". Для заполнения фрагмента хранилища мы использовали в наших экспериментах около 100 ГБ необработанных данных.
Рабочая нагрузка поддержки решения Эта серия экспериментов исследует производительность рабочей нагрузки поддержки решения в многомерной базе данных размером 100 ГБ. На рис. 4 показаны результаты этих трех нагрузок. На рисунке изображен график времени ответа на запрос для всех запросов рабочей нагрузки. Эта мера – хороший показатель того, какой должна быть производительность запроса при выполнении произвольных запросов из рабочей нагрузки. Столбцы на рисунке сравнивают базовую производительность (1.0) без использования оптимизации запроса типа «звезда» с производительностью, оптимизированной для такого запроса. Все опыты были выполнены на SQL Server 2008.
Figure 4 Улучшение производительности за счет оптимизации соединения типа "звезда"
Figure 4 Улучшение производительности за счет оптимизации соединения типа "звезда"
Как видно на рисунке, все рабочие нагрузки значительно улучшились, от 12 до 30 процентов. Конкретные числа могут отличаться, но мы прогнозируем улучшение рабочих нагрузок поддержки решения относительно SQL Server Engine на 15-20 процентов за счет расширения оптимизаций запросов типа «звезда», которое включено в SQL Server 2008.

Параллелизм секционированных таблиц
Чтобы ускорить обработку запросов в больших хранилищах данных, администраторы часто секционируют большие таблицы фактов по дате. Данные разделяются на группы файлов, уменьшая объем данных, который нужно просмотреть при обработке строк в определенном диапазоне; также это позволяет одновременно использовать производительность подлежащей дисковой системы, когда группы фалов расположены на многих физических дисках.
В SQL Server 2005 была добавлена возможность секционировать большие соотношения на меньшие логические фрагменты, чтобы улучшить управление и администрирование больших таблиц. Это также успешно применялось для улучшения обработки запросов, особенно в больших приложениях поддержки решений.
К сожалению, некоторые клиенты, использующие SQL Server 2005, столкнулись с проблемами производительности, особенно при работе на многопроцессорных компьютерах с параллельной совместно используемой памятью. При обработке параллельных запросов на секционированных таблицах в SQL Server 2005, может возникать ситуация, при которой только часть доступных потоков используется для выполнения запросов.
Возьмем 64-разрядный комьютер, где запросы могут использовать до 64 потоков одновременно. Запрос при этом затрагивает две секции. В SQL Server 2005 он получит только 2 из 64 потоков, используя, таким образом, только 2/64 (3.1 процента) мощности ЦП компьютера. Для некоторых запросов сообщалось о десятикратном ухудшении производительности при секционировании по сравнению с выполнением того же запроса на том же компьютере на несекционированной версии той же таблицы фактов.
Следует отметить, что SQL Server 2005 был оптимизирован для работы с запросами, затрагивающими одну секцию. В этом случае процессор запросов передаст все доступные потоки для выполнения сканирования. Эта особая оптимизация привела к значительному увеличению производительности односекционных запросов на многоядерных компьютерах, поэтому клиенты, естесственно, ожидали того же от запросов, затрагивающих несколько секций.
Новая функция в SQL Server 2008, параллелизм секционированных таблиц (PTP), улучшает производительность запросов в случае секционирования, лучше используя вычислительные мощности имеющегося оборудования, независимо от того, сколько секций затрагивает запрос, или каков относительный размер отдельных секций. В типичном случае хранилища данных с секционированной таблицей фактов, пользователи смогут заметить значительное улучшение запросов, выполняющихся параллельно, особенно если количество доступных ядер процессора больше числа секций, затрагиваемых запросом. И эта новая функция работает сразу, без дополнительной настройки или изменений.
Пусть у нас есть таблица фактов, представляющая данные продаж, разделенные по дате продажи на четыре секции. Представить себе это поможет диаграмма на рис. 5. Заметьте, что вместо одного кластеризованного индекса для всего диапазона данных, как в случе без секционирования, обычно есть кластеризованный индекс в столбце данных для каждой секции таблицы фактов. Предположим, что запрос Q суммирует продажи за последние семь дней. Так как новые данные о продажах постоянно добавляются в таблицу фактов через последнюю секцию (обозначенную как P4), запрос будет затрагивать различные секции, в зависимости от того, когда он выполняется. Это показано в первом ряду диаграммы, где запрос Q1 затрагивает только одну секцию, а запрос Q2 -- две, так как соответствующие данные во время выполнения находятся в секциях P3 и P4.
Figure 5 Новыя функция PTP в работе
Figure 5 Новыя функция PTP в работе
Теперь предположим, что доступно восемь потоков. Выполнение Q1 и Q2 под SQL Server 2005 может привести к неожиданному поведению. SQL Server 2005 устроен так, что оптимизатор знает во время компиляции, что запросом будет затронута только одна секция, что секция будет считаться одной несекционированной таблицей и что будет создан план, получающий доступ к таблице через все имеющиеся потоки.
В результате для Q1, затрагивающего одну секцию (P3), возникнет план, обрабатывающийся восемью потоками (не показано на рисунке). В случае Q2, который затрагивает две секции, исполнитель передает каждой секции по одному потоку, даже если оборудование имеет дополнительные свободные потоки. Поэтому Q2 будет использовать только малую часть мощности ЦП и наверняка будет выполняться значительно медленнее, чем Q1.
При выполнении Q1 и Q2 под SQL Server 2008 доступное оборудование будет использоваться полнее, что обеспечит лучшую производительность и предсказуемое поведение. В случае Q1, исполнитель снова передает все восемь доступных потоков обработке данных в P2 (не показано на рисунке). Q2, тем временем, вызовет параллельный план, в котором исполнитель передаст все доступные потоки и P3 и P4 циклическим способом, эффект чего можно видеть в нижнем ряду диаграммы, где обе секции получают по четыре потока. ЦП занять полностью, а производительность Q1 и Q2 сравнима.
Такое циклическое распределение потоков позволяет тем быстрее выполнять запросы, чем больше доступно ядер процессора, по сравнению с числом секций, затрагиваемых запросом. К сожалению, не во всех случаях распределение потоков по секциям так просто, как в этом примере.
Выигрыш в производительности SQL Server 2008 по сравнению с SQL Server 2005 для случая многоядерного компьютера проиллюстрирован еще на рис. 6. Этот характерный график демонстрирует производительность сканирования для секционированных таблиц. Для этого теста, который проводился в системе с 64 ядрами и 256 ГБ оперативной памяти, мы разделили одну таблицу размером 121 ГБ на 11 секций по 11 ГБ. Для набора тестов на этом рисунке мы организовали файлы в структуру сортирующего дерева, как с холодным, так и с горячим запуском. Все запросы производят простые сканирования данных.
Figure 6 Производительность сканирования для SQL Server при включении новой функции PTP
Figure 6 Производительность сканирования для SQL Server при включении новой функции PTP
По оси ординат отложено время (в секундах), а по оси абсцисс – степень параллелизма (DOP), которая аналогична количеству потоков, отданных запросу. Можно видеть, что и при горячем, и при холодном запусках время отклика уменьшается до тех пор, пока DOP не достигнет 22. В этот момент для случая холодного запуска насыщается система ввода-вывода. Это связано с тем, что запрос в этом примере зависим от ввода-вывода. Для более ЦП-ориентированных нагрузок это ограничение может не наступить или наступить при более высокой DOP.
Кривая, представляющая случай горячего запуска, тем не менее, продолжает показывать уменьшение времени отклика с увеличением уровня DOP. В SQL Server 2005 обе кривые начали бы падать примерно на DOP 11, потому что при работе с несколькими секциями количество потоков на секцию было бы ограничено 1.
Важно отметить, что на практике уменьшение времени отклика при увеличении числа DOP не бывает линейным. Ожидаемое поведение скорее напоминает пошаговое движение, потому что запрос ждет самой медленной части. Например, если добавить еще один поток к сканированию, общее время не уменьшится, если только не добавиь по потоку к остальным сканированиям, чтобы они тоже могли ускориться.
Мы провели дополнительные эксперименты, чтобы проверить поведение PTP для других конфигураций оборудования и файлов. При этом мы отметили сходное поведение – увеличение пропускной способности при уровне DOP большем, чем один поток на секцию.
Наконец, что немаловажно, новая функция PTP в SQL Server 2008 улучшает удобочитаемость планов запросов и позволяет лучше понять выполнение некоторых рабочих нагрузок. Например, благодаря функции PTP, улучшилось то, как представлены в Showplan XML параллельные и серийные планы, также усовершенствовано предоставление информации о секционировании для планов при компиляции и планов при выполнении.

Сжатие данных
По мере того, как бизнес-аналитика становится популярной, предприятия добавляют все больше данных для анализа в свои хранилища. Результат – экспоненциальный рост объема управляемых данных. В 1995 первое исследование размера баз данных корпорацией Winter Corporation позволило выяснить, что крупнейшая система в мире содежит терабайт данных. Спустя десять лет крупнейшая база данных была уже в 100 раз больше. Впечатляет то, что размер хранилищ данных утраивается каждые два года. Это ставит новые вопросы об управлении такими большими объемами данных и обеспечении приемлимогой скорости выполнения запросов к хранилищам данных. Эти запросы обычно сложные, включающие много соединений и агрегатов, им нужен доступ к большим объемам данных. И многие запросы в рабочей нагрузке зависят от ввода-вывода.
Эту проблему помогает решить собственное сжатие данных. В SQL Server 2005 SP2 был включен новый формат хранения переменной длины под названием vardecimal, для десятичных и числовых данных. Этот новый формат хранения может значительно уменьшить размер баз данных. Выигрыш в объеме может, в свою очередь, двумя способами улучшить производительность запросов, зависимых от ввода-вывода. Во-первых, нужно считывать меньше страниц, а во-вторых, так как данные хранятся в буферном пуле сжатыми, увеличивается ожидаемое время жизни страницы (иначе говоря, увеличивается вероятность, что нужная страница окажется в буфере). Конечно, выгода в объеме от сжатия данных приводит к нагрузке на ЦП в процессе сжатия и распаковки данных.
SQL Server 2008 использует формат хранения vardecimal, обеспечивая два вида сжатия: сжатие ROW и PAGE. Сжатие ROW расширяет формат хранения vardecimal за счет хранения всех типов данных фиксированной длины в формате хранения переменной длины.
Некоторые примеры типов данных фиксированной длины -- integer, char и свободные типы данных. Несмотря на то, что SQL Server хранит эти типы данных в формате переменной длины, их семантика не меняется (с точки зрения приложения, тип данных продолжает быть фиксированной длины). Это значит, что можно воспользоваться преимуществами сжатия данных, не изменяя свои приложения.
Сжатие PAGE уменьшает изыбточность данных в столбцах в одной или более строке на данной странице. Оно использует собственную реализацию алгоритма LZ78 (Лемпеля-Зива), сохраняя избыточные данные единожды на странице, ссылаясь затем на них из многих столбцов. Заметьте, что если вы используете сжатие PAGE, сжатие ROW тоже используется.
Сжатие ROW и PAGE можно включить для таблицы, индекса или одной и более секций секционированных таблиц и индексов. Это дает полную гибкость выбора таблиц, индексов и секций для сжатия, позволяя найти баланс между выигрышем в объеме и нагрузкой на ЦП. На рис. 7 это проиллюстрировано с помощью таблицы продаж, секционированной различными способами с выровненными индексами.
Figure 7 Секционированная таблица с различными настройками сжатия
Figure 7 Секционированная таблица с различными настройками сжатия
Каждая секция представляет квартал, последний квартал – Oct-Dec. Предположим, что первые две секции используются редко, третья – средне, а последняя – наиболее активно. В этом случае можно включить сжатие PAGE для первых двух секций, чтобы получит максимальную экономию места, мнимально затронув производительность рабочей нагрузки, сжатие ROW для третьей секции и не сжимать последнюю.
Сжатие можно включить в автономном или оперативном режиме с помощью выражений Alter Table или Alter Index языка DDL. SQL Server также позволяет оценить экономию места. Получаемая экономия места будет зависеть от распределения данных и схемы сжимаемого объекта.
На основании результатов тестов баз данных многих клиентов, можно предположить, что большинство клиентов смогут уменьшить размер базы данных на 50-64 процентов и зачительно увеличить производительность запросов, зависимых от ввода-вывода. Однако, оценка производительности запросов, свзанных с ЦП, посложнее и зависит от сложности запроса. В SQL Server нагрузка от распаковки возникает только при доступе к индексу или таблицам. Если относительная нагрузка на ЦП операторов сканирования невелика по сравнению с общей нагрузкой запроса на ЦП, как обычно бывает с хранилищами данных, влияние на использование ЦП не должно превышать 20-30 процентов.

Индексированные представления, выровненные по секциям
В SQL Server 2008 индексированные представления, выровенные по секциям, позволяют более эффективно создавать и управлять общими агрегатами в реляционном хранилище данных, а также использовать их в тех сценариях, в которых раньше это было неэффективно. Это повышает производительность запроса. В типичном случае, есть таблица фактов, секционированная по дате. Индексированные представления (или общие агрегаты) определяются на этой таблице, чтобы ускорить запросы. При переключении на новую секцию таблицы соответствующие секции индексированных представлений, выровненных по секциям, определенные на секционированной таблице, тоже переключаются, причем автоматически.
Это значительно лучше, чем в SQL Server 2005, где нужно было удалить все индексированные представления, определенные на секционированной таблице, прежде чем использовать операцию ALTER TABLE SWITCH, чтобы подключить или отключить секцию. Функция индексированных представлений, выровненных по секциям, дает в SQL Server 2008 преимущества индексированных представлений на больших секционированных таблицах без необходимости перестраивать агрегаты на всей секционированной таблице. К этим преимуществам относятся автоматическое поддержание агрегатов и сопоставление индексированного представления.

Укрупнение блокировок на уровне секции
SQL Server поддерживает секционирование по диапазону, позволяющее секционировать данные для простоты управления или группировать данные на основании схемы использования. Так, например, данные продаж можно секционировать по месяцам или кварталам. Можно сопоставить секцию с ее файловой группой, а файловую группу, в свою очередь, с группой файлов. Это дает два преимущества. Во-первых, можно создавать резервные копии и восстанавливать секцию как независимый элемент. Во-вторых, можно сопоставить файловую группу с быстрой или медленной подсистемой ввода-вывода, в зависимости от схемы использования или загрузки запросами.
Интересный момент – схема доступа к данным. Запросы и операции DML могут нуждаться в доступе или манипуляциях только с частью секций. Поэтому если вы, например, анализируете данные продаж за 2004 год, вам требуется доступ только к соответствующим секциям; в идеальном варианте, запросы, обращающиеся к данным в других секциях, не должны оказывать на это никакого влияния (не считая ресурсов системы). В SQL Server 2005 одновременный доступ к различным секциям может привести к блокировке таблицы, которая может затруднить доступ к другим секциям.
Чтобы уменьшить эти помехи, в SQL Server 2008 включен на уровне таблиц параметр, позволяющий контролировать укрупнение блокировок на уровне секции или таблицы. По умолчанию укрупнение блокировок включено на уровне таблиц, как и в SQL Server 2005. Однако, политику укрупнения блокировок для таблицы можно изменить. Например, можно установить такое укрупнение блокировок:
Alter table <mytable> set (LOCK_ESCALATION = AUTO)
Эта команда предписывает SQL Server выбрать подходящую для схемы таблицы гранулярность укрупнения блокировок. Если таблица не секционирована, укрупнение блокировок будет на уровне TABLE (таблицы). Если она секционирована, то гранулярность укрупнения блокировок будет на уровне секции. Этот параметр также используется в SQL Server как способ уменьшить вероятность гранулярности блокировки на уровне таблицы.

Заключение
Мы представили короткий обзор новых функций SQL Server 2008, которые помогут вам достичь большей производительности запросов поддержки решений в реляционных хранилищах данных. Но не забывайте, что, хотя высокая скорость отклика на запросы поддержки решений очень важна, есть и другие принципиальные условия, не описанные в этой статье.
К некоторым дополнительным функциям, имеющим отношение к реляционному хранению данных, относятся:
  • Поддержка синтаксиса MERGE в T-SQL для обновления, удаления и добавления (измерения) данных одним утверждением и циклом приема-передачи в базу данных.
  • Улучшенное ведение журнала ядра SQL Server, обеспечивающее большую эффективность ETL.
  • Наборы группирования, облегчающие создание сборных запросов поддержки принятия решений в T-SQL.
  • Сжатие резервных копий, уменьшающее нагрузку на ввод-вывод как полного, так и последовательного резервного копирования.
  • Управление ресурсами, позволяющее контролировать распределение системных ресурсов между рабочими нагрузками.
Мы советуем ознакомиться с более полной информацией о всех этих замечательных функциях на странице SQL Server в Интернете, по адресу microsoft.com/sql.
Благодарим Бориса Барышникова (Boris Baryshnikov), Прэма Мэру (Prem Mehra), Питера Заббака (Peter Zabback) и Шин Жанг (Shin Zhang) за технические консультации.

Sunil Agarwal -- старший руководитель программы в группе модуля хранилищ SQL Server корпорации Майкрософт. Он отвечает за параллельную обработку, индексы, tempdb, LOBS, обеспечение поддержки и пакетный импорт/экспорт.
Torsten Grabs -- ведущий руководитель программы базового модуля хранения в команде SQL Server корпорации Майкрософт. Он защитил диссертацию по системам баз данных и уже 10 лет работает с SQL Server.
Dr. Joachim Hammer -- руководитель программы в группе обработки запросов корпорации Майкрософт. Он специализируется на оптимизации запросов для приложений с большими хранилищами данных, а также на распределенных запросах, ETL и интеграции информации.


 SQL Server: Минимизация блокирования в SQL Server
SQL Server Чери Уоррен (Cheriй Warren)

Минимизация блокирования в SQL Server
Краткий обзор:
  • Причины укрупнения блокировок
  • Предотвращение появления ненужных блокировок
  • Оптимизация запросов
  • Наблюдение воздействия блокирования на производительность

Блокирование необходимо для поддержки текущих действий чтения и записи базы данных, но оно может отрицательно влиять не производительность системы, и иногда трудно обнаруживаемыми способами. В данной статье рассматривается оптимизация базы данных SQL Server 2005 и SQL Server 2008 для минимизации
блокирования, а также отслеживание состояния системы для лучшего понимания воздействия блокирования на производительность.

Блокирование и укрупнение
SQL Server® выбирает наиболее подходящую грануляцию блокировки на основе количества затрагиваемых записей и существующих в системе одновременных действий. По умолчанию SQL Server использует наименьшую возможную грануляцию блокировки, выбирая крупногранулированные блокировки только в случае возможности более эффективного использования системной памяти. SQL Server укрупняет блокировку, если это повышает общую производительность системы. Как показано на рис. 1, укрупнение происходит в случае, если количество блокировок в определенном просмотре превышает 5 000, или если память, используемая системой для блокировок, превышает доступный объем:
Figure 1 Условия возникновения укрупнения блокировок
Figure 1 Условия возникновения укрупнения блокировок
  • ядром СУБД используется 24 процента памяти не AWE при параметре блокировок – 0;
  • ядром СУБД используется 40 процентов памяти не AWE при параметре блокировок, отличном от 0.
Возникающая блокировка всегда является блокировкой таблицы.

Предотвращение появления ненужных блокировок
Блокирование может происходить с любой грануляцией, но ее воздействие увеличивается при возникновении укрупнения. Укрупнение блокировок может свидетельствовать о неэффективной архитектуре, коде или настройке приложения.
Соблюдение основ структуры базы данных (таких как нормализованная схема с узкими ключами и избегание использования массовых операций с данными в транзакционных системах) является важным для предотвращения блокировок. При несоблюдении этих принципов (например, при отделении системы отчетности от транзакционной системы или обработке потоков данных в нерабочее время) настройка системы будет затруднена.
Индексирование может быть ключевым фактором определения количества блокировок, необходимых для доступа к данным. Индекс может уменьшить количество записей, доступных для запроса, путем уменьшения количества внутренних просмотров, которые должны быть выполнены ядром СУБД. Например, при выборе одной строки таблицы в неиндексированном столбце все строки таблицы должны быть временно заблокированы до определения необходимой записи. Если этот столбец был индексирован, потребуется только одна блокировка.
Серверы SQL Server 2005 и SQL Server 2008 содержат динамические административные представления (sys.dm_db_missing_index_group_stats, sys.dm_db_missing_index_groups, sys.dm_db_missing_index_details), отображающие таблицы и столбцы, получающие преимущества от индексов, на основе статистики суммарного использования.
Проблемы производительности также могут быть связаны с фрагментацией в том отношении, что ядру СУБД может требоваться доступ к большему количеству страниц, чем обычно необходимо. Более того, неверная статистика может быть причиной выбора оптимизатором запросов менее эффективного плана.
Следует иметь в виду, что, хотя индексы убыстряют доступ к данным, они могут замедлять изменение данных, поскольку требуется не только изменение базовых данных, но и обновление индексов. Динамическое административное представление sys.dm_db_index_usage_stats показывает частоту использования индексов. Распространенным примером неэффективных индексов являются составные индексы, в которых один столбец индексируется отдельно и вместе. Поскольку SQL Server обращается к индексам слева направо, индекс используется, если самые левые столбцы полезны.
Таблицы секционирования могут оптимизировать систему (уменьшая воздействие блокировки) и поделить данные на отдельные физические объекты, обеспечивая возможность работы с ними по отдельности. Хотя секции по строкам – наиболее очевидный способ секционирования данных, также заслуживает внимание секционирование данных по горизонтали. Можно специально выбрать денормализацию путем разделения таблицы на отдельные таблицы с таким же числом строк и ключей, но различным числом столбцов, чтобы уменьшить возможность того, что отдельные процессы одновременно захотят получить монопольный доступ к одним и тем же данным.
Чем более разнообразны способы доступа приложения к определенной строке данных и чем больше столбцов могут быть включены в эту строку, тем более привлекательным является подход с секционированием столбцов. Иногда этот подход может быть выгоден для очереди приложения и таблиц состояния. В SQL Server 2008 добавлена возможность отключения укрупнений блокировок для отдельных секций (или таблиц, если для таблицы не включены секции).

Оптимизация запроса
Оптимизация запроса играет важную роль в улучшении производительности. Существует три возможных подхода.
Уменьшение транзакции Одним из наиболее важных способов уменьшения блокировок и увеличения общей производительности является обеспечение минимально возможного размера транзакций. Для уменьшения транзакции должны быть выполнены все операции обработки, не являющиеся критическими для целостности транзакции (например, поиск связанных данных, индексирование и чистка данных).
SQL рассматривает все инструкции как неявные транзакции. Если инструкция влияет на большое число строк, одна инструкция может составлять большую транзакцию, особенно при вовлечении большого количества столбцов или если столбцы содержат большой тип данных. Одна инструкция также может вызывать разбиения страницы при высоком коэффициенте заполнения или если инструкция UPDATE заполняет столбец более широким значением, чем выделенное. В таких случаях может быть полезным разделение транзакции на группы строк и их поочередная обработка до полного выполнения. Возможность использования пакетной обработки следует рассматривать только в том случае, если отдельная инструкция или группы инструкций могут быть поделены на пакеты меньшего размера, которые могут считаться полными элементами работы при сбое или успешном выполнении.
Последовательное выполнение транзакции Намеренное последовательное выполнение инструкций транзакции может уменьшить вероятность возникновения блокировки. Необходимо иметь в виду два принципа. Во-первых, доступ к объектам должен осуществляться в одинаковом порядке во всем коде SQL в системе. Несоблюдение порядка может привести к взаимоблокировкам, если конкурирующие процессы обращаются к данным в различном порядке, что приводит к возникновению системной ошибки для одного из процессов. Во-вторых, часто используемые или требующие больших затрат для доступа объекты должны располагаться в конце транзакции. SQL ожидает блокирования объектов до того, как они станут необходимы в транзакции. Задержка доступа к «горячим точкам» позволяет этим объектам удерживать блокировки меньший процент времени.
Использование подсказок блокировки Подсказки блокировки могут использоваться для на уровне сеанса или инструкции для определенной таблицы или представления. Типичным случаем использования подсказки уровня сеанса является пакетная обработка в хранилище данных, если известен процесс, который будет выполняться единственным в определенное время для этого набора данных. С помощью команды SET ISOLATION LEVEL READ UNCOMMITTED в начале хранимой процедуры сервер SQL Server не резервирует никакие блокировки чтения, таким образом уменьшая общие издержки блокировки и повышая производительность.
Типичным случаем использования подсказки уровня инструкции является ситуация известности о возможности безопасного возникновения «грязного» чтения (например, при чтении одной строки таблицы, которая никогда не понадобится остальным параллельным процессам) или неудачи остальных действий по настройке производительности (создание схемы, создание и сопровождение индекса и настройка запроса) и необходимости принудительного использования компилятором определенного вида подсказки.
Подсказки блокировки строк имеют смысл, если в результате наблюдения выяснено возникновение блокировок с большей гранулярностью, а запрос влияет на небольшое количество записей, поскольку это может уменьшить блокирование. Подсказки блокировок таблиц имеют смысл, если в результате наблюдения выяснено, что удерживаются (и не укрупняются) блокировки с меньшей гранулярностью, если запрос влияет практически на все записи в таблице, поскольку это может уменьшить системные ресурсы, необходимые для удержания блокировок. Имейте в виду, что указание подсказки блокировки не гарантирует укрупнение блокировки, если количество блокировок достигает порога для системной памяти. Однако это предотвращает все иные укрупнения.

Настройка конфигурации
Как показано на рис. 2, при настройке системы сервера SQL Server необходимо учитывать ряд факторов.
Figure 2 Определение сервером SQL Server объема памяти, который может использоваться для блокировки
Figure 2 Определение сервером SQL Server объема памяти, который может использоваться для блокировки
Память Блокировки всегда хранятся в памяти не AWE, поэтому увеличение объема памяти не AWE ведет к увеличению емкости системы для хранения блокировок.
При попытке увеличения емкости блокировок наилучшим вариантом является использование 64-разрядной архитектуры, поскольку 32-разрядная архитектура ограничена 4 ГБ памяти не AWE, тогда как 64-разрядная архитектура не имеет такого ограничения.
В 32-разрядных системах можно использовать дополнительный гигабайт памяти операционной системы для сервера SQL Server путем добавления параметра /3GB к файла Boot.ini.
Параметры конфигурации SQL Server С помощью процедуры sp_configure можно настроить различные параметры, влияющие на блокировку. Параметр блокировок определяет количество блокировок, которое может храниться в системе до возникновения ошибки. Значение этого параметра по умолчанию – 0, что означает, что сервер динамически регулирует количество зарезервированных блокировок с другими процессами, конкурирующими за доступ к памяти. SQL изначально резервирует 2 500 блокировок, а каждая блокировка занимает 96 байт памяти. Выгружаемая память не используется.
Параметры минимального и максимального объема памяти резервируют объем памяти, используемый сервером SQL Server, таким образом настраивая сервер на статическое использование памяти. Поскольку укрупнение блокировок относится к доступной памяти, резервирование памяти от конкурирующих процессов может положительно влиять на возможность возникновения укрупнений.
Параметры соединения По умолчанию для блокирующих блокировок истечение времени ожидания не происходит, но можно использовать параметр @@LOCK_TIMEOUT, вызывающий возникновение ошибки при превышении порога ожидания снятия блокировки.
Флаги трассировки Два флага трассировок используются специально для укрупнений блокировок. Один из них – флаг трассировки 1211, отключающий укрупнения блокировок. Если количество используемых блокировок превышает доступную память, выдается ошибка. Другой флаг трассировки – 1224, отключающий укрупнения блокировок для отдельных инструкций.

Наблюдение за системой
Дополнительные материалы
  • Inside Microsoft SQL Server 2005: The Storage Engine Кэйлин Дилани
  • Отслеживание блокировок в SQL Server 2005 и SQL Server 2000
  • Сценарий статистики производительности SQL Server 2005
  • Разрешение проблем блокировок, вызванных укрупнением блокировок в SQL Server
  • Укрупнение блокировок (ядро СУБД)

Воздействие блокировок на общую производительность системы может отслеживаться для блокировок путем опроса данных состояния через определенные промежутки времени (например, каждый чес) и записи статистики по удерживаемым блокировкам. Собираемая ключевая информация:
  • затрагиваемый объект, грануляция и тип блокировки;
  • длительность блокировки и блокирования;
  • выполняемая команда SQL (имя хранимой процедуры, инструкция SQL);
  • информация о цепочке блокировок, где применимо;
  • использование системной доступной емкости блокировок.
Можно выполнить сценарий, наподобие показанного на рис. 3, для сбора этой информации, записывая ее в таблицу с соответствующей временной меткой. Для дальнейшего анализа идентификатора ResourceId of блокируемых данных можно выполнить сценарий, наподобие показанного на рис. 4.
Figure 4 Learning more about blocked data (Close Figure 4)
DECLARE @SQL                           nvarchar(max)
      , @CallingResourceType           varchar(30)
      , @Objectname                    sysname
      , @DBName                        sysname
      , @resource_associated_entity_id int

-- TODO: Set the variables for the object you wish to look up

SET @SQL = N'
USE     ' + @DbName + N'
DECLARE @ObjectId int

SELECT  @ObjectId = CASE
                    WHEN @CallingResourceType = ''OBJECT''
                    THEN @resource_associated_entity_id
                    WHEN @CallingResourceType IN (''HOBT'', ''RID'', ''KEY'',''PAGE'')
                    THEN (SELECT  object_id
                          FROM    sys.partitions
                          WHERE   hobt_id = @resource_associated_entity_id)
                    WHEN @CallingResourceType = ''ALLOCATION_UNIT''
                    THEN (SELECT  CASE
                                     WHEN type IN (1, 3)
                                     THEN (SELECT  object_id
                                           FROM    sys.partitions
                                           WHERE   hobt_id = allocation_unit_id)
                                     WHEN type = 2
                                     THEN (SELECT  object_id
                                           FROM    sys.partitions
                                           WHERE   partition_id = allocation_unit_id)
                                     ELSE NULL
                                     END
                          FROM    sys.allocation_units
                          WHERE   allocation_unit_id = @resource_associated_entity_id)
                    ELSE NULL
                    END

SELECT  @ObjectName = OBJECT_NAME(@ObjectId)'

EXEC    dbo.sp_executeSQL
        @SQL
      , N'@CallingResourceType varchar(30)
      , @resource_associated_entity_id int
      , @ObjectName sysname OUTPUT'
      , @resource_associated_entity_id = @resource_associated_entity_id
      , @CallingResourceType = @CallingResourceType
      , @ObjectName = @ObjectName OUTPUT
Figure 3 Capturing locking stats (Close Figure 3)
SELECT  er.wait_time                      AS WaitMSQty
      , er.session_id                     AS CallingSpId
      , LEFT(nt_user_name, 30)            AS CallingUserName
      , LEFT(ces.program_name, 40)        AS CallingProgramName
      , er.blocking_session_id            AS BlockingSpId
      , DB_NAME(er.database_id)           AS DbName
      , CAST(csql.text AS varchar(255))   AS CallingSQL
      , clck.CallingResourceId
      , clck.CallingResourceType
      , clck.CallingRequestMode
      , CAST(bsql.text AS varchar(255))   AS BlockingSQL
      , blck.BlockingResourceType
      , blck.BlockingRequestMode
FROM    master.sys.dm_exec_requests er WITH (NOLOCK)
        JOIN master.sys.dm_exec_sessions ces WITH (NOLOCK)
          ON er.session_id = ces.session_id
        CROSS APPLY fn_get_sql (er.sql_handle) csql
        JOIN (
-- Retrieve lock information for calling process, return only one record to
-- report information at the session level
              SELECT  cl.request_session_id                 AS CallingSpId
                    , MIN(cl.resource_associated_entity_id) AS CallingResourceId
                    , MIN(LEFT(cl.resource_type, 30))       AS CallingResourceType
                    , MIN(LEFT(cl.request_mode, 30))        AS CallingRequestMode
-- (i.e. schema, update, etc.)
              FROM    master.sys.dm_tran_locks cl WITH (nolock)
              WHERE   cl.request_status = 'WAIT' -- Status of the lock request = waiting
              GROUP BY cl.request_session_id
              ) AS clck
           ON er.session_id = clck.CallingSpid
         JOIN (
              -- Retrieve lock information for blocking process
              -- Only one record will be returned (one possibility, for instance,
              -- is for multiple row locks to occur)
              SELECT  bl.request_session_id            AS BlockingSpId
                    , bl.resource_associated_entity_id AS BlockingResourceId
                    , MIN(LEFT(bl.resource_type, 30))  AS BlockingResourceType
                    , MIN(LEFT(bl.request_mode, 30))   AS BlockingRequestMode
              FROM    master.sys.dm_tran_locks bl WITH (nolock)
              GROUP BY bl.request_session_id
                    , bl.resource_associated_entity_id
              ) AS blck
           ON er.blocking_session_id = blck.BlockingSpId
          AND clck.CallingResourceId = blck.BlockingResourceId
        JOIN master.sys.dm_exec_connections ber WITH (NOLOCK)
          ON er.blocking_session_id = ber.session_id
        CROSS APPLY fn_get_sql (ber.most_recent_sql_handle) bsql
WHERE   ces.is_user_process = 1
        AND er.wait_time > 0
Также можно отслеживать укрупнения в системе с помощью приложения SQL Profiler (событие Lock:Escalation), динамического административного представления dm_db_index_operational_stats (index_lock_promotion_count) или регулярного опроса информации о блокировках системы. Необходимые сведения, собираемые при отслеживании укрупнений, включают сведения о том, гарантирует ли обработка укрупнение; если укрупнение не гарантируются, соответствующие хранимые процедуры могут указать исходную причину проблем производительности. Таблица с данными большого объема или частым одновременным использованием должна быть основным объектом оценки.
После сбора данных о блокировках, блокированиях и укрупнениях они могут быть проанализированы для определения общего времени блокировки и блокирования (количество возникновений, умноженное на длительность) для каждого объекта. Обычно это может вызвать последовательный цикл настройки производительности, в котором выполняется внесение, отслеживание, анализ и исправление изменений. Иногда требуется только простое изменение, такое как добавление индекса для значительного увеличения производительности и изменения области в системе с наиболее сильным негативным влиянием на производительность.
Дополнительные сведения об уменьшении блокировки в SQL Server см. на боковой панели «Дополнительные материалы». При удалении особого внимания обеспечению небольшого размера транзакций на этапах проектирования, создания кода и стабилизации можно минимизировать множество проблем блокировки. Подходящее оборудование также может значительно уменьшить вероятность нежелательных укрупнений. В любом случае, текущая оценка блокирования в системе может быстро определить источники проблем производительности.

Чери Уоррен (Cheriй Warren) – старший специалист по разработке отдела информационных технологий Майкрософт. В настоящий момент она отвечает за одну из самых больших транзакционных баз данных Microsoft. Чери также часто консультирует по вопросам исходных причин и разрешения проблем производительности, связанных с блокированием. Она специализируется на базах данных SQL Server уровня предприятия уже 10 лет.


 Microsoft Office: Интеграция баз данных Access и SharePoint
Microsoft Office Петер Серцо (Peter Serzo)

Интеграция баз данных Access и SharePoint
Краткий обзор:
  • Преимущества интеграции Access и SharePoint
  • Перенос данных Access в SharePoint
  • Расширение функциональности Access с помощью SharePoint

Когда я рассказываю конечным пользователям о Microsoft Office SharePoint Server (MOSS) 2007, я всегда прошу их показать используемые ими инструменты и как именно они их используют. Несомненно, кто-нибудь в
организации использует Microsoft® Office AccessTM для решения важных задач бизнеса. Программа Access до сих пор является ценным инструментом и важным активом для множества компаний.
MOSS 2007 позволяет использовать приложения, построенные на основе Access, и интегрировать их с SharePoint® для создания новых решений с более широкими возможностями. В данной статье рассматривается интеграция MOSS с Access и настройка этих двух продуктов конечным пользователем для создания решения.
Базовая технология, предоставляемая MOSS программе Access, включает рабочий процесс, общий репозиторий (сервер SQL Server®) и веб-интерфейс (обозреватель). Функции SharePoint включают управление документами, рабочие области и возможность настройки пользовательских списков для использования встроенных рабочих процессов и стандартных веб-частей, от рекламных акций до создания списка контактов или проблем или управления созданными пользователем формами. Более того, простота использования знакомых технологий Office усиливает у конечных пользователей ощущение увеличения возможностей. Как вы увидите, MOSS не ставит под угрозу существующие решения. Напротив, MOSS увеличивает эффективность, поскольку не требуется переписывать приложения, что позволяет конечным пользователям сосредоточиться на деловых вопросах, а не заниматься решением технических трудностей.
Преимущества получают не только конечные пользователи. ИТ-подразделения и администраторы стремятся помочь конечным пользователям поддерживать все пользовательские базы данных, количество которых в компании быстро увеличивается. Многие даже не знают, что Access используется для решения критически важных задач бизнеса, пока не столкнуться с определенными проблемами, такими как ограничения дискового пространства, многопользовательский доступ, безопасность, восстановление поврежденных баз данных, доступ к веб-ресурсам, несовместимые версии Access и развертывание изменений на нескольких рабочих станциях. У SharePoint есть ответы на все эти вопросы.
Хотя программа Access и имеет ограничения, она проста в работе и предоставляет богатые возможности, особенно для пользователей, не занимающихся написанием кода. Одна программа обеспечивает настраиваемые реляционные таблицы, простые запросы (и сложные), интерфейсный создатель форм с функцией перетаскивания, отчеты на основе данных и возможность настройки нескольких пользователей. Создание решений на основе Access и SharePoint имеет смысл как для организаций, стремящихся к объединению ресурсов и возможностей, так и для отдельных пользователей, пользующихся преимуществами приложений и навыков, накопленных в течение многих лет.

Начало работы
Access 2007 предоставляет несколько путей интеграции с MOSS 2007. Как показано на рис. 1, они включают: импорт данных из списка SharePoint, публикацию данных на узле SharePoint, создание списка SharePoint, использование данных SharePoint в качестве внешнего источника, перенос базы данных Access на новый или существующий узел SharePoint и автономный доступ к данным SharePoint.
Figure 1 Access 2007 предоставляет несколько простых точек входа для интеграции с SharePoint.
Figure 1 Access 2007 предоставляет несколько простых точек входа для интеграции с SharePoint.
Лучше всего начать с создания списка SharePoint в таблице Access. Список SharePoint очень сходен с таблицей Access. Он сохраняется в базе данных содержимого SQL, содержит определенные атрибуты полей и поддерживает поиск.
При создании списка SharePoint необходимо иметь в виду следующие ограничения: для обеспечения оптимальной производительности рекомендуется одновременно просматривать не более 2 000 элементов; SharePoint не обеспечивает целостность данных; объекты OLE не экспортируются в SharePoint; проверка данных ограничена.
Для создания списка SharePoint в таблице Access прежде всего выберите вкладку «Внешние данные», затем нажмите ставшую доступной кнопку «Список SharePoint» в группе «Экспорт». После этого необходимо указать узел SharePoint, на котором будет размещен этот список, заполнив диалоговое окно «Экспорт – список SharePoint», показанное на рис. 2, или щелкнув таблицу правой кнопкой мыши и выбрав «Экспорт данных в список SharePoint». Имейте в виду, что если таблица была дочерней, все родительские таблицы также будут экспортированы.
Figure 2 Данные Access будут экспортированы на указанный узел SharePoint
Figure 2 Данные Access будут экспортированы на указанный узел SharePoint
По завершении процессе экспорта можно сохранить выполненные действия по экспорту, чтобы не пришлось повторять их в дальнейшем. В этот момент можно перейти к узлу SharePoint и просмотреть отправленные данные. Эта простая операция удобна для перемещения данных в SharePoint и предоставления пользователям доступа к ним. Преимущества состоят в повышении безопасности, поскольку данные теперь сохраняются в базе данных SQL Server, и упрощении доступа, поскольку информация доступна через обозреватель.
Однако другая операция, установка связи списков в SharePoint как таблиц в Access, предоставляет гораздо более эффективный способ интеграции Access и SharePoint. Для этого щелкните вкладку «Внешние данные» в программе Access и выберите «Список SharePoint» в группе «Импорт». Появляется диалоговое окно, показанное на рис. 3.
Figure 3 Установка связи Access с SharePoint
Figure 3 Установка связи Access с SharePoint
Выберите узел со списком SharePoint, который будет использоваться в качестве присоединенного источника данных. По завершении этой операции список будет показан в программе Access как связанная таблица, а в правом нижнем углу приложения появится индикатор «В сети с SharePoint». Теперь установлена двухсторонняя синхронизация между Access и SharePoint с поддержкой выполнения операций добавления, изменения и удаления из обеих программ. Как вы увидите, для таблицы можно написать код для предоставления дополнительных возможностей.
При установлении связи со списками SharePoint в Access можно обнаружить, что по умолчанию также импортируется другая таблица, список сведений о пользователях Windows® SharePoint Services (WSS), с которой также устанавливается связь. Кроме того, создается таблица неполадок с именем «Перейти к неполадкам узла SharePoint». В этой таблице можно просмотреть конфликты с данными.
Дополнительные сведения о переносе данных и обработке типов данных во время преобразования см. в статье «Преобразование программой Access типов данных Access и SharePoint» (office.microsoft.com/en-us/access/HP010477131033.aspx) и раздел «Ограничения переноса» в статье «Перенос таблиц базы данных Access Database на узел SharePoint и установление связи с ними» (office.microsoft.com/en-us/access/HA101314681033.aspx).
Интеграция таблиц и списков третьим способом выполняется из программы SharePoint. Выберите список, затем на вкладке «Действия» щелкните «Открыть с помощью Access». Появляется диалоговое окно с запросом на ввод имени базы данных (новой или существующей). После ввода имени базы данных можно просто установить связь с данными на узле SharePoint или экспортировать данные непосредственно в (см. рис. 4).
Figure 4 Обеспечение доступа к данным SharePoint из Access
Figure 4 Обеспечение доступа к данным SharePoint из Access

Перенос базы данных в SharePoint
До сих пор мы рассматривали импорт списка SharePoint как связанной таблицы и экспорт таблиц в SharePoint как списков, но что если требуется доступ ко всей базе данных? Критически важные приложения множества организаций выполняются в Access и должны иметь возможность удаленного доступа, чтобы отдельные пользователи могли выполнять отчеты и запросы, а также вводить данные. В подобных случаях переписывание приложения не всегда осуществимо с экономической точки зрения или вследствие отсутствия необходимых навыков. Эта проблема решается в SharePoint и Access с помощью возможности «Move to SharePoint» (Перенос на узел SharePoint), которая доступна на вкладке «Списки SharePoint» программы Access. Она сходна с возможностью переноса на SQL Server с помощью мастера преобразования в формат SQL Server, который появился еще в Access 97.
Преимущества переноса всей базы данных Access на узел SharePoint заключаются в том, что все таблицы преобразуются в списки SharePoint; выполняется резервное копирование базы данных Access; списки автоматически становятся связанными таблицами в Access; возможен перенос всей базы данных, а не только таблиц; база данных работает так же, как и до переноса.
При нажатии кнопки Move to SharePoint появляется диалоговое окно, показанное на рис. 5. После указания узла необходимо решить, должна ли сохраняться база данных. При сохранении вся база данных будет сохранена в выбранной библиотеке документов. Это означает, что база данных целиком (включая формы, отчеты, запросы и макросы) сохраняется на узле SharePoint, и таким образом становится недоступной на сервере. Если пользователю необходим доступ к базе данных, он просто переходит к библиотеке, в которой она содержится, и щелкает ее, после чего база данных будет автоматически развернута на рабочей станции пользователя.
Figure 5 Укажите узел SharePoint, на который необходимо перенести базу данных
Figure 5 Укажите узел SharePoint, на который необходимо перенести базу данных
При переносе всей базы данных под лентой появляется сообщение «Публикация изменений». Это обеспечивает синхронизацию локальных изменений структуры и данных с копией на сервере. Если эта возможность не выбрана, только таблицы будут преобразованы в списки и связаны с Access. В этом случае база данных целиком не будет доступна сообществу пользователей, также не будет создаваться ее резервная копия как объекта в SharePoint.
После выбора одной из этих возможностей база данных вместе с соответствующими сведениями будет доступна через выбранный узел SharePoint. Снова автоматически создается таблица с именем «Перейти к неполадкам узла SharePoint». В ней регистрируются все конфликты, связанные с переносом. При загрузке таблицы на узел SharePoint можно просмотреть все возникшие проблемы программы Access.

Представления, формы и отчеты
После переноса базы данных необходимо проверить ее функциональность. Перед началом проверки убедитесь, что отображается индикатор «В сети с SharePoint». Имейте в виду, что запросы Access становятся представлениями SharePoint; представления SharePoint очень сходы с запросами Access.
При переносе всей базы данных существующие запросы копируются в SharePoint как представления. Пользователи Access понимают, что написание запросов позволяет просматривать наборы данных. Изучение аналогичных действий в представлении SharePoint помогает понять размещение данных в списке SharePoint.
Одним из наиболее полезных представлений, которые можно создать, является представление Access. Для его создания перейдите к списку, в котором создается представление, выберите «Представления», затем «Создать представление». Появляется кнопка «Представление Access», позволяющая создавать формы и отчеты на основе списка. При нажатии этой кнопки и выборе базы данных Access появляется диалоговое окно, подобное показанному на рис. 6. Как вы видите, теперь необходимо определить формат (тип формы, сводная диаграмма, сводная таблица или отчет) и после завершения процесса в базе данных Access появиться связанная формат или отчет.
Figure 6 Создание представления Access
Figure 6 Создание представления Access

Автономный доступ
В реальном мире расширение рамок действия критически важных приложений означает получение прибыли от инвестиций. Одним из способов расширения сферы действия интегрированного приложения Access/SharePoint является осознание того, что для использования приложения не требуется подключение к SharePoint. Для обеспечения подобной гибкости в Access 2007 появилась возможность автономной работы. Данные кэшируются в локальной копии базы данных, пока она не будет подключена к серверу. Для сохранения базы данных для автономной работы нажмите кнопку «Автономный режим» в группе «Внешние данные|Списки SharePoint» ленты.
При готовности к повторному подключению к SharePoint можно выбрать «Оперативный режим» или «Синхронизация». При выборе любого варианта выполняется передача данных и отображаются конфликты для просмотра; однако при синхронизации данные передаются, но база данных остается в автономном режиме.
Необходимо обратить внимание еще на один элемент в группе «Списки SharePoint», «Отменить изменения», который имеет два параметра. Первый отменяет все изменения, но не обновляет данные SharePoint в Access. Второй параметр отменяет все изменения и обновляет данные SharePoint (связанные списки).

Шаблоны Access
В состав Access 2007 входит несколько готовых шаблонов, позволяющих пользователям быстро создавать бизнес-решения; для использования шаблонов необходимо нажать кнопку «Списки SharePoint» на вкладке «Создать» в группе «Таблицы» (см. рис. 7). При выборе одного из шаблонов автоматически определяется схема для таблицы, связанной с SharePoint. В настоящее время поддерживаются только контакты, задачи, вопросы и мероприятия. Это означает, что при экспорте таблицы с информацией одного из этих типов данные будут считаться соответствующим типом содержимого WSS (например, вопросы на вопросы).
Figure 7 Выбор типа списка
Figure 7 Выбор типа списка
Также можно создавать пользовательские шаблоны для использования со списками SharePoint или шаблоны узла SharePoint с базами данных Access 2007 с самостоятельным связыванием. Для этого необходимы расширения разработчика Access 2007 и настройка WSSTemplateID таблицы. Это свойство отслеживает таблицы с таким же шаблоном списка SharePoint.

Access и метаданные
Предприятия с устоявшимся использованием приложений Access могут не всегда хотеть или быть готовы к переносу всех этих приложений в SharePoint. В таких случаях может иметь смысл написать код в Access для обновления SharePoint. С помощью этого кода можно совместить приложения SharePoint и Access.
Простым примером является база данных Northwind Trader, в которой сохраняются данные о продуктах, поставщиках и заказах клиентов. Обычно каждый продукт имеет соответствующую предоставленную поставщиком таблицу продукта в формате PDF. В базе данных Access отслеживается вся информация в таблице продукта, такая как географическое местоположение, номер продукта, история исправлений и код подразделения компании. Эти данные должны быть доступными для поставщиков через экстрасеть SharePoint.
Узел SharePoint настроен, а все документы перенесены в связанную библиотеку документов, но поля метаданных пустые (см. рис. 8), поскольку данные отслеживаются в Access (а пользователь, осуществляющий наблюдение за ними, хорошо знаком с программой Access и не стремиться поменять что-либо).
Figure 8 Открытый в SharePoint документ Northwind с отсутствующими метаданными
Figure 8 Открытый в SharePoint документ Northwind с отсутствующими метаданными
К счастью, как показано на рис. 9, можно добавить код Visual Basic® for Applications (VBA) для обновления метаданных через приложение Access. Не требуется переписывать приложение. Сотрудник продолжает использовать удобное средство, расширенное для работы в Интернете, а поставщики имеют доступ к экстрасети на основе полномочий (они видят только те данные, которые они должны видеть); отсутствуют какие-либо проблемы параллельной работы или размера базы данных.
Figure 9 Обновление метаданных с помощью кода
Figure 9 Обновление метаданных с помощью кода

Встроенная безопасность
Одним из самых существенных преимуществ переноса приложений Access в SharePoint является возможность использования модели безопасности SharePoint со встроенной проверкой подлинности Active Directory®. Это позволяет больше не беспокоиться о реализации безопасности в приложениях Access, поскольку можно создавать схемы и таблицы и добавлять пользователей. Списки SharePoint позволяют использовать фильтрацию по ролям безопасности, обеспечивающую доступность для пользователей только разрешенных для них данных; это является характерной особенностью SharePoint. Кроме того, при наличии компонентов базы данных, которые не требуется переносить в SharePoint, их не нужно перемещать.
SharePoint предоставляет детализированную модель безопасности и модель безопасности на основе ролей. При решении вопроса о перемещении базы данных до выполнения миграции необходимо спроектировать узел и модель безопасности. Это упрощает настройку и проверку полномочий. Кроме того, это уменьшает возможные проблемы переноса и увеличивает производительность базы данных Access.

Целостность данных
Я допустил бы небрежность, если не рассмотрел хотя бы понятие целостности данных. Фактически, SharePoint не поддерживает целостность данных, в отличие от Access. Множество установок на определенном уровне нормализованы. Это необходимо учитывать для обеспечения работы критически важных баз данных Access. К счастью, существует несколько обходных путей, которые можно использовать для улучшения существующей системы.
Как я отметил ранее, если при переносе базы данных в SharePoint перенесены дочерние таблицы, также перемещаются и родительные таблицы. Кроме того, ели SharePoint распознает, что выбранное поле основано на другой таблице, используются поля подстановки. Например, предположим, что выбрано клиент и заказ размещен в базе данных Northwind Traders. Если таблицы перемещены в SharePoint, поле клиента будет подстановочным в списке Order (Заказ).
Как насчет каскадных обновлений/удалений и более сложных операций? Именно здесь следует оценивать SharePoint и соответствующие рабочие процесса в качестве возможного решения. Возвращаясь к базе данных Northwind Traders, предположим, что клиент отменяет существующий заказ, что вызывает несколько последующих действий: возврат прежнего состояния складских запасов, уведомление поставщиков, выполнение необходимой работы с клиентом прикрепленным к заказу сотрудником, отмена доставки и обновление отчетности. Задействовано много перемещаемых частей и многое должно быть согласовано.
С помощью SharePoint Designer можно создать в SharePoint рабочий процесс для выполнения всех указанных выше действий после изменения состояния заказа. 22 стандартных рабочих процесса могут быть скомбинированы в сотни действий. SharePoint Designer – великолепное средство для фирменной настройки вашего узла и создания рабочих процессов.
И, что лучше всего, при использовании SharePoint Designer для создания рабочих процессов необходимы навыки, знакомые пользователям, которые знают, как «программировать» для Access. Это означает, что пользователи, создающие приложения Access, могут перенести и расширить свои знания на область создания рабочего процесса без значительных усилий. При использовании SharePoint Designer для работы с рабочими процессами не требуется написания кода, а развертывание этих рабочих процессов осуществляется очень просто.

Петер Серцо (Peter Serzo) - главный инженер в компании CDW Berbee. Он занимается разработкой решений SharePoint Enterprise для компаний по всему миру.


 Письмо редактора: Старым и новым друзьям
Письмо редактора
Старым и новым друзьям

Этот месяц нам придется начать с противоречивыми чувствами. Увы, пришло время попрощаться с Джозефом Дэвисом, кабельщиком, который в этом выпуске TechNet Magazine завершает серию своих статей. Нам очень посчастливилось иметь такого эксперта, как Джозеф, просвещавшего нас по многочисленным вопросам сетей Windows. К сожалению, недавно Джозеф перешел на другую должность в корпорации Майкрософт и поэтому вынужден был оставить свою ежемесячную рубрику. Все мы, сотрудники журнала TechNet Magazine, благодарим его за огромный вклад, который он внес в течение многих лет, и хотим пожелать ему всего самого наилучшего в новых начинаниях.
Как нам ни прискорбно завершать публикацию статей в рубрике «Кабельщик», мы не должны останавливаться. Поэтому в следующем выпуске будет представлена новая рубрика под названием «SharePoint изнутри». За последний год мы получили бесчисленное множество вопросов по SharePoint и просьб о более подробном освещении этой темы. А поскольку SharePoint – это замечательная быстро развивающаяся технология, нам кажется, что эта тема как никакая другая заслуживает ежемесячной рубрики. Начнет ее Пав Черны, который вернется к основам и представит обзор архитектуры инфраструктуры SharePoint. В течение следующих месяцев мы поговорим о безопасности, доступности, производительности, устранении неполадок и многом другом. Если вы хотите, чтобы были рассмотрены какие-либо конкретные вопросы SharePoint, сообщите нам о них! Электронная почта: tnmag@microsoft.com.
Мы также хотим выразить огромную благодарность двум старшим редакторам, Терренсу Дорси и Нэнси Мичелл. Терри и Нэнси были с нами с самого начала и использовали свои обширные способности и опыт для того, чтобы журнал TechNet Magazine стал тем, чем он сегодня является. Однако начиная с этого выпуска Терри и Нэнси полностью переключат свое внимание на наше родственное издание, журнал MSDN Magazine. В свою очередь два наших других невероятно талантливых старших редактора, Мэтью Грэйвен и Шэрон Тердеман, попрощаются с журналом MSDN Magazine, чтобы полностью сосредоточиться на TechNet Magazine. К счастью, Терри и Нэнси не уйдут далеко, и все наши действия по-прежнему будут полагаться на их опыт и мудрость, так как журнал TechNet Magazine продолжает расти.
Закончив со всеми организационными новостями, не буду больше мешать чтению. Этот номер главным образом посвящен предстоящему выпуску сервера SQL Server 2008, в нем обсуждается множество новых функций, которые помогут вам в хранении, защите, управлении и использовании данных, которые, учитывая их постоянно увеличивающийся объем и расширяющееся применение, вероятно, являются вашим самым важным бизнес-активом. Джошуа Хоффман


 Письма в редакцию: Мнения читателей
Письма в редакцию
Мнения читателей

Cильные и слабые узлы
В сентябре 2007 г. в статье рубрики «Кабельщик» (technetmagazine.com/issues/ 2007/09/CableGuy), «Сильые и слабые модели узлов» была упомянута возможность включать или отключать использование слабых узлов, но не было сказано о том, как это можно сделать. Заключается дело в обычном включении или отключении межсетевого экрана или установке параметра реестра? Существует ли связанным с этим параметр рееста?
Кроме того, для настройки локального доступа требуется следующая информация: IP-адрес и маска, связанная с IP . Почему корпорация Майкрософт думает о конфигурации, которая не содержит настраиваемого как недействительный параметра шлюза?
—Милт Б.
Можно настроить поведение сильного или слабоо узла в Windows Vista® и Windows Server® 2008 с помощью команд, перечисленных на рисунке (впервые опубликованы в выпуске от сентября 2007 г.). Соответствующих записей реестра не существует. Поведение слабых или сильных узлов нельзя настроить в Windows® XP и Windows Server 2003. IPv4 –– только слабый узел; IPv6 –– только сильный узел.
Что же касается вашего второго вопроса, то, насколько нам известно, конфигурация IPv4 и IPv6 в интерфейсе не требует конфигурации шлюза или маршрутизатора по умолчанию, будь то интерфейс пользователя или командная строка.


 Инструментарий: Новые продукты для специалистов по информационным технологиям
Инструментарий
Новые продукты для специалистов по информационным технологиям
Грег Стин (Greg Steen)

Управление несколькими мониторами
UltraMon
realtimesoft.com
Цены на ЖК-панели постоянно снижаются, и теперь у многих системных администраторов есть два монитора (а то и больше) на рабочей станции: они позволяют следить за различными панелями мониторинга. (Если у вас только один монитор, настоятельно рекомендуем задуматься о приобретении второго: это здорово упрощает жизнь.) Но чем больше у вас мониторов, тем больше приходится работать мышью, и тут производительность резко падает. Неплохим решением этой проблемы может стать удобная программа для управления мониторами, позволяющая использовать сочетания клавиш. Одно из таких средств — программа UltraMon, разработанная Realtime Soft. Она поддерживает все версии Windows от Windows® 98 до Windows Vista® включительно, как 32-разрядные, так и 64-разрядные.
При первом запуске программы UltraMon обращают на себя внимание два маленьких значка, которые появляются в углу каждого окна приложения. Первый значок позволяет развернуть окно приложения на всех мониторах, второй — перенести окно приложения на другой монитор. На экране каждого монитора появляется панель инструментов, содержащая список приложений, активных на данном мониторе. Для того чтобы развернуть окно приложения, не приходится возвращаться к основному монитору. Более того, вы всегда точно знаете, где именно появится окно приложения, когда вы его свернете или развернете.
Для каждого ярлыка приложения создается новая вкладка UltraMon, в которой можно указать, на каком мониторе и в каком месте должно запускаться приложение. Например, можно настроить систему так, чтобы Microsoft® Outlook® всегда открывался в левом окне, а Internet Explorer® — в правом. Специалисты по ИТ очень часто подключаются к рабочей станции удаленно, например с переносного компьютера или из дома. В таком случае нужно принимать во внимание, что, возможно, придется несколько изменить настройки компьютера и разрешение экрана.
К счастью, в средстве UltraMon имеются профили отображения, позволяющие быстро поменять настройки мониторов. Это здорово упрощает работу, если кроме вас компьютером пользуется кто-то еще и вам нужно настраивать мониторы по-разному — в зависимости от выполняемых операций и личных предпочтений.
В Windows 2000 и Windows XP можно также включить функцию «зеркального отображения». Ее удобно использовать при проведении презентаций: основной монитор имеет большее разрешение, чем монитор, который видят слушатели, но при этом изображения на экранах совпадают. Тем, кто еще не перешел на Windows Vista, предлагается возможность растягивать изображение на несколько мониторов (в Windows Vista она имеется по умолчанию).
Дополнительные функции — ярлык для окна настройки экрана, возможность быстро настраивать и менять основной экран, переключаться между разными профилями отображения — доступны через значок UltraMon в панели задач. Здесь же можно открыть окно параметров средства UltraMon и настроить панель задач, задать сочетания клавиш для переключения между окнами, перевести указатель мыши в нужную область.

Цена: от 39,95 долларов США за одну лицензию.
The options window in UltraMon lets you set up hotkeys and manage your Smart Taskbar
The options window in UltraMon lets you set up hotkeys and manage your Smart Taskbar

Обзор книги
Microsoft SQL Server 2005 Analysis Services
informit.com
Иметь большой объем данных о базе клиентов — одно дело, понимать их и уметь использовать — совсем другое. Для создания всех необходимых представлений и проекций данных требуется динамическое, многофункциональное средство бизнес-аналитики. Частично задачи интерактивного анализа и обработки (OLAP) решают службы аналитики SQL Server® 2005. Книга «Microsoft SQL Server 2005 Analysis Services» посвящена принципам работы с ними.
Если вы планируете развернуть новое средство интеллектуального анализа данных, обновить Analysis Services 2000 до версии службы аналитики 2005, даже если вам просто интересно, чем подобные программы могут быть полезны для вас и вашей организации, то книга, написанная Паем Бейтманом (Py Bateman), Александром Бергером (Alexander Berger), Ириной Горбач (Irina Gorbach) и Эдвардом Меломедом (Edward Melomed) — это то, что вам нужно. В ней вы не найдете пространственных рассуждений о теоретических подходах к бизнес-анализу. Книга полностью посвящена практическому использованию, развертыванию и управлению службами Analysis Services, а также разработке средств для них. Многие процедуры рассматриваются на примере базы данных Food Mart 2005, которая прилагается к программному обеспечению. Это позволяет создать собственную тестовую среду и сразу перейти к практике.
Во вступительной части книги рассказывается о том, какие новые возможности появились в версии 2005. Упоминается архитектура типа «клиент-сервер» и XMLA, модель UDM, а также улучшения, коснувшиеся масштабируемости новой версии программы. Здесь же рассказывается о том, что представляет собой база данных Food Mart, и приводятся основные сведения о многомерных базах данных. Затем авторы переходят к созданию моделей данных, языку DDL, атрибутам и иерархиям размерностей, кубам и многомерному анализу. Здесь же приводится краткое введение в проектирование и разработку рабочего пространства служб 2005 Analysis Services в Business Intelligence Development Studio.
Ознакомившись с основными понятиями проектирования, авторы переходят к работе с данными при помощи многомерных выражений (MDX). Они рассматривают саму процедуру отправки запроса с использованием MDX, а также знакомят с особенностями использования функций, членов и свойств ячеек в MDX, приемами работы с пустыми наборами и значениями null, функциями Subselects и Subcubes. Они также объясняют, как создать и использовать вычисления на основе кубов и дополнять запросы хранимыми процедурами. Затем авторы приводят информацию о ключевых показателях производительности (KPI), сквозной детализации и системах показателей — все это позволяет получить четкое представление о различных аспектах бизнеса: о развитии, показателях, целевых значениях.
Следующая часть книги посвящена процедурам извлечения, преобразования и загрузки данных (ETL). Здесь рассказывается о том, как оптимизировать процесс сбора данных и применять упреждающее кэширование для повышения производительности. В этом разделе читателю также предлагается поработать с физической моделью данных (кубами и размерностями) и увидеть, как они обрабатываются в 2005 Analysis Services. Кроме того, здесь вы найдете информацию о том, как масштабировать развертывание в зависимости от потребностей бизнеса, корректировать балансировку загрузки сети, управлять фермами OLAP, связанными группами мер и размерностей, удаленной обработкой разделов.
Затем авторы переходят собственно к выполнению запросов, разъясняя операции, лежащие в их основе. Эти знания нужны для корректировки производительность приложения. Здесь рассказывается о том, как получить доступ к данным с позиции клиента, и рассматриваются различные варианты: XMLA, ADOMD.net, объекты AMO. На этом этапе читателю придется освоить Visual Studio и среды разработки Business Intelligence (IDE), чтобы создать собственное приложение для хранилища данных.
В последнем разделе книги затрагиваются вопросы управления установкой служб аналитики с применением средств отслеживания, бортовых регистраторов и профайлера SQL Server для наблюдения за производительностью и работоспособностью системы. Кроме того, авторы подробно рассматривают различные варианты резервного копирования и восстановления системы, рассказывают об использовании команды DDL для резервного копирования базы данных, автоматизации путем применения агента SQL Server или служб интеграции SQL Server (SSIS), описывают приемы восстановления утраченных и поврежденных данных. Данное руководство по службам аналитики SQL Server 2005 отличается подробностью и широтой охваченных тем.

Цена: 59,99 долларов США.

Диагностика проблем, связанных с базами данных
ApexSQL Audit
apexsql.com/sql_tools_audit.asp
Как вам, возможно, известно, первый шаг к решению проблемы или обнаружению поломки — сбор связанной с ней информации. Те, кто работает в службе поддержки пользователей, нередко сталкиваются с жалобами вроде «пропали все данные из системы». Существует средство, помогающее быстро обнаружить неполадки в работе баз данных SQL Server. Это ApexSQL Audit, разработанное компанией ApexSQL. Средство поддерживает версии SQL Server от SQL Server 7.0 до SQL Server 2005 включительно.
Как можно догадаться по его названию, это средство отслеживает активность выбранных баз данных и позволяет создавать отчеты по журналу аудита. Записи в журнале создаются при помощи триггеров SQL и хранятся в автоматически создаваемой схеме. Результаты аудита можно хранить либо в той же базе данных, в которой хранятся проверяемые данные, либо в отдельной базе данных.
Установка (и удаление) схемы аудита (или архитектуры, как она называется в программе) выполняется через графический интерфейс пользователя. Настраивается план аудита достаточно просто: вы выбираете базу данных, выбираете таблицы и поля, которые нужно отслеживать, и нажимаете кнопку, которая создает соответствующие триггеры.
Приложение позволяет изменять шаблоны триггеров, существующие в проекте. Особенно удобно то, что в редакторе шаблонов присутствуют функции, аналогичные функциям IntelliSense®: и те, и другие можно настроить, указав момент срабатывания триггера и тип сохраняемой информации. Еще одна полезная возможность — создание ссылок на таблицы поиска: информация становится содержательной и понятной, переставая быть просто набором идентификаторов. Для сопоставления столбцов можно сопоставить имена наблюдаемых полей именам полей аудита.
В процессе проверки пользовательский интерфейс позволяет просмостреть триггеры, используемые в данный момент, и можно одним щелчком мыши включить или отключить их. Табличное представление, имеющееся в программе, позволяет определить, какая доля информации охвачена.
Нередко результаты аудита оказываются довольно громоздкими и приходится создавать какой-то план управления ими, включающий процедуры архивации и усечения баз данных аудита. В программе ApexSQL Audit имеется средство управления данными, которое позволяет быстро удалить всю ненужную информацию на основании критериев (или всю информацию вообще), а также создать расписание удаления определенной информации.
Запланированные задания автоматически представляются в виде пакетов DTS. Планирование происходит черех агент SQL. Разумеется, нужно не только собрать информацию, но и уметь ею воспользоваться. Здесь на помощь приходит компонент создания отчетов, предусмотренный в программе ApexSQL. Он позволяет создавать фильтрованные представления отдельных типов данных, а также обобщенные представления на основании результатов аудита. Созданный отчет можно распечатать или экспортировать в формат HTML, Microsoft Excel, в текстовый файл.

Цена: от 599 долларов США.
The look-up tables in ApexSQL Audit provide extensive audit information
The look-up tables in ApexSQL Audit provide extensive audit information

Автоматизация напоминаний об истечении срока действия пароля
Password Reminder PRO v1.4
sysoptools.com/password-reminder-pro.html
Вам приходилось сталкиваться с тем, что внедрение политики ограничения сроков действия паролей увеличивает число обращений в службу технической поддержки? В таком случае вам стоит обратить внимание на программу Password Reminder PRO, разработанную специалистами SysOp Tools. Это незамысловатое средство, которое интегрируется в Active Directory® и предупреждает пользователя о том, что срок действия учетной записи или пароля подходит к концу.
Средство позволяет настроить три разных оповещения на основе разных текстовых шаблонов или шаблоной в формате HTML. Оповещения отправляются по электронной почте. Также можно состыковать максимальный срок действия пароля со сроками, указанными в конфигурации Active Directory, и выбрать время отправки оповещений (установить его так, чтобы оно не совпадало с часами максимальной загрузки). Работу средства можно проверить в тестовом режиме: он не мешает работать конечным пользователям и в то же время позволяет убедиться в том, что все настроено правильно.
В программе есть консоль отчетов, где можно увидеть таблицу с различными классами пользователей: здесь перечислены учетные записи, срок действия которых подходит к концу, неактивные пользователи, новые учетные записи, отключенные учетные записи и т. д. Данные из консоли отчетов можно экспортировать в файл XLS. Для контроля отправки электронной почты программа Password Reminder PRO ежедневно составляет отчет о том, какие напоминания каким пользователям были отправлены.

Цена: от 249 долларов США за лицензию на 100 пользователей.
Password Reminder PRO previews configurations before deployment
Password Reminder PRO previews configurations before deployment

Дистанционный поиск и устранение неполадок
UltraVnc SC
uvnc.com/pchelpware/sc
Обычно самый простой способ исправить неполадку или научить чему-то пользователя — подойти к компьютеру и все сделать лично. Но сегодня, когда офисы компаний могут располагаться довольно далеко друг от друга, это не всегда возможно. Средство подключения к удаленному рабочему столу и удаленный помощник, встроенные в Windows, позволяют получить доступ к некоторым компьютерам организации. Для расширения зоны охвата можно попробовать бесплатное средство UltraVNC SC от авторов проекта UltraVNC.
Как и его предыдущий собрат, средство UltraVNC SC позволяет получить доступ к удаленному компьютеру и управлять им. Разница в том, что новая версия представляет собой миниатюрный сервер UltraVNC (всего 166K), который вы настраиваете и отправляете конечному пользователю. Записей в реестр он не делает, в виде службы не запускается, установщика не требует — конечному пользователю ничего настраивать не нужно. Он просто запускает исполлныемый файл двойным щелчком мыши, включая мини-сервер VNC. После этого вы можете подключаться к его компьютеру и выполнять все необходимые действия по администрированию и поддержке.
Стандартный сервер UltraVNC поддерживает передачу файлов и каталогов, а вот версия UltraVNC SC на сегодняшний день позволяет передавать только файлы. Все передаваемые данные кодируются на уровне, сравнимом с уровнем Microsoft Crypto API (либо 40, либо 128 бит). Кроме того, мини-сервер не поддерживает входящие подключения: он позволяет только подключаться к тому компьютеру, который был указан перед отправкой средства конечному пользователю.
Чтобы создать пользовательское средство просмотра, нужно составить несколько файлов конфигурации и запустить пакетный файл из программы установки еще одной надстройки над проектом — PCHelpware — которая создаст исполныемый файл. Документация по программе не слишком подробная, но основные процедуры в ней рассмотрены. Наконец, нужно добавить, что приложение автоматически удаляется после завершения соединения, не оставляя никаких следов после себя.

Цена: распространяется бесплатно.

Грег Стин (Greg Steen) — специалист по информационным технологиям, предприниматель и энтузиаст. Он находится в постоянном поиске новых средств, помогающих специалистам по информационным технологиям упростить обеспечение качества, а также процессы разработки и эксплуатации.


 Вопросы и ответы по SQL: Увеличение баз данных, использование интерфейсов IFilter и удаленное соединение с сервером
Вопросы и ответы по SQL
Увеличение баз данных, использование интерфейсов IFilter и удаленное соединение с сервером
Под редакцией Мэтью Грейвена (Matthew Graven)

Совет. Очищайте кэш
Задавались ли вы вопросом, почему нормально работающая в среде тестирования сохраненная процедура плохо работает на производственном SQL Server? Причина этого может быть связана с кэшем. Перед размещением своей процедуры в производственную среду проверьте ее в среде тестирования, предварительно очистив кэшированные планы запросов. Таким образом вы получите представление о скорости работы процедуры с «холодным» кэшем. Вот пара полезных приемов в вашу копилку.
Очистить процедурный кэш SQL Server:
DBCC FREEPROCCACHE
Go
Выдать список всех кэшированных планов запросов:
Select * from sys.dm_exec_cached_plans
Go

В Моя база данных в течение дня работает под большой нагрузкой. Я не хочу увеличивать ее автоматически, так как попытка увеличить базу данных в период пиковой нагрузки может привести к превышению времени ожидания SQL Server®. Мне бы хотелось расширять базу данных периодически, при достижении определенного процента использования свободного пространства. Как это сделать?
О Увеличение размера файла — это операция, требующая интенсивной работы дискового ввода-вывода. Если SQL Server будет вынужден ждать расширения файла данных или журнала, то снижение производительности и увеличение времени отклика будет заметно. Параметры увеличения файлов по умолчанию составляют 1MB для файлов данных и 10 процентов для файлов журналов, чего может быть недостаточно для систем, работающих под большой нагрузкой. Кроме того, автоматическое увеличение файлов приводит к фрагментации диска, поскольку файлы данных и журналов расположены на диске не непрерывно. В результате повышения фрагментации время ответа также может возрасти — ведь физически данные будут распределены по всему диску.
Выделяя свободное место для файлов данных и журналов заранее, можно добиться хорошей производительности. При этом требуется анализировать тенденции изменения данных и предсказывать будущий рост их объемов, однако в результате можно увеличить производительность за счет непрерывности размещения файлов на диске и отсутствия в периоды пиковой нагрузки операций, требующих большого количества ввода-вывода. Автоматическое увеличение базы данных следует оставить, потому что база данных с полностью заполненными файлами данных и журналов станет совершенно недоступна. Однако автоматическое увеличение файлов должно использоваться как средство подстраховки, а не как основной механизм управления базой данных.
Не следует увеличивать файлы базы данных по расписанию, так как в этом случае файлы тоже не будут размещаться в непрерывных областях диска, что в свою очередь приведет к потере производительности. Упреждающее наблюдение можно организовать, регулярно запуская с помощью агента SQL сценарий, который определял бы процент свободного места в каждой базе данных, а затем выполняя необходимое действие (например, отправку уведомления по электронной почте с помощью компонента Database Mail). Код, представленный на рисунке, показывает, как получить процент свободного места в текущей базе данных.
Как только будет получено уведомление, с помощью команды ALTER DATABASE можно запрограммировать однократное увеличение размера файла, а с помощью агента SQL — назначить выполнение этой задачи вне периода пиковой нагрузки. Постарайтесь расширить файл так, чтобы в обозримом будущем его не пришлось бы снова увеличивать. Хорошо бы также для всех баз данных выключить автоматическое сжатие, чтобы не увеличивать количество циклов роста и сжатия файлов баз данных.
— Джастин Лэнгфорд (Justin Langford)
Определение количества свободного места в базе данных
-- Script to gather size, free space and
-- calculate % free space for current
-- USER database
DECLARE @size DEC(15,2)
DECLARE @free DEC(15,2)
DECLARE @result DEC(15,2)

SELECT @size = SUM(size)*1.0/128
FROM sys.database_files

SELECT @free =
(SUM(unallocated_extent_page_count)*1.0/128)
FROM sys.dm_db_file_space_usage

PRINT 'DB Size ' + CONVERT(VARCHAR(15), @size)
PRINT 'Free Space ' +
CONVERT(VARCHAR(15), @free)

SELECT @result = (@free/@size)*100

PRINT '% Free Space ' +
CONVERT(VARCHAR(15), @result)

В нашей компании файлы разных форматов хранятся в базе данных в столбцах типов varbinary и image. Я слышал, что у SQL Server есть встроенные возможности поиска в файлах разных форматов. Как мне настроить SQL Server, чтобы использовать эту функцию?
О Эта возможность встроена в службу полнотекстового индексирования. В этой службе предусмотрено использование интерфейсов IFilter, что позволяет разрабатывать и загружать фильтры, извлекающие полезную информацию из файлов нестандартных форматов. Интерфейсы IFilter используются и в других продуктах, например в Microsoft® Office SharePoint® Server, чтобы получать информацию из обрабатываемых файлов.
Реализации интерфейса IFilter обычно поставляются создателями формата файлов или сторонними поставщиками. В поставке SQL Server уже содержатся некоторые реализации интерфейса IFilter, в том числе для файлов в формате HTML и DOC. Они загружаются при установке FulltextService (FTS). Однако можно добавить и другие реализации IFilter. Например, на веб-узле фирмы Adobe можно найти фильтры для файлов формата Adobe PDF, а в конце 2007 года вышел новый пакет фильтров для расширений файлов системы Office 2007. Также необходимо знать, какую версию реализации IFilter устанавливать. Например, реализация IFilter, предназначенная для работы в 32-разрядных системах, не будет работать в 64-разрядном SQL Server.
После запуска пакета установки клиента, нужные IFilter обычно автоматически регистрируются в операционной системе. После регистрации элементов в ОС необходимо выполнить еще несколько шагов, чтобы FTS загрузил установленные реализации IFilter. Выполните следующие команды из вашего средства исполнения запросов:
  • sp_fulltext_service 'load_os_resources',1. (Этот оператор включает загрузку службой FTS зарегистрированных элементов, в том числе таких компонентов, как средство разбивки слов и извлечения корней.)
  • sp_fulltext_service'verify_signature',0. (Эта конструкция указывает SQL Server не проверять подпись зарегистрированных фильтров, потому что многие поставщики не подписывают свои фильтры так, как этого требует стандарт.)
  • Перезагрузите SQL Server и службу FTS.
  • Создайте полнотекстовый индекс по следующим столбцам: столбец с двоичными данными должен использоваться как содержимое, которое будет пропущено через IFilter, а столбец расширения (то есть столбец с типом расширения, таким как DOCX) будет использован SQL Server для выбора фильтра, который будет применен к данным столбца содержимого.
Дополнительные сведения приведены на странице go.microsoft.com/fwlink/?linkid=7912971.
—Йенс Зюссмайер (Jens Suessmeyer)

В Я не могу соединиться с удаленным SQL server. Мне нужно настраивать брандмауэр на клиентской машине или на сервере?
О Есть много причин, по которым не удается установить соединение с удаленным SQL Server 2005, однако очень часто это происходит именно из-за неправильных настроек брандмауэра. Блоги по протоколам SQL (blogs.msdn.com/sql_protocols) — это хороший источник информации о том, как устанавливать соединение с SQL Server.
В установке SQL Server 2005 по умолчанию запрещены удаленные соединения. На машине, на которой запущен SQL Server, в меню «Пуск», выберите Microsoft SQL Server 2005 | средства настройки | настройка контактной зоны SQL Server. Здесь перейдите в Настройку контактной зоны для служб и соединений, выберите Удаленные соединения, а затем выберите кнопку-переключатель «Использовать TCP/IP и именованные каналы». Чтобы изменения вошли в силу, нужно перезапустить SQL Server.
По умолчанию, SQL Server использует порт 1433. Чтобы убедиться, что этот порт открыт, используйте следующие команды telnet, заменив <ipaddress> на IP-адрес машины, на которой запущен SQL Server:
telnet <ipaddress> 1433
Если в ответ вы получите ошибку подключения, откройте Windows® Брандмауэр, перейдите на вкладку Исключения, выберите Добавить порт и добавьте порт TCP 1433. Теперь telnet должен сработать. (Имейте в виду, что по умолчанию в Windows Vista® telnet не установлен.)
— Рик Андерсон (Rick Anderson)
Благодарим за вклад в написание этой колонки следующих специалистов по SQL Server:
Джастин Лэнгфорд (Justin Langford) работает в Coeo Ltd., системный интегратор и Microsoft Certified Partner, расположенный в Англии. Йенс Зюссмайер (Jens Suessmeyer) , консультант Microsoft по базам данных из Германии. Рик Андерсон (Rick Anderson) работает в группе Developer User Education в Microsoft. Салим Хакани (Saleem Hakani) старший инженер по базам данных и руководитель сообщества SQL Server в Microsoft.


 Обзор служебных программ: Средство анализа возможностей инфраструктуры веб-узла
Обзор служебных программ
Средство анализа возможностей инфраструктуры веб-узла
Грег Стин (Greg Steen)

Журналы веб-узлов и анализ изменений трафика во времени могут предоставить информацию о возможных изменениях потоков данных, но как узнать, справится ли с ними существующая инфраструктура? Для ответа на этот вопрос необходимо такое средство, которое позволило бы определить предел прочности инфраструктуры и набора приложений вашего веб-узла. Одним из таких инструментов является свободно распространяемое средство анализа возможностей инфраструктуры веб-узла (WCAT). Это небольшая по размеру программа по сценарию воспроизводит http-запросы к веб-серверу (или к ферме веб-серверов с балансировкой нагрузки) и собирает статистику производительности для последующего анализа. Последняя версия (6.3.1 на момент написания статьи) доступна как для системы Windows x86, так и для системы Windows x64 (для x86: iis.net/downloads/1466/ItemPermaLink.ashx; для x64: iis.net/downloads/1467/ItemPermaLink.ashx), а также поддерживает сетя протокола IP версии 6. Кроме того, многопоточность WCAT позволяет параллельно управлять несколькими нагрузочными тестами, в результате чего можно воспроизвести одновременную работу нескольких тысяч пользователей.
Посредством этой программы старые компьютеры можно использовать в качестве клиентских машин, создавая на каждой из которых ещё несколько виртуальных клиентов. Максимальное количество этих клиентов будет ограничено только сетевыми адаптерами и другим оборудованием клиентской машины. Можно отправлять HTTP-запросы по стандартам HTTP 1.0 или HTTP 1.1, с использованием и без использования шифрования по протоколу SSL. Если по сценарию теста требуется получить доступ к участкам веб-узла с ограниченным доступом, можно предусмотреть обычную проверку подлинности или проверку подлинности NTLM. (Если на веб-узле применяется проверка подлинности, основанная на формах, сессии или использовании файла Cookie, то для проверки подлинности тестового пользователя можно создать правильные запросы GET и POST.) Кроме того, WCAT управляет всеми файлами Cookie, которые может установить веб-узел, поэтому можно сохранять информацию о профиле и сеансе.
WCAT can help you test the limits of your Web site infrastructure
WCAT can help you test the limits of your Web site infrastructure
С помощью отличного руководства пользователя, с которым поставляется WCAT, мне быстро удалось создать консольное приложение на платформе NET Framework Microsoft®. Оно создавало сценарий для тестового клиента, основывающийся на объемах данных из журнала аудита трафика, что позволило мне воспроизвести обычную нагрузку на веб-узел и проверить с ее помощью новую версию кода веб-узла. Кроме того, программист, работающий на языке C, может написать вызываемые из сценария специальные функции и обработчики ответа, тем самым адаптируя возможности сценария к вашему окружению.
Перед использованием WCAT требуется настроить два файла.В управляющем файле находятся общие настройки теста: количество клиентов, количество виртуальных клиентов на клиенте, счетчики производительности и тестируемый веб-сервер; в файле сценария находится сценарий теста, параметры запроса по умолчанию и ссылки на определенные пользователем функции и бибилиотеки.
Приложение сохраняет результаты теста в файл XML, к которому можно применить поставляемую таблицу стилей XSL и получить удобный для просмотра в Internet Explorer® отчет. В нем содержится итоговая сводка: количество выполненных транзакций, произошедших переключений контекста, процент использования ЦП (из всех ЦП) и общее количество ошибок. В отчет также входят значения заданных в файле настроек счетчиков производительности (смотрите копию экрана для примера), анализ времени отклика, средние характеристики транзакции, раздел данных с разбивкой по клиенту и информация о настройках вашего теста. Кроме того, выводится конфигурация оборудования тестируемого веб-сервера вместе со списком всех установленных обновлений. Таким образом можно отследить, повлияли ли исправления на производительность веб-узла.
В общем, если вы управляете инфраструктурой веб-узла, c помощью служебной программы WCAT можно получить представление о поведении вашей платформы под нагрузкой перед следующим большим обновлением кода.

Грег Стин (Greg Steen) — специалист по информационным технологиям, предприниматель и энтузиаст. Он находится в постоянном поиске новых средств, помогающих специалистам по информационным технологиям упростить обеспечение качества, а также процессы разработки и эксплуатации.


 Кабельщик: Устранение неполадок принудительного применения NAP
Кабельщик
Устранение неполадок принудительного применения NAP
Джозеф Дэвис (Joseph Davies)

Новая платформа защиты доступа к сети (NAP), встроенная в Windows Vista, Windows Server 2008 и Windows XP SP3, упрощает защиту частной интрасети, обеспечивая принудительное выполнение требований, предъявляемых к работоспособности компьютера. Важнейшими компонентами NAP являются клиенты NAP, точки NAP и серверы политики работоспособности NAP.
Клиент NAP представляет собой компьютер, предоставляющий информацию о состоянии работоспособности для оценки работоспособности системы. Точка NAP представляет собой компьютер или устройство доступа к сети, которое использует NAP или может использоваться с NAP для запроса оценки состояния работоспособности клиента NAP и обеспечения ограниченного доступа к сети или ограниченного обмена данными по сети. Сервер политики работоспособности NAP представляет собой компьютер, на котором работает Windows Server® 2008 и служба сервера политик сети (NPS) и на котором хранятся политики требований к работоспособности и который выолняет оценки работоспособности клиентов NAP. Сервер политики работоспособности NAP и точки NAP обмениваются информацией о работоспособности системы и инструкциями для ограничения доступа с сервером RADIUS (Remote Authentication Dial-In User service) и сообщениями прокси.
В этой статье описываются компоненты политики требований к работоспособности, способ обработки службой NPS входящих запросов на оценку NAP и способ устранения наиболее распространенных неполадок, связанных с принудительным применением NAP.

Политики требований к работоспособности
Принцип выполнения оценки работоспособности NAP
Служба NPS на сервере политики работоспособности NAP использует для выполнения оценки работоспособности следующую процедуру.
  1. Служба NPS входящее сообщение с запросом сравнивает со своим настроенным набором политик запросов на подключение. В случае NAP сообщение с запросом должно соответствовать политике запросов на подключение, в которой указано, что служба NPS выполняет проверку подлинности и авторизацию локально.
    2. Политика запросов на подключение может также предъявлять требования, относящиеся к подключению. Например, для принудительного применения 802.1X и VPN, политика запросов на подключение требует использования метода проверки подлинности, основанного на протоколе PEAP (Protected Extensible Authentication Protocol). Если осуществляющий подключение клиент не использует PEAP, запрос на подключение отклоняется.
  2. Служба NPS выполняет оценку информации о состоянии работоспособности, содержащуюся в сообщении с запросом, которая состоит из сводки SSoH (system statement of health), содержащей информацию о работоспособности. Служба NPS передает информацию о состоянии работоспособности своим установленным SHV (средство проверки работоспособности системы), которые возвращают службе NPS результат проверки работоспособности.
  3. Служба NPS сообщение с запросом и информацию об оценке работоспособности, полученную от SHV, сравнивает с соответствующим набором сетевых политик. Информация об оценке работоспособности сравнивается с условием «Политика работоспособности» сетевых политик, основанных на NAP. В условии «Политика работоспособности» указываются условия соответствия или несоответствия требованиям, предъявляемым к работоспособности. Служба NPS применяет к сообщению с запросом первую соответствующую требованиям сетевую политику.
  4. На основе соответствующей сетевой политики, основанной на NAP, и соответствующих ей параметров NAP, служба NPS создает сводку SSoHR (system statement of health response). В эту ответную сводку входит информация от средств SHV об оценке работоспособности и указывается, имеет ли клиент NAP неограниченный или ограниченный доступ, и должен ли клиент NAP автоматически выполнять попытку обновления состояния работоспособности.
  5. Служба NPS отправляет в точку NAP ответное сообщение RADIUS со сводкой SSoHR. Если клиенту предоставлен ограниченный доступ, в ответном сообщении могут содержаться также инструкции, указывающие, каким образом ограничен доступ для клиента NAP.
  6. Точка NAP отправляет SSoHR клиенту NAP.

Политика требований к работоспособности представляет собой сочетание политики запросов на подключение, одной или нескольких сетевых политик и параметров NAP для метода принудительного применения NAP. Для создания политики требований к работоспособности служит мастер настройки NAP, входящий в оснастку сервера сетевых политик. (Подробнее о процедуре оценки см. на боковой панели «Принцип выполнения оценки работоспособности NAP».)
Политики запросов на подключение Это упорядоченные наборы правил, позволяющие службе NPS определить, должен ли входящий запрос на подключение обрабатываться локально или передаваться на другой сервер RADIUS. Сервер политики работоспособности NAP обрабатывает запросы на подключение локально.
Входящие запросы RADIUS от точек NAP, использующих Windows®, могут содержать тег источника, указывающий тип точки NAP, например сервер DHCP (Dynamic Host Configuration Protocol) или сервер виртуальной частной сети (VPN).
Если входящее сообщение с запросом содержит тег источника, служба NPS на сервере политики работоспособности NAP выполняет попытку проверки этого запроса на соответствие только политикам запросов на подключение, имеющим соответствующий источник (все остальные политики запросов на подключение игнорируются). Если входящее сообщение с запросом не содержит тега источника, служба NPS выполняет попытку проверки этого запроса на соответствие политикам запросов на подключение, для которых не указан источник (все остальные политики запросов на подключение, в которых указываются источники, игнорируются).
Например, входящие запросы от сервера DHCP, поддерживающего NAP, указывают тег источника — DHCP. Служба NPS проверяет запросы от сервера DHCP на соответствие политикам запросов на подключение, имеющим в качестве источника DHCP. Входящие запросы от коммутаторов, поддерживающих 802.1X, и беспроводных точек доступа не указывают тег источника. Служба NPS проверяет эти запросы на соответствие политикам запросов на подключение, для которых источник не указан.
Политика запросов на подключение, используемая для оценки локальной или удаленной обработки, является первой подходящей политикой из упорядоченного списка подмножества политик, которые применяются к входящему запросу. Если запрос не соответствует ни одной из политик запросов на подключение, запрос отклоняется.
Сетевые политики Это упорядоченные наборы правил, указывающих условия, при которых попытки подключения, соответствующие сообщениям с входящими запросами, либо разрешаются, либо отклоняются. Для каждого правила предусмотрены права доступа, которые либо предоставляют доступ, либо отказывают в доступе, набор ограничений и параметры сетевой политики. Если подключение разрешено, в ограничениях и параметрах сетевой политики может быть указан набор ограничений для подключения. В случае NAP в сетевых политиках может быть указано условие политики работоспособности, которое должно выполняться для требований работоспособности и параметров принудительного применения поведения.
Точно так же, как в случае политик запросов на подключение, сетевые политики используют тег источника для определения сетевой политики, которую следует пытаться сопоставить входящему запросу. Если входящее сообщение с запросом содержит тег источника, служба NPS выполняет попытку проверки этого запроса на соответствие только сетевым политикам, имеющим соответствующий источник (все остальные сетевые политики игнорируются). Если входящее сообщение с запросом не содержит тега источника, служба NPS выполняет попытку проверки этого запроса на соответствие сетевым политикам, для которых не указан источник (все остальные сетевые политики, в которых указываются источники, игнорируются).
Сетевая политика, используемая для авторизации или оценки работоспособности, является первой подходящей сетевой политикой из упорядоченного списка подмножества политик, которые применяются к попытке подключения. Если попытка не соответствует ни одной из сетевых политик, запрос отклоняется.
Политики работоспособности Эти политики позволяют указать требования к работоспособности в терминах установленных средств проверки работоспособности (SHV), используемых для оценки работоспособности, и указать, должны ли клиенты NAP пройти или не пройти проверку какого-либо SHV или всех из выбранных SHV. Например, в политике работоспособности для клиентов NAP, удовлетворяющих требованиям, может быть указано, что клиент должен проходить все проверки работоспособности. В политике работоспособности для клиентов NAP, не удовлетворяющих требованиям, может быть указано, что клиент должен не пройти по крайней мере одну проверку работоспособности или все проверки работоспособности.
Параметры защиты доступа к сети К ним относится настройка средств SHV, установленных на сервере политики работоспособности NAP для требований работоспособности и состояний ошибок, и группы серверов обновлений, указывающие набор серверов, доступных клиентам NAP, не удовлетворяющим требованиям, с ограниченным доступом в сеть для методов принудительного применения DHCP и VPN.

Определение области, захватываемой проблемами принудительного применения NAP
При диагностике любой проблемы полезно применять логический подход. Обычно при поиске неполадок следует искать ответы на следующие вопросы: Что работает? Что не работает? Как между собой связаны вещи, которые работают и которые не работают? Работало ли когда-нибудь то, что сейчас не работает? Если да, то что изменилось с тех пор, когда оно еще работало?
Очевидно, что эти вопросы особенно осмысленны, когда речь идет о проблемах, связанных с принудительным применением NAP. Работали ли подключение или средства связи до развертывания метода принудительного применения NAP? Например, работал ли сервер IPsec (Internet Protocol security) или изоляция доменов до развертывания принудительного применения протокола IPsec? Работала ли проверка подлинности 802.1X до развертывания принудительного применения 802.1X? Работала ли удаленный доступ VPN до развертывания принудительного применения VPN? Работал ли протокол DHCP до развертывания принудительного применения DHCP?
Более того, работал ли ранее конкретный метод принудительного применения NAP? Если да, то что изменилось на клиенте NAP, точке NAP или сервере политики работоспособности NAP? Ответы на эти вопросы помогут определить место, откуда следует начинать поиск неполадок, и, возможно, позволят изолировать ошибку в компоненте, уровне или конфигурации, которые вызывают проблему.
Для общей диагностики проблем, связанных с принудительным применением NAP, необходимо определить область, захватываемую проблемой. Первое, что нужно сделать, это понять, действительно ли проблема связана с принудительным применением NAP. В случае принудительного применения IPsec следут определить, корректны ли политики IPsec клиента NAP для согласования узла IPsec и защиты данных. В случае принудительного применения DHCP следует выяснить, может ли клиент NAP обмениваться сообщениями DHCP с сервером DHCP. В случае принудительного применения 802.1X и VPN следует определить, может ли клиент NAP успешно выполнять проверку подлинности. Например, если клиенты VPN не могут выполнять проверку подлинности для подключения VPN, проверьте параметры проверки подлиности и учетные данные клиентов VPN.
Если выяснилось, что проблема связана с принудительным применением NAP, на следующем этапе следует определить ее масштаб. Затронуты ли все клиенты NAP для всех методов принудительного применения NAP? Затронуты ли все клиенты NAP для конкретного метода принудительного применения? Затронуты ли все клиенты NAP для конкретного метода принудительного применения конкретной точки NAP? Затронуты ли все клиенты NAP, входящие в конкретную группу? Затрагивает ли проблема только конкретный клиент NAP?
Например, если все клиенты NAP испытывают проблемы для методов принудительного применения NAP всех типов, возможно, проблемы связаны с настройкой серверов политики работоспособности NAP. Если все клиенты NAP испытывают проблемы с конкретным методом принудительного применения NAP, возможно, имеются проблемы настройки параметров групповой политики для клиентов NAP или проблемы политик требований к работоспособности для конкретного метода принудительного применения NAP на серверах политики работоспособности NAP. Если только конкретные клиенты NAP испытывают проблемы принудительного применения NAP, возможно, имеются проблемы настройки принудительного применения NAP для этих клиентов NAP.

Распространенные проблемы принудительного применения NAP
Материалы по NAP
  • Введение в защиту доступа к сети
  • Архитектура платформы защиты доступа к сети
  • Политики защиты доступа к сети в Windows Server 2008
  • Защита доступа к сети NPS

Неограниченный доступ Если клиент NAP обладает неограниченным доступом (он не ограничен), это может объясняться тем, что клиент NAP был оценен сервером политики работоспособности NAP как удовлетворяющий требованиям. Это именно то, что требуется. Однако неограниченный доступ может быть предоставлен по той причине, что клиент NAP не получил SSoHR, что обычно случается, если для клиента NAP не выполняется оценка работоспособности. Если отсутствует оценка работоспособности NAP, то не осуществляется обратная передача SSoHR клиенту NAP, и клиент NAP получает неограниченный доступ.
Например, клиент NAP, настроенный для принудительного применения DHCP, будет отправлять сводку SSoHR своему серверу DHCP. Если сервер DHCP,работающий под управлением Windows Server 2008, не настроен для NAP, он не будет отправлять серверу политики работоспособности NAP сообщения с запросом оценки работоспособности. Кроме того, работающий под управлением Windows Server 2008 сервер DHCP, настроенный для NAP, который не может связаться с сервером политики работоспособности NAP, по умолчанию присваивает конфигурацию адресов для неограниченного доступа.
Неограниченный доступ может оказаться также результатом невозможности выполнения оценки работоспособности сервером политики работоспособности NAP вследствие того, что входящий запрос соответствует сетевой политике, не требующей оценки работоспособности NAP. Информацию об определении сетевой политики, соответствующей запросу клиента NAP, см. в разделе «Пошаговое устранение неполадок принудительного применения NAP» данной статьи.
Ограниченный доступ Клиент NAP, обладающий ограниченным доступом, был оценен сервером политики работоспособности NAP как не удовлетворяющий требованиям. Если у клиента NAP имеется ограниченный доступ, но он должен иметь неограниченный доступ, сравните состояние работоспособности клиента NAP с параметрами политики работоспособности, соответствующими той сетевой политике, которая соответствует запросу клиента NAP.
Без автообновления При надлежащей настройке клиенты NAP могут автоматически обновлять свое состояние работоспособности. Если клиенты NAP не выполняют автообновление, проверьте, установлен ли флажок «Включить автообновление клиентских компьютеров» для тех параметров принудительного применения NAP сетевой политики, которые соответствуют запросу клиента NAP.
Еще одна проблема, влияющая на автообновление, заключается в том, что ограниченный клиент NAP не в состоянии связаться с серверами обновления для загрузки обновлений. В случае принудительного применения IPsec убедитесь в том, что серверы обновлений применяют правильную политику IPsec. В случае принудительного применения 802.1X проверьте параметры из соответствующей сетевой политики, которые отвечают за назначение списка управления доступом (ACL), или идентификатор виртуальной локальной сети (VLAN ID) и проверьте настройку ACL или VLAN для коммутаторов или точек беспроводного доступа (AP). В случае принудительного применения VPN или DHCP проверьте параметры из соответствующей сетевой политики для группы серверов обновлений и обеспечьте настройку всех серверов обновлений в качестве членов группы. В случае принудительного применения DHCP обеспечьте правильную настройку параметров области DHCP для клиентов NAP, например, значение параметра «Шлюз по умолчанию» для класа пользователей NAP.
Оценка «Не поддерживает NAP» Для любого метода принудительного применения NAP проверьте, включен ли на клиенте NAP соответствующий клиент принудительного применения. В случае принудительного применения 802.1X и VPN убедитесь, что на клиенте NAP проверка работоспособности системы для метода проверки подлинности PEAP включена как в политике запросов на подключение, так и на клиенте NAP (установлен флажок «Включить проверки в карантине» в диалоговом окне «Свойства защищенного EAP»).
Клиент NAP не ограничен, но не может связаться с интранет В случае принудительного применения IPsec обеспечьте, чтобы у политики IPsec для удовлетворяющих требованиям клиентов NAP и у политики IPsec компьютеров интранет был общий набор параметров согласования и защиты. В случае принудительного применения 802.1X подтвердите, что в сетевой политике для удовлетворяющих требованиям клиентов NAP указан ACL или VLAN ID для интранет, а не для ограниченной сети. Проверьте настройку ACL или VLAN ID для интранет на коммутаторах или беспроводных AP. В случае принудительного применения VPN убедитесь, что в сетевой политике для удовлетворяющих требованиям клиентов NAP нет настроенных фильтров пакетов IP, ограничивающих трафик клиентов VPN.

Пошаговое руководство по устранению неполадок принудительного применения NAP
Один из способов последовательного устранения неполадок принудительного применения NAP в случае конкретного клиента NAP состоит из следующих этапов. Сначала следует проверить конфигурацию клиента NAP — проверить журнал событий клиента NAP. Затем следует перейти к серверу политики работоспособности NAP, чтобы определить, как служба NPS обработала запрос клиента NAP.
Шаг 1: Проверка конфигурации клиента NAP В конфигурацию клиента NAP входят службы Windows, клиенты принудительного применения и специальные параметры, относящиеся к принудительному применению NAP. Для отображения состояния клиента NAP и информации о конфигурации служат команды netsh nap client show state и netsh nap client show configuration.
Обратите внимание, что если параметры клиента NAP предоставляются групповой политикой, тогда все параметры клиента NAP указываются в групповой политике, а все локальные параметры клиента NAP игнорируются. В этом случае следует использовать команду netsh nap client show grouppolicy для отображения конфигурации клиента NAP, основанного на групповой политике, и вносить изменения посредством групповой политики.
В случае принудительного применения IPsec на компьютере с Windows Vista® следует пользоваться командой net start для проверки факта запуска служб агента NAP, модуля создания ключей IKE и AuthIP IPsec и агента политики IPsec. Для проверки факта включения клиента принудительного применения стороны, использующей IPsec, служит команда netsh nap client show configuration. При необходимости следует использовать оснастку «Конфигурация клиента NAP» для включения клиента принудительного применения стороны, использующей IPsec, или команду netsh nap client set enforcement 79619 enabled. Команды netsh nap client set enforcement должны запускаться из командной строки с использованием повышенных привилегий.
В случае принудительного применения 802.1X на компьютере с Windows Vista следует пользоваться командой net start для проверки факта запуска служб Extensible Authentication Protocol, агента NAP, Wired AutoConfig (для принудительного применения 802.1X на проводных подключениях) и WLAN AutoConfig (для принудительного применнеия 802.1X на беспроводных подключениях).
Для проверки факта включения клиента принудительного применения карантина для EAP также следует пользоваться командой netsh nap client show configuration. При необходимости используйте оснастку «Конфигурация клиента NAP» для включения клиента принудительного применения карантина для EAP или команду netsh nap client set enforcement 79623 enabled. Проверьте, установлен ли флажок «Включить проверки в карантине» для свойств метода проверки подлинности защищенного EAP для проводного или беспроводного подключения.
В случае принудительного применения VPN на компьютере с Windows Vista следует пользоваться командой net start для проверки факта запуска служб EAProtocol, агента NAP и диспетчера подключений удаленного доступа.
Для проверки включения клиента принудительного применения карантина для удаленного доступа служит команда netsh nap client show configuration. При необходимости используйте оснастку «Конфигурация клиента NAP» для включения клиента принудительного применения карантина для удаленного доступа или пользуйтесь командой netsh nap client set enforcement 79618 enabled. Проверьте, установлен ли флажок «Включить проверки в карантине» для свойств метода проверки подлинности защищенного EAP для подключения VPN.
В случае принудительного применения DHCP на компьютере с Windows Vista следует пользоваться командой net start для проверки факта запуска служб агента NAP и клиента DHCP. При необходимости используйте оснастку служб или инструмент Sc.exe для запуска этих служб и настройки их на автоматический запуск.
Для проверки факта включения клиента принудительного применения карантина для DHCP пользуйтесь экранным выводом команды netsh nap client show configuration. При необходимости используйте оснастку «Конфигурация клиента NAP» для включения клиента принудительного применения карантина для DHCP или воспользуйтесь командной netsh nap client set enforcement 79617 enabled.
Шаг 2: Проверка журнала событий клиента NAP Используйте оснастку «Просмотр событий» для проверки событий в журнале событий, созданных службой агента NAP. На компьютерах, работающих под управлением Windows Vista, используйте оснастку «Просмотр событий» для просмотра событий в Applications and Services Logs\Microsoft\Windows\Network Access Protection\Operational. На компьютерах, работающих под управлением Windows XP с пакетом обновлений SP3, используйте оснастку «Просмотр событий» для просмотра событий NAP в системном журнале событий.
Исходя из событий клиента NAP, определите код корреляции для оценки работоспособности клиента NAP. Код корреляции или имя компьютера можно использовать для поиска соответствующего события оценки работоспособности на сервере политики работоспособности NAP. На рис. 1 показан пример события с кодом корреляции для не удовлетворяющего требованиям клиента NAP.
Figure 1 Пример события клиента Windows Vista NAP
Figure 1 Пример события клиента Windows Vista NAP
Шаг 3: Проверка журнала событий NPS На сервере политики работоспособности NAP используйте оснастку «Просмотр событий» для просмотра событий в журнале Windows Logs\Security, созданных службой агента NPS. Для просмотра событий NPS откройте в средстве просмотра событий «Настраиваемые представления», затем «Серверные роли», после чего выберите «Политики сети и службы доступа». Для просмотра раздела интерактивной справки, относящейся к событию, воспользуйтесь ссылкой «Веб-справка журнала событий» на вкладке «Общие» данного события.
Обычно события оценки работоспособности NAP имеют код события 6278 (для неограниченного доступа) или 6276 (для ограниченного доступа). Отыщите соответствующее событие сервера политики работоспособности NAP, исходя из имени компьютера клиента NAP (поле «Учетная запись» в разделе «Клиентский компьютер» описания события) или кода корреляции (поле «Идентификатор сеанса» в разделе «Информация о карантине» описания события).
В событиях 6278 и 6276 журнала событий NPS содержится информация об оценке работоспособности NAP, например имя соответствующей политики запросов на подключение (поле «Имя политики прокси» в разделе «Сведения о проверке подлинности» описания события) и соответствующей сетевой политики (поле «Имя сетевой политики» в разделе «Сведения о проверке подлинности» описания события). На рис. 2 приведен пример вкладки «Сведения» для события с идентификатором 6276, содержащей имя политики прокси, имя сетевой политики и код корреляции (с именем QuarantineSessionID). Это событие политики работоспособности NAP, соответствующее событию клиента Windows Vista NAP на рис. 1.
Figure 2 Пример события сервера политики работоспособности NAP
Figure 2 Пример события сервера политики работоспособности NAP
Если нет события, соответствующего событию клиента NAP, проверьте факт запуска службы сервера политики сети и правильность настройки точки NAP для NAP и для использования сервера политики работоспособности NAP в качестве сервера RADIUS. Убедитесь, что сообщения RADIUS можно передавать между точкой NAP и сервером политики работоспособности NAP.
Выполнение этих трех шагов обеспечит выяснение причины, по которой принудительное применение NAP работает не предусмотренным образом. Дополнительную информацию о NAP см. в статьях, приведенных на боковой панели «Материалы по NAP».

Джозеф Дэвис (Joseph Davies) работает техническим писателем в Майкрософт и с 1992 года занимается преподаванием и пишет статьи на темы о работе в сети в среде Windows. На его счету восемь книг для издательства Microsoft Press, и он является автором ежемесячной рубрики «Кабельщик» веб-журнала TechNet.


 Язык сценариев Windows PowerShell: А вот тут, пожалуйста, подпись...
Язык сценариев Windows PowerShell
А вот тут, пожалуйста, подпись...
Дон Джонс (Don Jones)

В январском выпуске колонки Windows PowerShell за 2008 год я рассказывал о том, насколько важно ставить цифровую подпись на сценарии Windows PowerShell. Я приводил в качестве примера сценарии, в которых политика выполнения отличалась от AllSigned, что становилось причиной высокой уязвимости системы безопасности среды.
Собственно процедуры создания подписей я тогда подробно не рассматривал. Предыдущую статью можно найти на странице technetmagazine.com/issues/2008/01/PowerShell. Догадались, о чем речь пойдет в этот раз?

Больше, чем просто подпись
То, о чем пойдет здесь речь, обозначается термином «подпись», но само это слово на самом деле не совсем точно описывает суть происходящего. Когда вы подписываете сценарий, вы не утверждаете его, не подтверждаете его правильность, как в случае контрактов или чеков при оплате кредитной картой. В мире цифровой безопасности «подписать» означает пркрепить к какому-либо объекту свое удостоверение, гарантировав тем самым, что содержимое этого объекта никто не сможет подменить. Во главе всего здесь стоит криптографий, а криптография (по крайней мере в нашем случае) начинается с пары ключей.
Эти ключи называют асимметричными, поскольку они разные. Один ключ закрытый, он известен только вам, второй — открытый, к нему может получить доступ кто угодно. Я несколько все упрощаю, но по сути дело обстоит так: то, что зашифровано при помощи закрытого ключа, может быть расшифровано только при помощи соответствующего открытого ключа.
Вот как все это работает на практике. Еще раз оговорюсь, что я несколько упрощаю ситуацию, посто чтобы не затягивать изложение. Допустим, у меня есть сценарий Windows PowerShell®, который мне нужно подписать, и есть сертификат, содержащий закрытый ключ, — он будет использоваться для создания подписи сертификата. В самой Windows PowerShell есть командлет (я еще расскажу о нем поподробнее), который берет сценарий с сертификатом и собственно создает подпись. При этом Windows PowerShell шифрует содержимое сценария, используя закрытый ключ. Зашифрованная копия выглядит как бессмысленный набор символов, который добавляется в конец сценария в виде набора комментариев (см. рис. 1). Удостоверение тоже добавляется в комментарии, правда не шифруется. Собственно, удостоверение можно прочитать, не прибегая к средствам криптографии.
Figure 1 Блок подписи в конце сценария
Figure 1 Блок подписи в конце сценария
Затем, когда Windows PowerShell обнаруживает подпись, удостоверение декодируется и используется для получения открытого ключа. Поскольку остатки подписи можно расшифровать только при помощи моего открытого ключа, Windows PowerShell знает, что если ей удалось расшифровать подпись, значит поставил ее я. Если бы подпись поставил кто-то другой, мой открытый ключ не подошел бы. После расшифровки подписи Windows PowerShell сравнивает сценарий с тем, что было в зашифрованной части. Если содержимое совпадает, подпись считается целой. Если же текст двух версий различается, значит, подпись была нарушена и она считается недействительной.
Вот таким образом подпись и защищает открытый текст сценария от незаметных изменений. Сам-то сценарий можно изменить без труда, а вот подпись невозможно подменить так, чтобы она совпала с открытым текстом сценария: для этого нужен мой закрытый ключ, а он есть только у меня.
Разумеется, в действительности этот процесс куда сложнее. Подписи могут содержать (и содержат) гораздо больше информации: в них можно обнаружить копию открытого ключа, сведения о центре сертификации, выпустившем ключи, и так далее. Но моей целью было выделить самые важные этапы процесса и показать, что подпись на самом деле защищает содержимое сценария от несанкционированного изменения.
Важным моментом тут является обеспечение безопасности закрытого ключа. Он не должен попасть в чужие руки. При установке ключа в Windows нужно обязательно защитить его паролем, чтобы никакой злонамеренный процесс не смог им воспользоваться без вашего ведома. Еще более надежное решение — смарт-карты. Если ключ записан на смарт-карту, он уже никуда с нее не денется. Данные, которые нужно зашифровать, передаются на карту при помощи устройства чтения данных, микросхема выполняет шифрование и отправляет результат обратно.

Получение сертификата
Командлет месяца: Export-CSV
Ребята на форуме PowerShellCommunity.org часто спрашивают, можно ли экспортировать данные из Windows PowerShell в Microsoft Excel®. Разумеется, можно. Делает это командлет Export-CSV: программа Excel позволяет открывать, редактировать и сохранять файлы CSV. Например, если вам нужно экспортировать список служб, запустите команду Get-Service | Export-CSV MyServices.csv. Командлет Export-CSV можно поместить в конец любого конвейера, и все объекты, проходящие по нему, будут выводиться в файл CSV. По умолчанию Export-CSV добавляет троку заголовка в начало файла, в которой указывается тип экспортированных объектов. Строка заголовка занесена в комментарий, поэтому Excel без проблем открывает эти файлы. Если вы не хотите записывать эту информацию в файл, нужно использовать параметр -notype для командлета Export-CSV. Кроме него можно также применять параметр -force (старый файл CSV заменяется новым файлом с тем же именем без подтверждения) и параметр –noClobber, который запрещает заменять существующие файлы.

Чтобы подписать сценарий, вам потребуется специальный сертификат — сертификат Authenticode для подписывания кода класса III. Получить его можно тремя способами. Первый вариант — использовать инфраструктуру открытого ключа (PKI), если она в вашей организации есть. В грамотно построенной инфраструктуре PKI корневому центру сертификации доверяют все компьютеры организации: только в таком случае сертификаты, выданые им, можно с организации использовать.
В Windows Server® есть свой сервер сертификатов начиная с версии Windows® 2000, и это программное обеспечение вы можете использовать для создания собственной инфраструктуры PKI. Для полноценной реализации PKI требуется продуманное планирование, но если инфраструктура PKI нужна только для выпуска сертификатов для подписи кода, особой работы не потребуется. Вы можете просто при помощи групповой политики получить корневой сертификат центра сертификации на свои компьютеры, и они будут считать его доверенным.
Второй вариант — использовать коммерческий центр сертификации. Одно из преимуществ такого подхода состоит в том, что если выбрать известный центр сертификации, есть шанс, что на компьютерах организации уже настроено доверие для этого центра. (В Windows XP большое количество центров сертификации считаются доверенными по умолчанию, в Windows Vista® их часло гораздо меньше.) Один из известных коммерческих центров сертификации — VeriSign (verisign.com), но есть и другие: CyberTrust (cybertrust.com), Thawte (thawte.com).
Третий вариант получения сертификата для подписи кода — создать свой собственный сертификат при помощи средства вроде Makecert.exe. Оно есть в комплекте Windows Platform SDK, в некоторых выпусках Microsoft® Office, да и много где еще. Плюсом такого сертификата является то, что он бесплатный и не требует никакой специальной инфраструктуры. Минус его в том, что использовать его, по сути, можно только на вашем собственном компьютере. Если нужно обеспечить выполнение сценариев на одном компьютере, к примеру для тестирования или для изучения возможностей подписей кода, Makecert.exe незаменим. Документацию к этому средству можно найти на странице go.microsoft.com/fwlink/?LinkId=108538. Только имейте в виду, что уже было выпущено несколько версий этого средства и что, возможно, та версия, которая установлена у вам, отличается от той, что описана в документации.
После того как Makecert.exe установлен, сертификат создается путем выполнения примерно таких команд в командной строке Windows PowerShell (и не дай бог я застану кого за работой с cmd.exe во время чтения статьи):
makecert -n "CN=MyRoot" -a sha1 –eku
1.3.6.1.5.5.7.3.3 -r -sv root.pvk root.cer
–ss Root -sr localMachine
Затем необходимо ввести следующее:
makecert -pe -n "CN=MyCertificate" -ss MY
–a sh1 -eku 1.3.6.1.5.5.7.3.3 -iv root.pvk
–c root.cer
Makecert.exe попросит вас ввести пароль для защиты ключа, после чего создаст сертификат. Проверить результат можно, запустив в Windows PowerShell следующий код:
gci cert:\CurrentUser\My -codesigning
На экране появится список всех элементов на диске CERT: (это хранилище сертификатов в Windows), представляющих собой сертификаты для подписи кода. Кстати, все это также описано в документации к самой Windows PowerShell. Чтобы ее найти, нужно открыть справку (help About_Signing) и пролистать несколько экранов.

Создание подписи для сценария
Теперь у нас есть сертификат. И есть сценарий (можно в целях проверки быстренько состряпать что-нибудь). Можем приступать к созданию подписи. В Windows PowerShell делается это до безобразия просто. Нужно ввести следующее:
$cert = @(gci cert:\currentuser\my
-codesigning)[0]
Set-AuthenticodeSignature myscript.ps1 $cert
Первая часть команды получает первый из установленных сертификатов для подписи кода (если у вас несколько сертификатов и вы не хотите использовать первый, замените цифру 0 номером нужного сертификата). Вторая часть команды подписывает файл (разумеется, имя файла вы должны вписать свое). Вот, собственно, и все. Единственное, имя командлета Set-AuthenticodeSignature показалось мне слишком длинным, и я создал псевдоним Sign. Теперь та же команда у меня выглядит так:
Sign myscript.ps1 $cert
Если вы откроете свой сценарий, вы обнаружите в конце блок подписи. Установите для политики выполнения режим AllSigned (Set-ExecutionPolicy AllSigned) и попробуйте запустить сценарий. Все должно работать. Теперь измените текст сценария и сохраните его. Подпись не меняйте. Windows PowerShell откажется запускать измененную версию сценария, поскольку подпись нарушена.

Оно того стоит
Время от времени невольно задаешься вопросом: а стоит ли результат всей этой суеты? Если лишь изредка создавать сценарии для задач администрирования, так ли уж нужно тратить 500 долларов на сертификат, создавать совершенно новую инфраструктуру? Я сам администратор, и я вас прекрасно понимаю. Но все, что я вам могу на это сказать: стоит. Стоит любых усилий.
Безопасность всегда требует определенного количества работы. Антивирус может раздражать до невозможности, но вы же не станете работать без него. Брандмауэр — сплошная головная боль, но и без него никак. Контроль учетных записей в Windows Vista тоже требует определенной заботы, но зато безопасность системы повышается. А не защиты ли ради мы все это и затеяли?
Windows PowerShell — весьма мощное средство, и оно, как и многие другие, может стать причиной уязвимости системы, которой не преминет воспользоваться какой-нибудь злоумышленник. Именно поэтому так важно предпринять заранее действия, которые не дадут злоумышленнику проникнуть в систему.
Подпись кода — самая действенная мера, причем в действительности не так трудно ею воспользоваться. Я, к примеру, использую графический редактор сценариев, который автоматически добавляет подпись каждый раз, когда я нажимаю кнопку «Сохранить», так что создание подписи не требует от меня практически никаких усилий.
Можно обойтись и без редактора. Можно создать специальный профиль в Windows PowerShell (создать файл Microsoft.PowerShell_profile.ps1 в папке WindowsPowerShell, расположенной в папке с вашими документами) и добавить в него такую функцию:
function sign ($filename) {
  $cert = @(gci cert:\currentuser\my
-codesigning)[0]
Set-AuthenticodeSignature $filename $cert
}
Теперь сценарии будут подписываться при помощи вот этой команды:
Sign c:\scripts\myscript.ps1
Да, и первым делом, разумеется, нужно подписать сценарий профиля. Смысл всего этого в том, чтобы максимально упростить процедуру создания подписи, так что не стоит считать эту работу обременительной.
Развертывание инфраструкутры PKI для одного сервера, если она будет использоваться только для выпуска сертификатов, тоже больших проблем не доставит. (Помните, правда, что инфраструктуру нужно будет спланировать, продумать систему защиты корневого центра сертификации и план аварийного восстановления — тем более если вы будете использовать PKI еще и в других целях.) В конце концов, всегда можно воспользоваться Makecert.exe, если кроме вас сценарии запускать никто не будет. Не забудьте о том, что в справке Windows PowerShell, в разделе About_Signing, есть информация и о том, как защитить сертификаты, созданные при помощи программы Makecert.exe.

Дон Джонс (Don Jones) является автором книги Windows PowerShell: TFM и VBScript, WMI и ADSI. Связаться с Доном можно через веб-узел PowerShellCommunity.org.


 Эй, автор сценариев!: Возвращение сценария базы данных
Эй, автор сценариев!
Возвращение сценария базы данных
Программисты корпорации Майкрософт
Загрузить исходный код для этой статьи: HeyScriptingGuy2008_04.exe (151KB)

Вы знаете, если у программистов корпорации Майкрософт (ну...мы говорим «если») есть недостаток, он следующий – мы слишком беспокоимся о возможных последствиях действий, которые мы предпринимаем или не предпринимаем. Вместо того, чтобы действовать исключительно в собственных интересах, мы часто сдерживаемся и поступаем так, как, как мы думаем, будет лучше для всех остальных. И действуем так независимо от того, что это может значить для нас.
Возьмем, к примеру, статьи о написании сценариев баз данных. Если честно, программистам Майкрософт трудно писать статьи о создании сценариев баз данных. Не потому, что создавать сценарии очень сложно, на самом деле это простой процесс. Проблема заключается в том, что программистам редко предоставляется возможность поработать с базами данных; поэтому каждый раз, когда мы пишем о базах данных, нам приходится отвлекаться и обдумывать написанное. Как вы, вероятно, уже давно поняли, способность думать – определенно не является обязательным требованием для программистов Майкрософт.
Собственно говоря, если бы кто-нибудь из нас изначально действительно думал об этом, вероятно, программистов не было бы вообще.
Так что, если программистам корпорации Майкрософт так трудно писать статьи о создании сценариев баз данных, почему же мы продолжаем этим заниматься? Ответ очень простой: мы беспокоимся о том, что может произойти с остальным миром, если мы перестанем писать эти статьи. Когда сэр Артур Конан Дойль решил убить Шерлока Холмса (он упал со скалы в рассказе «Последнее дело Холмса»), он думал, что просто избавляется от персонажа, о котором больше не хочет писать. Но это вызвало возмущение во всем мире. По некоторым сообщениям, жители Лондона действительно носили черные ленты на шляпах и рукавах после того, как узнавали эти новости. Рассказ «Последнее дело Холмса» был опубликован в журнале The Strand Magazine в 1893 году, что привело к тому, что от подписки отказались 20 000 читателей.
Вот так-то.
Программисты корпорации Майкрософт обеспокоены тем, что прекращение выпуска статей под написанию сценариев баз данных приведет к схожим последствиям во всем мире. Мы не хотим причинять такую боль и страдания и, разумеется, против того, чтобы 20 000 читателей отказались от подписки на TechNet Magazine. Поэтому хотим объявить, что продолжим писать о сценариях баз данных. Когда? Ну, может быть прямо сейчас?

Добавление записей в базу данных
В выпуске журнала за этот месяц мы продемонстрируем несколько небольших замечательных хитростей при работе с базами данных. Да, это дополнение к приемам работы, о которых рассказывалось в выпуске журнала за сентябрь 2007 года (technetmagazine.com/issues/2007/09/HeyScriptingGuy); даже программисты не пойдут на то, чтобы выпустить точно такую же статью второй раз.
Ну, если не будут уверены, что это сойдет с рук.
Начнем с простого способа добавления записи в базу данных. Предположим, что имеется база данных с именем C:\Scripts\Inventory.mdb, содержащая таблицу с именем Computers. Таблица Computers включает следующие поля:
  • ComputerName
  • SerialNumber
  • UserName
  • Department
Как добавить в базу данных новый компьютер? Взгляните на код, показанный на рис. 1.
Figure 1 Adding a record to the Computers table (Close Figure 1)
Const adOpenStatic = 3
Const adLockOptimistic = 3

Set objConnection = CreateObject("ADODB.Connection")
Set objRecordSet = CreateObject("ADODB.Recordset")

objConnection.Open _
    "Provider = Microsoft.Jet.OLEDB.4.0; " & _
        "Data Source = C:\Scripts\Inventory.mdb"

objRecordSet.Open "INSERT INTO Computers (ComputerName, SerialNumber, UserName, Department)" &  _
    "VALUES ('atl-ws-07', '11234', 'Ken Myer', 'Finance')", _
        objConnection, adOpenStatic, adLockOptimistic
Не будем останавливаться на первых строках этого сценария; при необходимости сведений о них вы можете обратиться к ресурсам центра сценариев по адресу microsoft.com/technet/scriptcenter. Достаточно сказать, что используются константы adOpenStatic и adLockOptimistic для управления типом курсора и блокировкой записей для нашего набора записей. (Да, это звучит впечатляюще, но на самом деле все довольно просто.) После создания экземпляров объектов ADODB.Connection и ADODB.Recordset мы используем следующую команду для открытия базы данных:
objConnection.Open _
"Provider = Microsoft.Jet.OLEDB.4.0; " & _
"Data Source = C:\Scripts\Inventory.mdb"
Кстати, эта команда открывает базу данных Microsoft® Access® 2003. Для открытия базы данных Access 2007 необходимо использовать другую команду:
objConnection.Open _
"Provider = Microsoft.ACE.OLEDB.12.0; " & _
"Data Source = C:\Scripts\Inventory.accdb"
Хотя мы немного отклоняемся от основной темы, для открытия базы данных SQL Server® можно использовать команду, наподобие следующей:
objConnection.Open _
"Provider=SQLOLEDB;" & _
"Data Source=atl-sql-01;" & _
"Trusted_Connection=Yes;" & _ "InitialCatalog=Inventory;" & _
"User ID=fabrikam\kenmyer;Password=34DE6t4G!;"
До этого момента был показан только стандартный код; как вы скоро увидите, практически все ваши сценарии баз данных будут начинаться с одинаковых строк кода. Необходимо особо подчеркнуть следующую строку:
objRecordSet.Open _
  "INSERT INTO Computers " & _
  "(ComputerName, SerialNumber, " & _
  "UserName, Department) " & _
    "VALUES ('atl-ws-07', 'A14B1234', " & _
      "'Ken Myer', 'Finance')", _
        objConnection, adOpenStatic, _
        adLockOptimistic
Здесь используется запрос INSERT INTO для вставки новой записи в таблицу Computers. Обратите внимание, что после имени таблицы включены имена всех полей, для которых имеются значения, заключенные в скобки и разделенные запятыми.
Вы можете спросить: что подразумевают программисты под фразой «для всех полей, для которых имеются значения»? Хороший вопрос. Предположим, что для этого нового компьютера должно быть присвоено значение поля Department. Если база данных позволяет разместить в поле Department значение Null, можно просто оставить поле Department и не присваивать ему значение. Другими словами, можно написать следующий запрос:
objRecordSet.Open _
  "INSERT INTO Computers " & _
  "(ComputerName, SerialNumber, " & _
  "UserName) " & _
    "VALUES ('atl-ws-07', 'A14B1234', " & _
      "'Ken Myer')", _
        objConnection, adOpenStatic, _
        adLockOptimistic
Говоря о присвоении значений, посмотрим, что следует за имена полей: ключевое слово VALUES, за которым следуют значения, которые необходимо назначить для каждого поля (также заключены в скобки). Следует иметь в виду, что при перечислении имен полей они могут располагаться в любом порядке; например, поле ComputerName размещено первым, хотя оно может и не быть первым полем базы данных. Это не имеет значения для имен полей, чего нельзя сказать о значениях. Значения должны быть перечислены точно в таком же порядке, в котором перечислены поля. Если первым полем является ComputerName, первым значением должно быть имя компьютера. В противном случае мы столкнемся с проблемами. (Например, полю ComputerName будет присвоено имя пользователя или серийный номер.)
Как вы видите, присвоение значений не является сложным; необходимо только убедиться в том, что формат значений соответствует типу данных: даты и строковые значения должны быть заключены в одинарные кавычки, а числовые и логические значения не должны заключиться в одинарные кавычки.
Да, кстати, при наличии значения с собственной одинарной кавычкой (например, имя «O'Brien») необходимо отделить этот символ, удвоив его:
'O''Brien'
Странно, но таковы правила.

Удаление записей из базы данных
Это просто здорово: можно добавить запись в базу данных с помощью простого выполнения одного SQL-запроса. Может ли быть что-нибудь лучше? Теперь нам это известно.
Ну, может быть за исключением возможности удаления нескольких записей из базы данных с помощью одного запроса.
Предположим, ваша компания решила ликвидировать отдел кадров. (Никаких шуток; мы и так постоянно беспокоимся из-за отдела кадров Майкрософт.) Как удалить все компьютеры отдела кадров из базы данных инвентаризации? На рис. 2 показан один из способов сделать это.
Figure 2 Deleting multiple records (Close Figure 2)
Const adOpenStatic = 3
Const adLockOptimistic = 3

Set objConnection = CreateObject("ADODB.Connection")
Set objRecordSet = CreateObject("ADODB.Recordset")

objConnection.Open _
    "Provider = Microsoft.Jet.OLEDB.4.0; " & _
        "Data Source = C:\Scripts\Inventory.mdb"

objRecordSet.Open "DELETE * FROM Computers Where Department='Human Resources'", _
    objConnection, adOpenStatic, adLockOptimistic
Как вы видите, начало этого сценария полностью совпадает с началом сценария для добавления новой записи: определение нескольких констант, создание пары объектов и подключение к базе данных Inventory.mdb. Затем просто используется запрос DELETE для удаления всех записей (*) из таблицы Computers или хотя бы записей, для поля Department которых установлено значение Human Resources:
objRecordSet.Open _
  "DELETE * FROM Computers " & _
   "Where Department='Human Resources'", _
    objConnection, adOpenStatic, _
    adLockOptimistic
Это так же просто, как свалиться со скалы.
Хм, Шерлок Холмс, только без обид.

Обновление записей в базе данных
Без сомнения, все согласятся, как приятно удалить все следы отдела кадров. (Примечание для отдела кадров корпорации Майкрософт: мы имеем в виду, приятно для других людей их отделов кадров. Не для нас. Нам бы это совсем не понравилось.) Тем не менее, удаление всех компьютеров отдела кадров из базы данных инвентаризации может быть не лучшим из того, что вы можете сделать. Почему? Если только все сотрудники отдела кадров не скрылись со всем своим оборудованием (звучит так, как будто они могут так сделать — ладно, неважно; мы говорим серьезно) эти компьютеры все еще принадлежат вашей компании; то есть, они должны присутствовать в базе данных. С учетом этого, выполним следующее. Вместо удаления этих записей из базы данных, просто обновим каждую запись; просто изменим название отдела для всех этих компьютеров с Human Resources на None. Другими словами, мы выполним сценарий, показанный на рис. 3.
Figure 3 Updating records (Close Figure 3)
Const adOpenStatic = 3
Const adLockOptimistic = 3

Set objConnection = CreateObject("ADODB.Connection")
Set objRecordSet = CreateObject("ADODB.Recordset")

objConnection.Open _
    "Provider = Microsoft.Jet.OLEDB.4.0; " & _
        "Data Source = C:\Scripts\Inventory.mdb"

objRecordSet.Open "UPDATE Computers Set Department = 'None' " & _
    "Where Department = 'Human Resources'", _
    objConnection, adOpenStatic, adLockOptimistic
И снова, в сценарии отличается только SQL-запрос. В данном случае используется запрос UPDATE для обновления записей в таблице Computers. Помимо ключевого слова UPDATE необходимо добавить два параметра, сообщающие запросу записи для обновления и способ обновления этих записей:
  • Set Department = 'None'. Указывается новое значение для поля Department. Можно одновременно установить значения для нескольких полей, используя следующий синтаксис: Set Department = 'None', UserName = 'None'. Как вы видите, для полей Department и UserName устанавливаются значения None.
  • Where Department = 'Human Resources'. Это стандартное предложение Where, указывающее записи для обновления; в данном случае это все записи, для поля Department которых установлено значение Human Resources. Оно включено по одной простой причине: необходимо изменить не все записи в базе данных, а только записи (компьютеры), которые ранее принадлежали отделу кадров.
Запросы Update предоставляют замечательную возможность. Предположим, ваша компания решила увеличить зарплату всех сотрудников в связи с повышением прожиточного минимума на 10 процентов. (Программисты корпорации Майкрософт несомненно похожи на сэра Артура Конан Дойля, по крайней мере в одном: мы тоже пишем о вымышленных мирах.) Ниже приведен сценарий, открывающий таблицу с именем Employees и изменяющий поле Salary для всех сотрудников. Какое значение устанавливается для поля Salary? Запрос устанавливает для этого поля значение, равное текущей заработной плате сотрудника, умноженной на 1.1; другими словами, заработная плата всех сотрудников увеличивается на 10 процентов. (Если бы этого было так просто!) Вот запрос:
objRecordSet.Open _
  "Update Employees " & _
  "Set Salary = (Salary * 1.1)", _
    objConnection, adOpenStatic, _
    adLockOptimistic
Что в этом такого хорошего? Как вы видите, в запросах Update можно выполнять вычисления. Вы решили продлить срок контракта всех временных сотрудников еще на 60 дней? В этом случае может быть удобным запрос, подобный следующему:
objRecordSet.Open _
  "Update TempEmployees " & _
  "Set ContractExpirationDate = " & _
  "(ContractExpirationDate + 60)", _
    objConnection, adOpenStatic, _
    adLockOptimistic

Отличные способы получения данных
Говоря о полезных запросах, в заключение рассмотрим несколько отличных способов получения данных из базы данных. Например, вот простой и довольно полезный сценарий. Предположим, база инвентаризации включает поле с именем Price, которое, что довольно логично, представляет цену компьютера. Хотите знать пять самых дорогих компьютеров в вашей организации? Пример сценария на рис. 4 показывает эти данные.
Figure 4 Sorting the recordset (Close Figure 4)
Const adOpenStatic = 3
Const adLockOptimistic = 3

Set objConnection = CreateObject("ADODB.Connection")
Set objRecordSet = CreateObject("ADODB.Recordset")

objConnection.Open _
    "Provider = Microsoft.Jet.OLEDB.4.0; " & _
        "Data Source = C:\Scripts\Test.mdb"

objRecordSet.Open "SELECT Top 5 * FROM Computers Order By Price", _
     objConnection, adOpenStatic, adLockOptimistic

objRecordSet.MoveFirst

Do Until objRecordset.EOF
    Wscript.Echo objRecordset.Fields.Item("ComputerName")
    objRecordset.MoveNext
Loop

objRecordSet.Close
objConnection.Close
Как вы видите, в данном SQL-запросе мы сделали две вещи: отсортировали набор записей по полю Price (Order By Price) и запросили только первые пять компьютеров (т.е., пять самых дорогих); это выполняется с помощью SELECT Top 5. Если бы нам был необходим список из 10 самых дорогих компьютеров, мы бы использовали следующий запрос:
objRecordSet.Open _
  "SELECT Top 10 * FROM Computers " & _
  "Order By Price", _
    objConnection, adOpenStatic, _
    adLockOptimistic
Примечание. Мы также добавили код, выполняющий просмотр набора записей и отображающий имена всех компьютеров. В предыдущих сценариях этот код не требовался, поскольку возврат и отображение данных не осуществлялись.
Кроме того, первые 10 процентов можно получить с помощью следующего запроса:
objRecordSet.Open _
  "SELECT Top 10 PERCENT * " & _
  "FROM Computers Order By Price", _
    objConnection, adOpenStatic, _
    adLockOptimistic
Но что, если необходимо узнать самые дешевые компьютеры? Никаких проблем; воспользуемся этим же методом, только в этот раз выполним сортировку набора записей в порядке убывания (т.е., от наименьшей цены до наибольшей). Другими словами, мы используем этот запрос вместе с ключевым словом DESC, означающим, что набор записей будет отсортирован в порядке убывания:
objRecordSet.Open _
  "SELECT Top 5 * FROM Computers " & _
  "Order By Price DESC", _
    objConnection, adOpenStatic, _
    adLockOptimistic
Видите? Мы же говорили, что это очень полезно.
Вот еще два сценария, которые могут быть для вас интересными. Предположим, в базе данных имеется поле с именем Budgeted, отслеживающее денежную сумму, изначально выделенную для компьютера. Хотите сравнить фактически расходы с расходами по смете? Следующий запрос возвращает список компьютеров, стоимость которых превышает сумму, указанную в смете:
objRecordSet.Open _
  "SELECT * FROM Computers " & _
  "Where (Budgeted < Price)", _
    objConnection, adOpenStatic, _
    adLockOptimistic
Следующий запрос вычисляет среднюю стоимость всех компьютеров (SELECT AVG(Price) FROM Computers) и возвращает список компьютеров, стоимость которых ниже средней:
objRecordSet.Open _
  "SELECT * FROM Computers " & _
  "WHERE Price < " & _
  "(SELECT AVG(Price) FROM Computers)", _
    objConnection, adOpenStatic, _
    adLockOptimistic
Да, вы правы, мы использовали запрос SELECT в предложении Where. Как это работает? А это уже другая история для следующего раза. Но, как вы видите, он позволяет получать все типы полезных данных с помощью SQL-запросов.

Мораль истории
Как было отмечено в начале статьи, мы не были уверены, что когда-нибудь снова захотим написать статью о создании сценариев баз данных. Однако мы рады, что написали ее, отчасти потому, что некоторых из рассмотренных запросов будут для вас полезными, но также и из-за следующего: если бы мы не написали эту статью сейчас, рано или поздно на бы пришлось это сделать. В конце концов, даже сэр Артур Конан Дойль был вынужден воскресить Шерлока Холмса. Сэр Артур предпринял первые пробные шаги в этом направлении, написав новую книгу о Шерлоке Холмсе, действие которой происходило до смерти детектива. Хотя потом он уступил давлению со стороны своих читателей и состряпал довольно-таки сомнительную историю инсценировки Шерлоком Холмсом собственной смерти. Оказалось, что все, и поэтому все остальное, были в полном порядке.
Самое интересное, после выхода последней книги о Шерлоке Холмсе число подписчиков журнала The Strand Magazine увеличилось на 30 000. В ответ на это благодарные издатели сэра Артура в Великобритании и США сделали его самым высокооплачиваемым писателем в мире.
Хм...сэр Артур Конан Дойль вернул всеми любимого героя и стал самым высокооплачиваемым писателем в мире; теперь и программисты корпорации Майкрософт вернулись к популярной теме – не пришлось даже инсценировать чью-либо смерть. Хотите знать, заметили ли читатели журнала TechNet Magazine?

Головоломка-сценарий доктора Скрипто.
Задача на этот месяц потребует не только умения решать головоломки, но и навыков создания сценариев.

Апрель 2008 г.: выберите букву
В головоломке за этот месяц необходимо вставить буквы A – O в синие клетки, чтобы получить имя функции VBScript. Каждая буква (A – O) используется только один раз, буквы располагаются не в алфавитном порядке. Вставленная буква может быть началом имени функции, концом имени функции или находится в середине имени. Например, в следующую строку необходимо вставить букву D, чтобы получилось имя функции IsDate:
Теперь попробуйте; вставьте буквы от A до O, чтобы получить имя функции VBScript в следующей таблице:

Головоломка-сценарий доктора Скрипто.
Ответ: выберите букву, апрель 2008 г.

Программисты корпорации Майкрософт работают... ну хорошо, получают зарплату в корпорации Майкрософт. Когда они не играют в бейсбол, не тренируют бейсбольную команду, не смотрят бейсбол и не занимаются другими делами, они ведут колонку в Центре сценариев TechNet. Веб-узел проекта находится по адресу www.scriptingguys.com.


 На страже безопасности: Ну и где мои личные данные?
На страже безопасности
Ну и где мои личные данные?
Франк Симуржи (Frank Simorjay)

Все вокруг твердят о том, что личные данные — самая важная информация, что ее необходимо защищать. Но чтобы защищать личные сведения, нужно хорошо понимать, какие именно данные хранятся у вас на компьютере. Да, можно сказать, что все, что хранится в памяти компьютера, разглашению не подлежит. Но в таком случае, что именно вы понимаете под словом «все»?
Давайте рассмотрим этот вопрос чуть подробнее: попробуем классифицировать конфиденциальные данные и определить, какие из них могут оказаться на вашем компьютере. Во-первых, конфиденциальность информации — это зачастую понятие субъективное. Некоторые, к примеру, пугаются, даже если просто видят собственное имя в результатах поиска. Надо понимать, что если вы не провели последние несколько лет в пещере, то кто-то уже наверняка писал про вас Интернете. Проверить это нетрудно: воспользуйтесь любимой поисковой системой. Учитывайте только, что чем более распространенное у вас имя, тем сложнее будет отфильтровать записи, относящиеся именно к вам. Возможно, вы решите, что это и к лучшему.
Если вы займетесь такой проверкой, загляните на веб-узлы социальных сетей: LinkedIn, Facebook, YouTube. Даже удивительно, насколько легко в Интернете собирается и распространяется личная информация, которую когда-то не так просто было достать.
Знать, какую именно информацию нужно защищать, — это целая наука. Для начала небесполезным будет проверить, нет ли у вас на компьютере конфиденциальной информации (вы можете даже не знать о том, что она есть). Вы, возможно, считаете, что любая информация, относящаяся непосредственно к вам, является конфиденциальной. На самом деле, личные данные можно разделит на две категории. Первая категория — это данные, которые легко можно получить из разных источников; вторая — это, так скажем, более секретная информация, которая может стать ключом к вашим личным данным.
Широкодоступная информация конфиденциальной обычно не считается. К этой категории данных относится имя и фамилия человека, а также часто номер телефона, адрес, электронная почта, пол, в большинстве случаев — место работы, сведения об образовании. Все это можно без труда найти в Интернете или в изданиях вроде телефонных справочников. Если кто-то сможет получить информацию этого типа (скажем, кто-то найдет адрес вашей электронной почты и засыпет нежелательными сообщениями), это доставит вам некоторые неприятности, но к краже персональных данных это все-таки не приведет.
Конфиденциальная информация — это сведения, которые могут дать доступ к персональным данным человека. В качестве примера можно привести номер социального страхования (или аналогичный уникальный государственный идентификационный номер), номера счетов и банковских карт (особенно если рядом указан срок действия кредитной карты и идентификационный номер владельца), номер водительского удостоверения, а также отпечатки пальцев и прочие биометрические данные. Если такие сведения укажутся в руках злоумышленника, вы можете всерьез пострадать. Важно знать, где и как хранится информация такого рода, будь то Интернет или ваш собственный компьютер, и контролировать ее распространение. Теперь рассмотрим несколько простых способов найти персональные данные на жестком диске.

Поиск личных данных на диске компьютера
Конфиденциальные данные могут храниться где угодно. Даже в мусоре можно обнаружить какие-то обрывки личных сведений. Для защиты важной информации требуется определенная доля усердия и внимательности. Я бы любому порекомендовал разориться на хороший уничтожитель документов и отправлять туда все, что содержит информацию личного характера.
Что касается персональных данных в памяти компьютера, то обнаружить их порой не проще, чем защитить. Windows Vista® вкупе с несколькими инструментами поиска способна найти информацию в системе, но нужно знать, что искать.
В качестве примера воспользуемся несколькими простейшими средствами, которые помогут проиллюстрировать, о чем идет речь. Использовать мы будем сценарии Windows PowerShell®. Эта оболочка, помимо всего прочего, имеет широчайшие возможности сравнения данных строкового типа. В нашем случае будут использоваться регулярные выражения. Windows PowerShell (см. microsoft.com/powershell) — это весьма мощный инструмент, который быстро взяли на вооружение администраторы систем.
Кроме того, мы задействуем программу findstr.exe: она поможет отфильтровать ошибочные результаты, то есть файлы, в которых, на первый взгляд, конфиденциальная информация обнаружена, а на самом деле ее там нет (это происходит из-за некоторой произвольности строк данных в бинарных файлах). Другими словами, в нашем эксперименте будут участвовать только текстовые файлы.
В качестве примера возьмем персональные данных двух типов: номера социального страхования и данные кредитных карт. Если подобная информация хранится на жестком диске в виде простого текста, ее должно быть несложно найти. И в том, и в другом типе данных используется стандартный шаблон представления, поэтому для поиска такой информации можно без труда создать сценарий. Другой вопрос, зачем ее вообще хранить на компьютере –– это ведь достаточно важные сведения. Если по какой-то причине вы их держите на компьютере, следует обеспечить их безопасность. Чуть ниже мы коснемся этого вопроса. Существуют, разумеется, и другие виды конфиденциальных данных, например имя пользователя и пароль, но мы их рассматривать не будем.

Поиск номера социального страхования
Можно задать строку, по которой будут обнаруживаться файлы, содержащие номер социального страхования США. Устроен он так: XXX XX XXXX или XXX-XX-XXXX. В Windows PowerShell для этого требуется следующий код:
Get-ChildItem  -rec -exclude *.exe,*.dll |
select-string " [0-9]{3}[-| ][0-9]{2}[-| ]
[0-9]{4}"
Можно также при помощи findstr.exe исключить из поиска бинарные файлы:
Get-ChildItem  -rec | ?{ findstr.exe
/mprc:. $_.FullName } | select-string
" [0-9]{3}[-| ][0-9]{2}[-| ][0-9]{4}"
В этом примере выражение Get-ChildItem –rec проводит рекурсивный поиск по файлам начиная с того каталога, в котором оно было запущено. Findstr.exe ищет строки в файлах, а Select-string — это функция поиска Windows PowerShell. (Findstr.exe действует примерно так же, как она, но в подробности вдаваться не будем.) Заметим, что первый пробел в регулярном выражении можно опустить. Он нужен только для того, чтобы ограничить количество ошибочных результатов, например исключить строки реестра вида HKLM\SOFTWARE\tool\XXX-XX-XXXX.
Наш шаблон поиска вернул тестовый файл. Мы сохранили его во вложенном каталоге. Кроме того, он нашел в XML-файле примеры, совпадающие с шаблоном данных крединой карты и номера социального страхования (см. рис. 1).
Figure 1 Результаты поиска по шаблону номера
Figure 1 Результаты поиска по шаблону номера
В первом примере мы исключили из поиска все файлы с расширением EXE и DLL, поскольку они могут дать ошибочные результаты. В некоторых случаях могут быть и другие типы файлов, не относящиеся к делу. Их тоже можно исключить из поиска, чтобы оптимизировать процесс.
Чтобы найти конкретный номер страховки, можно использовать следующий код. (Вместо 123 45 6789 нужно подставить искомый номер.)
Get-ChildItem  -rec | ?{ findstr.exe
/mprc:. $_.FullName } | select-string
"123 45 6789","123-45-6789"
Результаты такого поиска приведены на рис. 2.
Figure 2 Поиск конкретного номера
Figure 2 Поиск конкретного номера

Поиск данных кредитной карты
Найти данные кредитных карт немного сложнее, поскольку форматы ее представления различаются. Еще хочется максимально исключить ошибочные результаты (строки, которые только с виду похожи на номер кредитной карты). Впрочем, полностью избавиться от них, наверное, не удастся.
Мы воспользуемся данными, которые приводит Майкл Джайлленд (Michael Gilleland) в работе «Анатомия номеров кредитной карты» (см. merriampark.com/anatomycc.htm). Например, в условиях поиска будет указано, что первой цифрой в номере должна стоять цифра 4, 5 или 6: это основной промышленный идентификатор крединой карты.
Мы составили шаблоны строк, позволяющие найти номера карт Discover, MasterCard и Visa. В Windows PowerShell код будет выглядеть так:
Get-CchildItem  -rec | ?{ findstr.exe
/mprc:. $_.FullName } | select-string
 "[456][0-9]{15}","[456][0-9]{3}[-| ][0-9]{4}
[-| ][0-9]{4}[-| ][0-9]{4}"
В примере, приведенном на рис. 3, мы исключили из поиска файлы с расширением RTF, RBL и H. Кроме того, этот код позволяет найти номера карт, цифры в которых указаны без пробелов и дефисов. Это в некоторых случах дает слишком большое количество результатов. Ниже приведена альтернативная команда, которая выполняет ту же функцию, но опускает номера, записанные всплошную.
Figure 3 Исключение ошибочных результатов поиска
Figure 3 Исключение ошибочных результатов поиска
Get-ChildItem  -rec | ?{ findstr.exe
/mprc:. $_.FullName } | select-string
"[456][0-9]{3}[-| ][0-9]{4}[-| ][0-9]{4}
[-| ][0-9]{4}"
Поскольку номера карт American Express устроены совсем по-другому, их мы ищем отдельно. В Windows PowerShell этот код будет выглядеть так:
Get-ChildItem -rec | ?{ findstr.exe
/mprc:. $_.FullName } | select-string
"3[47][0-9]{13}","3[47][0-9]{2}[-| ][0-9]{6}
[-| ][0-9]{5}"
И здесь мы тоже можем столкнуться с избыточностью результатов. Альтернативная команда для American Express выглядит так:
Get-childitem -rec | ?{ findstr.exe
/mprc:. $_.FullName } | select-string
"3[47][0-9]{2}[-| ][0-9]{6}[-| ][0-9]{5}"
Когда я писал статью, я проверил функции, приведенные в примерах, и с удивлением обнаружил на своем компьютеры файлы с моим номером социальной страховки. Он был в какой-то заметке, которую я написал давным-давно и о которой совершенно забыл. Тут я опять задумался о том, что нужно записывать, а что не нужно.
Если вам все-таки нужно хранить информацию на компьютере, воспользуйтесь для ее защиты специальными средствами, например программой Password Safe (см. passwordsafe.sourceforge.net). Также можно шифровать содержимое жесткого диска при помощи средства BitLockerTM. Набор для шифрования данных портативных компьютеров, наконец, позволяет надежно защитить важные данные. Все эти средства как минимум смогут усложнить жизнь тем, кто попытается украсть персональные данные с компьютера.

Заключение
Найти персональные данные на компьютере довольно просто. Гораздо сложнее помнить о том, что она там есть. Просто нужно понять, что злоумышленник, получивший доступ к системе, может при помощи тех же самых методов, что используете вы сами, без труда найти все, что ему нужно. Проявляйте осторожность, когда вводите где-то личные данные. Если вам обязательно нужно хранить конфиденциальную информацию на компьютере, шифруйте ее.
Я хотел бы поблагодарить Мэтта Хайнджи (Matt Hainje) за помощь в отладке сценариев Windows PowerShell.

Франк Симуржи (Frank Simorjay) — технический руководитель программы в группе Solution Accelerator — Security and Compliance корпорации Майкрософт. Он занимается разработкой решений в сфере безопасности, предназначенных для клиентов Майкрософт, участвует в качестве докладчика в различных мероприятиях, в частности, на выставке Secure World Exposition (он один из ее основателей), проводит семинары по безопасности; немало книг и докладов на эту тему написано с его участием. Последняя его работа — решение Malware Removal Starter Kit.


 Документы о рабочей среде: Развертывание Windows XP с WAIK
Документы о рабочей среде
Развертывание Windows XP с WAIK
Уэс Миллер (Wes Miller)

Клиенты бывают удивительно, потрясающе разными. В идеальном мире, все клиенты все время будут находится в одинаковой фазе развертывания одной и той же версии. Это, бесспорно, упростит тестирование. Впрочем, на самом деле все не так. В то время, как некоторые из вас уже самозабвенно погрузились (а может быть, даже и закончили)
развертывать Windows Vista®, или с нетерпением ждут момента, когда же можно будет развертывать на производстве первый контроллер домена «только для чтения» (RODC) Windows Server® 2008, ничуть не меньше людей, которые постоянно напоминают мне (спасибо, кстати), что они в самой середине запланированного развертывания Windows® XP или Windows Server 2003 R2.
Недавно я получила сообщение от читателя, который спрашивал, что, дескать, насчет пакета автоматической установки Windows и Windows XP? Как, спрашивал он, использовать WAIK для развертывания Windows XP? Что ж, я постараюсь ответить.

Посмотрим на WAIK еще раз
Чуть больше года назад, я написала статью, посвященную WAIK, набору мощных средств, помогающих развертывать Windows Vista (technetmagazine.com/issues/2007/01/DesktopFiles). Теперь WAIK поможет и с развертыванием Windows Server 2008; у этих операционных систем новая инфраструктура установки, а средства, включенные в WAIK, предназначены, в первую очередь, именно для них. К лучшему это или к худшему, но версии Windows до Windows Vista, которые используют атоматическую установку или Sysprep, потребуют соответствующих средств. Но я хотел еще раз обратить внимание на те средства WAIK, которые могут помочь развертывать Windows XP.
Windows PE 2.0 Начать можно, в качестве аналогии, с двойной загрузки Windows PE 2.0 и Windows XP в моей статье за февраль 2008 (technetmagazine.com/issues/2008/02/DesktopFiles). Вкратце: если Windows PE 2.0 работал в том сценарии, он будет работать и здесь. Нужно задать себе вопрос, «Собираюсь ли я развертывать Windows XP в системах, имеющих меньше 512Mб ОЗУ или не поддерживающих стандарт Advanced Configuration and Power Interface (ACPI) с Windows Vista?» Если ответ хотя бы на одну часть «да», понадобится PE 1.6, причем надо убедиться, что у вас есть к ней доступ как часть гарантии на программное обеспечение. В свободном доступе сегодня есть только Windows PE 2.0 и 2.1, версия 1.6 и старше требуют членства в гарантии на программное обеспечение.
ImageX/WIM ImageX и формат образов Windows (WIM) были созданы для работы с любой версией Windows, начиная с Windows 2000, будь то файловая система NTFS или FAT, поэтому да, совершенно верно, вы можете использовать их для развертывания Windows XP (или Windows Server 2003).
Службы развертывания Windows Службы развертывания Windows (WDS), заменивщие службы удаленной установки (RIS), поставлялись как дополнительная часть WAIK 1.0 и, после обновления, были интегрированы в Windows Server 2003 SP2. Теперь они поставляются в улучшенном варианте с Windows Server 2008, но все еще прекрасно подходят для развертывания Windows XP.
Если у вас сервер RIS или WDS, работающий в режиме поддержки предыдущих версий, это вам не подходит. Но если вы начали переход на WDS при работе в смешанном или стандартном режиме, тогда да, следует обратить внимание на WDS как на возможную часть схемы развертывания Windows XP.
Диспетчер установки Windows (WSIM) Вот WSIM подходит только для развертывания Windows Vista и Windows Server 2008. Если вы разворачиваете Windows Server 2003 или более раннюю систему, WSIM не поможет.

Средства развертывания Windows XP
Windows XP (как все версии Windows с Windows NT® 4.0 до Windows Server 2003) можно развертывать либо через файл unattend.txt, либо через «образ». В этой статье я не буду задерживаться на автоматической установке, потому что она уже, фактически, ушла в прошлое. Если вы хотите пользоваться WAIK, точнее, ImageX, вы будете делать развертывание на основе образа. Поэтому вместо unattend.txt понадобится Sysprep.inf, формат файла ответов для Sysprep.
Используя здесь термин «образ», я не говорю о том, как создать образ ОС. Исторически использовались средства создания образов вроде Ghost, PQDI или другие. До ImageX, Майкрософт не обеспечивала способа взять ОС и приложения после Sysprep и скопировать на один или несколько компьютеров.
При построении образа Windows важно помнить две вещи:
  • Кроме случая перехода с однопроцессорной на многопроцессорную систему, нельзя изменять слой абстрагирования оборудования (HAL). Как я упоминал в предыдущих статьях, нельзя безопасно изменить образ, перемещаясь между архитектурами ACPI и не-ACPI.
  • Можно менять контроллеры запоминающих устройств. Существует популярное заблуждение, что этого делать нельзя. Чтобы это сделать, нужно сперва с помощью Sysprep установить все контроллеры запоминающих устройств, которые могут, в принципе, понадобиться целевым компьютерам, а после развертывания применить Sysprep, чтобы удалить все драйверы, кроме того, который пригодился. Я к этому вскоре вернусь.
Имея в виду две эти вещи, можно подготовить образ на одной системе и заставить его работать на любой другой, использующей тот же или совместимый HAL.

Рабочие средства
Работая с Windows XP по схеме разворачивания из образа, следует всегда держать под рукой три вещи.
Ref.chm Ссылка на текстовый файл автоматической установки. Не забывайте, что лучше всего настраивать дополнительные компоненты в любой версии Windows (до Windows Vista) до создания образа. Но если вам действительно надо добавлять дополнительные компоненты после установки, это можно сделать с помощью sysocmgr.exe, это описано на странице support.microsoft.com/ kb/222444. Если вы разворачиваете Windows XP Tablet PC Edition, шаги, перечисленные на странице go.microsoft.com/fwlink/?LinkId=108589, позволят создать один образ, устанавливающий компоненты Tablet PC на соответствующие системы.
Программа Sysprep Поддерживаемый Майкрософт способ создавать дубликаты систем на диске. Я все еще иногда сталкиваюсь с советами использовать сторонние преобразователи идентификатора безопасности (SID); как всегда, я рекомендую использовать только Sysprep, потому что другие средства часто пропускают важнейшие места расположения Windows SID (особенно закрытые).
Диспетчер установки Самый быстрый и простой способ создать файл sysprep.inf. Как всегда, используйте правильную версию; обычно ту же, что и развертываемая версия Windows (например, Windows XP SP2 со средствами развертывания Windows XP SP2).
Три эти вещи вы найдете на компакт-диске Windows XP. Обновленные версии доступны по адресу go.microsoft.com/fwlink/?LinkId=107541.
Не помешает иметь под рукой tap.exe. Эта служебная программа включена в набор средств Windows XP Embedded (go.microsoft.com/fwlink/?LinkId=108590), даже в бесплатной ознакомительной версии. В Windows PE tap.exe возвращает информацию о всех устройствах Plug and Play (PnP), которые нашла Windows PE; интереснее то, что она сообщит, какой HAL выбрала для устройства Windows PE (см. рис. 1). Это важно потому, что логика, с помощью которой Windows PE выбирает HAL , так что применяет для определения HAL полная установка Windows, поэтому tap.exe под Windows PE – хороший способ проверить, какой HAL порекомендует Windows для конкретной системы.
Figure 1 Служебная программа tap.exe скажет, какой HAL был выбран Windows PE для определенной системы
Figure 1 Служебная программа tap.exe скажет, какой HAL был выбран Windows PE для определенной системы

Создание образа
Чтобы создать свой образ Windows XP для развертывания с помощью ImageX, можно выполнить следующие шаги (да, можно использовать другие средства создания образа, но вы вскоре увидите, почему ImageX – идеальное средство для этой задачи).
Первый шаг – собрать все необходимые средства и компоненты, включая Sysprep, диспетчер установки, ImageX и Windows PE (версии 2.0 или 1.6, в зависимости от потребностей и возможностей). Запомните, что если вы используете версию 2.0 с ImageX, придется использовать bootsect.exe с параметром /nt52, создавая раздел, чтобы код загрузки был совместим с Windows XP.)
Конечно, вам понадобится ПК с установленной Windows XP (любой SKU), а также последние обновления для Windows и другого программного обеспечения. Лучше всего, если эта система никогда до этого не подключалась к домену, это уменьшает вероятность возникновения проблем с доменом или сетью. В системе должны быть установлены только безопасные в отношении создания образов приложения, то есть ничего, что бы отдельно сохраняло имя компьютера, SID, домен или пользовательскую информацию, которые Sysprep пропустит или не сможет подставить во время замены SID. Кроме того, она должна использовать наиболее часто встречающийся HAL. Для нового оборудования это будет, скорее всего, многопроцессорный HAL с ACPI, учитывая преобладание ACPI и многоядерности (а до того – технологии Hyper-Threading, которая тоже использовала HAL MP).
Теперь системаWindows XP настраивается так, как нужно для конечных пользователей. Устанавливаются все приложения, которые нужны большинству пользователей (и все те, которые нельзя устанавливать автоматически). Устанавливаются или удаляются все дополнительные компоненты Windows, чтобы система была настроена так, как нужно для конечного пользователя. Затем настраивается рачобий стол. Зайдите как администратор и внесите все необходимые изменения в профиль, в том числе фон рабочего стола, экранную заставку, меню «Пуск» и так далее. По умолчанию (с Windows XP SP2), Sysprep скопирует настройки учетной записи администратора в учетную запись пользователя по умолчанию.
Затем запустите диспетчер установки (см. рис. 2), указав, что вам нужен новый файл Sysprep и полностью автоматическая установка. Заметьте, что диспечтер установки потребует в некий момент ввести ключ продукта. Если у вас нет его под рукой или вы хотите написать для этого сценарий позже (и у вас нет многопользовательского лицензионного ключа), вы можете указать ключ, имеющийся по умолчанию в файле unattend.txt на компакт-дисках Windows XP или Windows Server 2003 (это позволит завершить установку, но не позволит активировать).
Figure 2 Использование диспетчера установки для создания файла ответов Sysprep
Figure 2 Использование диспетчера установки для создания файла ответов Sysprep
Вам также придется указать имя компьютера. Потом вы сможете автоматизировать этот процесс с помощью SQL или иначе, но сейчас просто введите какое-нибудь значение, а затем воспользуйтесь сценарием, чтобы измениь имя компьютера перед выполнением Sysprep, после того, как на машине развернуто WIM.
Обратите внимание, что если вы задаете пароль для учетной записи администратора, он будет использоваться только если существующая в образе учетная запись не была защищена паролем. Заметьте, что раздел присоединения к домену не позволяет шифровать учетные данные присоединения к домену. Для настройки учетной записи компьютера следует использовать учетную запись с минимальными привилегиями. Наконец, я советую использовать в диспетчере установки параметр Version String, чтобы следить за «версией» только что созданного образа.
Теперь возьмите файл Sysprep.inf, разместите вместе с sysprep.exe и setupcl.exe в каталог C:\Sysprep и добавьте в файл .inf следующее:
[Sysprep]
BuildMassStorageSection = Yes

[SysprepMassStorage]
Затем выполните Sysprep –bmsd. Это изменит sysprep.inf и добавит все известные установке Windows идентификаторы запоминающих устройств, как на рис. 3. Можно добавить еще устройства, а можно добавить их в установку Windows и еще раз выполнить sysprep –bmsd.
Figure 3 Добавление идентификаторов запоминающих устройств в sysprep.inf
Figure 3 Добавление идентификаторов запоминающих устройств в sysprep.inf
Затем, скопируйте файл sysprep.inf в общее хранилище, затем выполните sysprep.exe –factory и выключите систему. Перезагрузитесь в Windows PE и подсоединитесь к общему хранилищу UNC (рекомендуется) таким образом:
NET USE Y: \\myserver\myshare
/USER:DOMAIN\USER password
Теперь выполните захват образа таким образом:
ImageX /capture C: Y:\NewImage.wim
"Factory Mode capture from 4/1/2008"
Завершите работу системы.
Теперь у вас есть образ, который можно обновлять в режиме фабрики. Я не буду углубляться в этот вопрос; коротко говоря, режим фабрики – это самый безопасный способ поддерживать образы до тех пор, пока они не будут готовы к развертыванию. Подробности можно узнать в документации Windows XP deploy.cab, упомянутой ранее.
Когда вы готовы разворачивать образы, загрузите Windows PE и создайте нужный раздел (или разделы) с помощью Diskpart. Отформатируйте разделы командой format и примените с помощью bootsect.exe, по необходимости, загрузочный код до-Windows Vista (/nt52). Теперь соединитесь с хранилищем UNC (или другим местом, где лежат образы) таким образом:
NET USE Y: \\myserver\myshare
/USER:DOMAIN\USER password
Затем примените образ таким способом:
ImageX /apply Y:\NewImage.wim C: 1
Наконец, перезагрузитесь в режим фабрики Windows (Windows Factory Mode) и внесите необходимые обновления в образ (здесь вам понадобится файл winbom.ini; справка -- в ref.chm в deploy.cab). Winbom.ini должен во всех случаях содержать такие строки, предписывающие ему заново запечатать образ, чтобы выполнить при следующей перезагрузке мини-установку:
[FACTORY]
ResealMode = Mini
Закончив, выключите систему. Повторите шаги, использованные ранее для захвата образа, изменив команду таким образом:
ImageX /append C: Y:\NewImage.wim "Resealed
and ready for deployment – captured 4/4/2008"
Используя /append, вы сэкономите значительное количество места. Теперь вы объединили режим фабрики и запечатанные образы, поэтому между ними можно свободно переключаться. Можно использовать /delete, чтобы отказаться от ненужных образов. Имейте в виду, что это не сэкономит места, будут просто стерты ссылки на соответствующий образ. Чтобы очистить неиспользованное пространство, придется экспортировать все нужные образы.
Теперь вы знаете, как WAIK, разработанный и предназначенный для Windows Vista и Windows Server 2008, может помочь, разворачиваете ли вы последнюю версию Windows или более ранние. Конечно, нужно использовать комбинацию средств Windows XP и WAIK (в первую очередь, ImageX и, возможно, Windows PE 2.0), теперь Майкрософт обеспечивает вас всем, что нужно для развертывания любой версии Windows.

Уэс Миллер (Wes Miller) –– старший технический руководитель продуктов в CoreTrace (www.CoreTrace.com) в г. Остин, штат Техас. Ранее Уэс работал в компании Winternals Software, а также в корпорации Майкрософт в должности руководителя программы. Связаться с Уэсом Миллером можно по адресу technet@getwired.com.


 Полевые заметки: MAR – полезная инциатива
Полевые заметки
MAR – полезная инциатива
Нил Фосетт (Neil Fawcett)

Допустим, у вас в подвале лежит 5000 восстановленных ПК, а клиенты уже выстроились в очередь их покупать. Оборудование обретает новую жизнь, но операционная система... это совсем другое дело. Легальная ли это копия? На каждом ли комьпьютере вообще есть ОС? Можно ли ее перепродавать?
Новая коммерческая программа «Microsoft Authorized Refurbisher» (MAR) позволит решить эти проблемы. С первого взгляда, концепция проста: помочь коммерческим организациям брать старые ПК, устанавливать на них легальную ОС и продавать их.
Но цели программы MAR глубже. С прагматической точки зрения, это возможность выгодной сделки для Майкрософт и коммерческих восстановителей ПК. С точки зрения закона, программа помогает избегать пиратства (случайного и сознательного). С точки зрения окружающей среды, рабочее оборудование не отправляется на свалку. И наконец, она позволяет фирмам лучше понять, как работает лицензирование в корпорации Майкрософт, особенно при работе с ПК, перешедшими из одних рук в другие.
Эта программа выгодна не только Майкрософт и восстановителям ПК. Она дает преимущества и клиентам: они получают ПК, профессионально очищенный от чужих данных и снабженный подлинной версией Windows® XP Home Edition или Windows XP Professional; они могут загружать обновления и другие полезные вещи; они будут иметь доступ к будущим выпускам Windows. И все это делается на компьютере, который мог запросто отправиться на свалку и стать еще одной циферкой в борьбе против токсичного мусора.
MAR предназначена для компаний, поставляющий в среднем 5000 восстановленных ПК в месяц; они должны представить сведения о восстановлении такого количества ПК, чтобы присоединиться к программе. MAR – программа для всего мира, доступная для основных OEM-восстановителей, а также для других, оперирующих и имеющих основной офис в США или Канаде. В программе участвую три восстановителя, Redemtech, Techturn и Apto Solutions.
Лицензирование новых продуктов в области программного обеспечения может оказаться трудной и для продавцов, и для покупателей, а на рынке восстановленных компьютеров вопрос, что можно и что нельзя делать со старой копией Windows, еще сложнее. MAR освобождает восстановитилей от этих проблем. Он содержит набор средств для установки, включая набор предустановки для восстановителей (Refurbisher Preinstallation Kit) (RPK), который упрощает предустановку Windows XP на различные восстановленные ПК. Каждая лицензия сопровождается сертификатом подлинности (COA) от Майкрософт. Если ПК восстановлен, все еще имеет COA, а у компании есть оригинальные носители с данными восстановления или образ на жестком диске, то новая лицензия Windows не нужна. MAR создана для упрощения процесса в том случае, если образа или носителя с данными восстановления нет.
Повторное использование компьютеров, через перепродажу, восстановление или передачу в дар, позволяет расширить доступ к технологиям, особенно для людей, лишенных благ технического прогресса. Оно может помочь ограничить растущее влияние промышленности на окружающую среду. Рынок компьютеров, бывших в употреблении, так называемый «вторичный рынок ПК», уже продемонстрировал способность распространять технологии в развивающихся странах.
Рынок восстановленных ПК растет; предполагается, что миллионы комьютеров могут не оказаться на свалке, если корпорации будут искать для них применение. MAR выполняет не только стратегическую роль в Майкрософт, но и помогает крупным фирмам реализовывать решения, основанные на дешевом оборудовании, помогающие и другим людям. Учитывая растущее внимание к проблемам окружающей среды, правильное избавление от ПК становится предельно важным. Такие инициативы, как программа MAR, позволят дать новую жизнь старым компьютерам, помогая всем, кто ищет дешевое оборудование и не давая ему отправиться на токсичную свалку. Просто помогая лицензировать программное обеспечение, программа делает большой шаг в сторону привлекательных для рынка восстановленных ПК. Больше информации о программе MAR можно найти по адресу microsoft.com/oem/mar.

Нил Фосетт (Neil Fawcett) уже больше 20 лет пишет и редактирует публикации в сфере ннформационных технологий. Также он выступает на различных собраниях и опубликовал 13 книг на темы, связанные с информационными технологиями. Прежде чем стать писателем, Нил работал в Силиконовой долине как разработчик программного обеспечения и проектировщик оборудования.


 О Windows из первых рук: Общие и сходные с ними ресурсы
О Windows из первых рук
Общие и сходные с ними ресурсы
Рэймонд Чен (Raymond Chen)

Вы когда-нибудь задумывались над тем, почему при удалении программ Windows® иногда спрашивает, действительно ли нужно удалить файл, который «может помешать правильной работе других приложений»? Во-первых, это сообщение (изображенное на снимке экрана) выдает не Windows, а программа удаления. Таким образом, правильным вопросом будет: «Почему программа удаления приложений показывает это диалоговое окно?» Это отличный пример вопроса, заданного пользователю, на который у пользователя не может быть ответа. Что же приводит к такому плачевному положению дел?
Для управления счетчиком ссылок на файлы, используемые более чем одним приложением (как, например, библиотека времени исполнения MFC, которая используется многими никак не связанными друг с другом программами), программа установки создает запись в разделе реестра SharedDLLs. В этой записи содержится имя файла и счетчик ссылок на него. Если запись для некоторого файла уже существует, счетчик ссылок увеличивается на 1. Если записи нет, счетчик устанавливается равным 1. Соответственно, при удалении программ счетчик ссылок каждый раз уменьшается на 1, и как только он станет равен 0 файл будет удален, потому что никакая программа его больше не использует. По крайней мере, в теории должно быть так.
Should I delete it or not?
Should I delete it or not?
Серьезный недостаток этой модели в том, что она предполагает, что все согласны играть по правилам. Однако существует огромное искушение схитрить, потому что последствия обмана обычно никак не вредят обманщику.
Рассмотрим, например, некую программу, использующую библиотеки времени исполнения MFC, которая при установке просто копирует эти библиотеки в системный каталог, не обновляя счетчик ссылок. А при удалении эта программа просто стирает библиотеки. Что произойдет, если эта программа попытается сосуществовать с программой, которая работает по правилам? Вот основная последовательность событий.
  1. Установка «хорошей» программы: библиотеки установлены, счетчику ссылок присвоено значение 1.
  2. Установка «плохой» программы: библиотеки установлены, но счетчик ссылок не изменился.
  3. Удаление «плохой» программы: библиотеки удалены.
В результате этой последовательности событий «хорошая» программа перестанет работать, потому что библиотек больше нет.
Еще один вариант.
  1. Установка «хорошей» программы: библиотеки установлены, счетчику ссылок присвоено значение 1.
  2. Установка «плохой» программы: библиотеки установлены, но счетчик ссылок не изменился.
  3. Удаление «хорошей» программы: значение счетчика ссылок уменьшается до 0, библиотеки удаляются.
В результате этой последовательности событий перестанет работать «плохая» программа.
Авторы «хорошей» программы понимают: «Так, мы не можем помешать «плохой» программе нас обмануть, но по крайней мере мы можем попробовать не обманывать «плохую» программу». В результате перед тем как стереть файл они останавливают свою программу и показывают сообщение с предупреждением: «Ой-ей-ей, я тут файл собираюсь стереть, можно?» Если «плохая» программа, которая использует этот файл, еще не удалена, то она перестанет работать. И если у пользователя есть «плохая» программа, то он должен нажать кнопку «Не стирай». В настоящем диалоге другие слова, но вы знаете, о чем я говорю. Даже легендарный Джеффри Рихтер (Jeffrey Richter) в 1996 году рекомендовал такой подход в своей статье в журнале «Системы Microsoft».
К сожалению, в результате пользователю приходится отвечать на вопрос, на который он не может ответить правильно.
Конечно, фанатикам контроля, требующим от Windows возможности переопределить все без исключения, это диалоговое окно должно понравиться. И вот повсеместно программы-деинсталляторы предоставляют вам пофайловый контроль над процессом удаления приложений. Так что будьте осторожны в своих просьбах — вы можете получить то, что просите.

Рэймонд Чен (Raymond Chen)на своем веб-узле The Old New Thing (Хорошо забытое старое) и в одноименной книге (издательство Addison-Wesley, 2007 г.) рассказывает об истории развития Windows и касается вопросов программирования в среде Win32. Он хотел бы знать, появится ли в течение его жизни практически осуществимая технология термоядерного синтеза.