Sql4Enterprise


Сортировка по возрастанию - NULL не страшен

В SQL Server условие ORDER BY используется для сортировки результирующего набора по одной или группе колонок. Если вы зададите условие ORDER BY col ASC, то в самом верху выборки окажутся строки со значением NULL. Если вместо этого указать ORDER BY col DESC, то все NULLы окажутся в конце списка, но и все остальные значения тоже будут осортированы соответствующим образом.
Но, как быть, если нужно отсортировать значения по возрастанию, и в то же время, равместить строки со значением NULL в конце списка? Оказывается, и такое возможно...
Допустим, у нас есть следующая таблица:

declare @t table(number int)
insert into @t
select 1502 union all
select 734 union all
select 623 union all
select null union all
select 1990

А теперь попробуем выполнить следующий запрос:

select number from @t
order by case when number is null then 1 else 0 end, number

и полюбуемся на полученный результат

Картинка с другого сайта.
добавлено: 28 авг 11 просмотры: 3739, комментарии: 0



Конкурентный доступ в SQL Server 2008 (часть 3)

Intro В прошлой статье мы остановились на уровнях изоляции, используемых в Database Engine. Кратко напомню основные моменты. Используя уровни изоляции, можно определить, какие проблемы конкурентного доступа могут появляться, а каких можно избежать. Database Engine поддерживает следующие пять уровней изоляции, которые управляют тем, как будут выполнены операции чтения данных: READ UNCOMMITTED; READ COMMITTED; REPEATABLE READ; SERIALIZABLE; [...] читать дальше...
добавлено: 10 янв 11 просмотры: 3477, комментарии: 1



Конкурентный доступ в SQL Server 2008 (часть 2)

Гранулярность блокировок Гранулярность блокировок указывает, какой блокируется ресурс в одной попытке блокирования. Database Engine может блокировать такие ресурсы, как: строка страница индексный ключ или диапазон индексных ключей таблица экстент сама база данных Прежде всего, следует учесть, что SQL Server самостоятельно выбирает гранулярность блокировки. Строка является наименьшим ресурсом, который может быть заблокирован. Поддержка блокировки на уровне [...] читать дальше...
добавлено: 06 янв 11 просмотры: 3740, комментарии: 0



Выборка случайных строк из таблицы

Существует несколько способов случайной выборки строк из таблицы. Сегодня я продемонстрирую два из них: Способ 1: Случайное число строк DECLARE @n int SET @n=RAND()*10 SELECT TOP (@n) * FROM sysobjects Способ 2: Случайное число строк в случайном порядке DECLARE @n int SET @n=RAND()*10 SELECT TOP (@n) * FROM sysobjects ORDER BY NEWID() Второй способ не [...] читать дальше...
добавлено: 31 дек 10 просмотры: 2133, комментарии: 3



Безопасность SQL Server 2008: Роли и схемы

В своей модели безопасности Database Engine использует схемы для упрощения отношений между пользователями и объектами, поэтому съемы имеют очень большое влияние на то, как пользователь взаимодействует с Database Engine. В этой статье мы рассмотрим роль схем в безопасности Database Engine. Разделение пользователей и схем Схема является коллекцией объектов базы данных, которыми владеет один человек, и [...] читать дальше...
добавлено: 30 дек 10 просмотры: 14899, комментарии: 2



Система безопасности SQL Server 2008

Основу системы безопасности SQL Server 2008 составляют четыре базовых аспекта:

  • аутентификация
  • шифрование
  • авторизация
  • отслеживание изменений

Аутентификация требует ответа на следующий вопрос: “Имеет ли этот пользователь легитимные права  на доступ в систему?” Следовательно, эта концепция безопасности задает процесс проверки полномочий для предотвращения использования системы неавторизованными пользователями. Аутентификация может быть проверена посредством запроса пользователя предоставить, например, следующее:

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

Наиболее общий способ подтверждения аутентификации – использование имени и пароля. Эта информация оценивается системой для определения, является ли субъект допустимым пользователем. Этот процесс может быть усилен при использовании шифрования.

Шифрование данных – это процесс кодирования информации таким образом, что она становится непонятной, пока не будет дешифрована для конкретного пользователя. Для шифрования данных могут быть использованы различные методы.

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

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

Аутентификация

Система безопасности Database Engine включает две различные подсистемы безопасности:

  • безопасность Windows
  • безопасность SQL Server

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

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

В дополнение к учетной записи пользователя Windows и логину существуют также группы Windows и роли SQL Server (также называемые просто “роли”). Группа Windows является коллекцией учетных записей пользователей Windows. Назначение учетной записи пользователя членства в группе дает этому пользователю все привилегии, предоставленные группе. Аналогично, роли являются коллекцией логинов.

Основываясь на описанных выше системах безопасности, Database Engine может работать в одном из следующих режимов аутентификации:

  • режим Windows
  • смешанный режим.

Режим Windows требует учетную запись пользователя Windows исключительно для соединения с системой. Система принимает учетную запись пользователя, предполагая, что она уже проверена на уровне операционной системы. Этот вид соединения с системой базы данных называется доверительным соединением, потому что SLQ Server доверяет тому, что операционная система уже проверила эту учетную запись и соответствующий ей пароль.

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

Шифрование данных

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

Такой параметр системы, как “Главный сервисный ключ” задает ключ, который управляет всеми другими ключами и сертификатами. Сервисный главный ключ создается автоматически во время инсталляции Database Engine. Этот ключ зашифрован с использованием Windows Data Protection API (DPAPI).

Важным свойством сервисного главного ключа является то, что он управляется системой. Хотя системный администратор может выполнять некоторые задачи обслуживания, существует только одна задача, которая должна быть выполнена – копирование сервисного главного ключа. Таким образом, всегда можно восстановить ключ при его разрушении.

Главный ключ базы данных является корневым объектом шифрования для всех ключей, сертификатов и данных на уровне базы данных. Каждая база данных имеет один главный ключ базы данных, который создается при использовании оператора CREATE MASTER KEY. Поскольку главный ключ базы данных защищен главным сервисным ключом,  для системы есть возможность автоматически дешифровать главный ключ базы данных.

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

Симметричные ключи

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


Использование симметричных ключей имеет несколько преимуществ и один недостаток. Одним из преимуществ использования симметричных ключей является то, что они могут защищать значительно больший объем данных, чем два других типа пользовательских ключей. Этот тип ключей также обрабатывается значительно быстрее, чем ассиметричные ключи.

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

Язык Transact-SQL поддерживает некоторые операторы и системные функции, относящиеся к симметричным ключам. Оператор CREATE SYMMETRIC KEY создает новый симметричный ключ, а оператор DROP SYMMETRIC KEY удаляет существующий симметричный ключ. Каждый симметричный ключ может должен быть открыт, прежде чем вы сможете его использовать  для шифрования данных или защищать другой новый ключ. Для открытия ключа используется оператор OPEN SYMMETRIC KEY.

После того, как вы откроете симметричный ключ, вам нужно использовать системную функцию EncryptByKey для шифрования. Она имеет два параметра: идентификатор ключа и текст, который должен быть зашифрован. Для дешифрования используется системная функция DecryptByKey.

Асимметричные ключи

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


Язык Transact-SQL поддерживает некоторое количество операторов и системных функций, связанных с асимметричными ключами. Оператор CREATE ASYMMETRIC KEY создает новый асимметричный ключ, а оператор ALTER ASYMMETRYC KEY изменяет свойства асимметричного ключа. Оператор DROP ASYMMETRIC KEY удаляет существующий асимметричный ключ.

После создания асимметричного ключа используется системная функция EncryptByAsymKey для шифрования данных. Эта функция имеет два входных параметра: идентификатор ключа и текст, который должен быть зашифрован. Для дешифрования используется системная функция DecryptByAsymKey.

Сертификаты

Общий ключ сертификата, обычно называемый просто сертификатом, является двоичной подписью, связывающей значение общего ключа с идентификацией человека, устройства или сервиса, который содержит соответствующий личный ключ. Сертификаты вызываются и обозначаются при помощи авторизации сертификации (Certification Authority, CA). Сущность, которая получает сертификат от CA, является субъектом этой сертификации. Сертификаты содержат следующую информацию:


  • значение общего ключа субъекта;
  • информацию, идентифицирующую субъекта;
  • издателя идентифицирующей информации;
  • двоичную подпись издателя.

Основное преимущество сертификатов в том, что они освобождают хосты от необходимости поддерживать наборы паролей для индивидуальных субъектов. Когда хост, например, Web-сервер безопасности, определяет запрашивающую сторону, как доверенного пользователя, хост неявно доверяет тому, что эта запрашивающая сторона проверила идентичность сертифицированного субъекта. Сертификаты предоставляют наивысший уровень шифрования в модели безопасности Database Engine. Алгоритмы шифрования для сертификатов дают большую нагрузку на процессоры. По этой причине рекомендуется использовать сертификаты лишь при реальной необходимости.

Кроме того, стоит упомянуть, что SQL Server 2008 поддерживает две новые возможности шифрования:

  • расширенное управление ключами -  Extensible Key Management (EKM)
  • прозрачное шифрование данных – Transparent Data Encryption (TDE)

EKM позволяет сторонним производителям регистрировать их объекты в Database Engine. После того, как эти элементы будут зарегистрированы, SQL Server logins может использовать ключи шифрования, хранящиеся в этих модулях, как и средства улучшения возможностей шифрования, которые эти модули поддерживают. EKM так же осуществляет защиту данных от администраторов баз данных (за исключением членов группы sysadmin). Таким способом можно защитить систему и от пользователей с повышенным уровнем привилегий. Данные могут быть зашифрованы и дешифрованы с помощью криптографических операторов Transact-SQL, а SQL Server использует внешние элементы EKM в качестве хранилища ключа. EKM поддерживают только редакции Enterprise и Developer SQL Server 2008.

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

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


добавлено: 24 дек 10 просмотры: 5556, комментарии: 2



Тренинг «SQL Server 2008 для начинающих». Занятие 10

Внимание! 25 декабря 2010 года в помещении Дальневосточного техникума геодезии и картографии (ДВТГиК) состоится последнее в этом году, юбилейное десятое занятие тренинга «SQL Server 2008 для начинающих». Тема занятия: «SQL Server – Карьера специалиста» Начало тренинга: 14.00 Продолжительность тренинга: 2 часа Напоминаю, что участие в тренинге бесплатное! Для того, чтобы попасть на тренинг – отправьте в свободной форме [...] читать дальше...
добавлено: 20 дек 10 просмотры: 2499, комментарии: 1



Тренинг «SQL Server 2008 для начинающих». Занятие 9

Внимание! 18 декабря 2010 года в помещении Дальневосточного техникума геодезии и картографии (ДВТГиК) состоится девятое занятие тренинга «SQL Server 2008 для начинающих». Тема занятия: «Создание расширенных .NET процедур» Начало тренинга: 14.00 Продолжительность тренинга: 2 часа Напоминаю, что участие в тренинге бесплатное! Для того, чтобы попасть на тренинг – отправьте в свободной форме заявку на адрес nicholas.bayborodin@gmail.com читать дальше...
добавлено: 15 дек 10 просмотры: 1979, комментарии: 0



Выборка случайных строк из таблицы

Существует несколько способов случайной выборки строк из таблицы. Сегодня я продемонстрирую два из них: Способ 1: Случайное число строк DECLARE @n int SET @n=RAND()*10 SELECT TOP (@n) * FROM sysobjects Способ 2: Случайное число строк в случайном порядке DECLARE @n int SET @n=RAND()*10 SELECT TOP (@n) * FROM sysobjects ORDER BY NEWID() Второй способ не [...] читать дальше...
добавлено: 10 дек 10 просмотры: 1604, комментарии: 0



.Net Developer – первые шаги. Пора взрослеть

В прошлой статье мы остановились на том, что освоились с базовыми технологиями платформы, с возможностями выбранного языка программирования (напомню, что в нашем гипотетическом примере это – С#), выбрали приоритетную для себя специализацию и потихоньку начали оттачивать свое мастерство. Для того, чтобы не остановиться в своем развитии, принимаем участие Open Source проектах, возможно даже пишем потихоньку [...] читать дальше...
добавлено: 10 дек 10 просмотры: 2506, комментарии: 0