Вопросы и ответы по SQLТриггеры, срабатывающие при входе в систему, средства дефрагментации файлов данных и другое

Под редакцией Нэнси Мичелл (Nancy Michell)

Настройка служебной учетной записи

Совет: Используйте более защищенные пароли

SQL Server 2000 сохраняет две копии пароля. Одна — это исходный пользовательский пароль, другая — его версия, в которой все буквы находятся в верхнем регистре.

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

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

Например, если имя пользователя SQLCOMMUNITY, пароль для SQL Server можно сбросить, выполнив следующую команду:

Use Master;
ALTER LOGIN SQLCOMMUNITY WITH PASSWORD = 'k3t9h4s8wJF7t';

Для пользователя SQL Server с именем SQLCOMMUNITY эта команда сбросит старый пароль и установит новый пароль "k3t9h4s8wJF7t".

В.: В SQL Server™ 2000 служебная учетная запись для механизма и агента сервера SQL устанавливалась с помощью приложения «Службы» в пункте «Администрирование панели управления ОС». По слухам, в SQL Server 2005 будут использоваться средства диспетчера настройки. Почему нельзя по-прежнему использовать средства Windows?

О.: SQL Server 2005 разработан с целью повышения безопасности по сравнению с предыдущими версиями. Во многих случаях пользователи запускали бы SQL Server под одной из внутренних учетных записей, например LocalSystem. Но, как правило, у этих учетных записей Windows® или слишком мало, или слишком много прав. Для работы механизма и агента SQL Server 2005 не нужно создавать учетную запись с повышенными привилегиями Windows. Диспетчер настройки позволяет выбрать такие учетные записи, для которых нужный набор прав SQL Server и операционной системы уже установлен автоматически. Управляя же службами SQL Server с помощью средств Windows, можно не предоставить нужные или предоставить лишние права доступа.

Дополнительные сведения приведены в совете «поменять служебную учетную запись».

Кто регистрируется на моем сервере?

В: Я хочу знать, кто и когда регистрировался на моем сервере. Кроме того, я хочу разрешить доступ некоторым пользователям только в определенные периоды времени. Мне бы также хотелось знать, как отслеживать действия пользователей. Хоть что-нибудь из этого возможно?

О: Да, все перечисленные задачи можно решить, используя SQL Server 2005 с установленным пакетом обновления 2.

SQL Server 2005 может создавать триггеры входа в систему, которые в ответ на событие LOGON запускают процедуру T-SQL или вызывают сохраненную процедуру. Триггеры входа в систему можно использовать для аудита и управления пользователями, отслеживая с их помощью количество входов в систему, ограничивая возможности входа в SQL Server или ограничивая количество сеансов для определенных пользовательских имен. Это событие порождается после успешной проверки подлинности имени входа пользователя в систему, но до установления его сеанса. Следовательно, все сообщения, которые выводит триггер оператором PRINT (информационные сообщения и сообщения об ошибках), отправляются в журнал ошибок SQL Server. Если проверка подлинности пользователя при входе заканчивается неудачей, то триггеры входа в систему не запускаются.

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

ALTER TRIGGER Ops_Login
ON ALL SERVER
AFTER LOGIN
AS
PRINT SUSER_SNAME() + ' has just logged in to ' + LTRIM(@@ServerName) + ' SQL Server at '+LTRIM(getdate())
GO

Следующий запрос выводит все триггеры, установленные на серверном уровне:

SELECT * FROM sys.server_triggers;

Дефрагментация файлов: практические рекомендации

Как лучше всего избавиться от фрагментации файлов данных SQL Server? Средства дефрагментации Windows рассматривают файл данных SQL как единое целое и не дефрагментируют его.

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

Эффективность дискового ввода-вывода в основном определяют следующие факторы: правильный подбор дисков и настройка RAID; своевременное масштабирование дискового массива в случае увеличения объема ввода-вывода; поддержание соответствующей компоновки файлов журналов, данных, временных данных и резервных копий. Отказавшись от автоматического увеличения и сжатия файлов данных, тоже можно уменьшить фрагментацию файла на уровне тома. Например, если размер файла данных автоматически увеличивается 10 раз на 500 МБ, то к файлу на диске может добавиться до 10 новых фрагментов. Если же один раз вручную увеличить размер файла на 5 ГБ, добавится только 1 фрагмент.

Знаете ли вы, что когда для SQL Server настраивается служебная учетная запись Windows NT®, SQL Server устанавливает нужные ему права доступа на некоторые файлы, папки и разделы реестра Windows? Из консоли «Службы» пункта Администрирование тоже можно создать служебную учетную запись для SQL Server. Однако в этом случае нужные права и полномочия не будут установлены, что может привести к серьезным проблемам из-за отсутствия нужных параметров безопасности в упомянутых выше элементах SQL Server и Windows.

Учитывая вышесказанное, настоятельно рекомендуется использовать диспетчер настройки SQL Server вместо консоли «Службы» для изменения служебной учетной записи SQL Server или агента SQL Server. Однако даже если учетная запись изменялась из консоли «Службы», последствия этого можно устранить.

Шаг 1: Разрешите все права доступа к следующим разделам и подразделам реестра:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\90
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\<MSSQL.x>

Шаг 2: Установите полный доступ стартовой учетной записи служб MSSQLServer и SQLServerAgent (локальной или доменной учетной записи Windows NT) на следующую папку NTFS:

Drive:\Program Files\Microsoft SQL Server\<MSSQL.1>\MSSQL

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

Благодарим за технические консультации следующих специалистов по информационным технологиям корпорации Майкрософт: Кэри Готтсман, Салим Хакани, Трейс Джордан, Питер Кальбах, Эл Ноэл, Уттам Паруи, Эмбер Ситко и Бак Вуди.

© 2008 Корпорация Майкрософт и компания CMP Media, LLC. Все права защищены; полное или частичное воспроизведение без разрешения запрещено.