Отправляет email-рассылки с помощью сервиса Sendsay

MS SQL Server

  Все выпуски  

MS SQL Server - дело тонкое...


Информационный Канал Subscribe.Ru


#104<<  #105

СОДЕРЖАНИЕ

1.БЕЗОПАСНОСТЬ
1.1.Unchecked Buffer in SQL Server 2000 Utilities Could Allow Code Execution (Q316333)
1.2.Buffer Overruns in SQL Server 2000 Resolution Service Could Enable Code Execution (Q323875)
2.СОВЕТЫ
2.1.XML в MS SQL Server 2000 и технологиях доступа к данным (окончание)
2.1.1.SQL Server как Web-сервис
2.1.2.Заключение
2.2.10 точек защиты SQL Server
2.2.1.Если возможно, всегда используйте Windows Authentication
2.2.2.Продумайте использование учетной записи sa
2.2.3.Удалите BUILTIN/Administrators
2.2.4.Измените учетную запись, от имени которой стартует MSSQLServer
2.2.5.Проверка Failed Logins и Denied Access
2.2.6.Следите за появлением новых Service Packs и Hot Fixes
2.2.7.Защищайте расширенные хранимые процедуры
2.2.8.Измените порт, через который работает SQL сервер, и заблокируйте его
2.2.9.Предоставляйте доступ к БД посредством хранимых процедур
2.2.10.Защищайте вашу операционную систему
3.ССЫЛКИ НА СТАТЬИ
3.1.Отечественные статьи
3.2.Новые технические статьи Microsoft
4.ФОРУМ SQL.RU
4.1.Самые популярные темы недели
4.2.Вопросы остались без ответа
5.ИНФОРМАЦИЯ АВТОРА РАССЫЛКИ

БЕЗОПАСНОСТЬ

24 июля 2002г. Microsoft выпущен бюллетень безопасности: Microsoft Security Bulletin MS02-038
Unchecked Buffer in SQL Server 2000 Utilities Could Allow Code Execution (Q316333)

Обнаруженной две уязвимости: переполнение буфера DBCC позволяющее исполнить код в контексте учётной записи сервиса SQL Server, и уязвимость типа SQL injection, которой были подвержены две хранимых процедуры, используемые при репликации.

Уязвимости подвержены следующие продукты:

Microsoft Desktop Engine (MSDE) 2000
Microsoft SQL Server 2000, SP2

Заплату можно загрузить тут:

http://download.microsoft.com/download/SQLSVR2000/Update/8.00.0655/W98NT42KMeXP/EN-US/8.00.0655_enu.exe

[Содержание]

24 июля 2002г. Microsoft выпущен бюллетень безопасности: Microsoft Security Bulletin MS02-039
Buffer Overruns in SQL Server 2000 Resolution Service Could Enable Code Execution (Q323875)

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

Уязвимости подвержены следующие продукты:

Microsoft SQL Server 2000, SP2

Заплату можно загрузить тут:

http://download.microsoft.com/download/SQLSVR2000/Patch/Q323875/W98NT42KMeXP/EN-US/Q323875_SQL2000_SP2_en.EXE

[Содержание]

СОВЕТЫ

XML в MS SQL Server 2000 и технологиях доступа к данным (продолжение)
По материалам конференции "Корпоративные базы данных 2002"

Автор: Алексей Шуленин

01. Введение
02. Сохранить как XML
03. Получить как поток XML
04. XML на стороне сервера. FOR XML
05. SQLXML-классы в .NET
06. FOR XML на стороне клиента
07. XML-представление наборов данных в ADO .NET
08. Прямые XPath-запросы к объектам SQL Server
09. Аннотированные схемы
10. XML-шаблоны как разновидность хранимых процедур
11. UpdateGrams
12. XML Bulk Load
13. Доступ к SQL Server по HTTP

14. SQL Server как Web-сервис

Web-сервис - это компонент, к которому можно обращаться с помощью XML. Результаты вызова метода также оборачиваются в XML. Протокол устройства XML-сообщений, которыми обмениваются клиент и Web-сервис, называется SOAP. В отличие от RPC и других бинарных, зависимых от платформы протоколов, ориентированных на плотное взаимодействие, SOAP предусматривает работу в слабосвязанных средах (Интернет) и, будучи основан на XML, позволяет общаться компонентам независимо от операционной системе или инструмента разработки, в которых они были созданы. Потребность в удаленном взаимодействии компонентов через Интернет назрела давно. В свое время HTML-формы и ASP превратили посетителя Web-узла из пассивного зрителя, просматривающего заранее подготовленные странички, в активного участника, формирующего страницу по информации из базы на основе своих критериев. Однако эта информация доставлялась потребителю по-прежнему в HTML-формате, что, может быть, удобно с точки зрения визуального восприятия, но никуда не годится, если вы хотите, например, выцепить из полученной странички котировки акций, превратить их в recordset и передать своему приложению. Web-сервисы публикуют описания своих интерфейсов в wsdl-файлах (аналог библиотеки типов в СОМ). Например, методу, возвращающему котировки, нужно подать на вход интересующую дату и биржевой символ. Чтобы найти подходящий Web-сервис или выяснить назначение найденного, можно использовать универсальный реестр UDDI и протокол DISCO. В Visual Studio.Net входят средства создания как самих Web-сервисов, так и клиентов, их использующих. Например, не составляет труда создать Web-сервис, который будет принимать имя и параметры хранимой процедуры на SQL Server, выполнять ее и отсылать результаты клиенту. Словом, типичная трехуровневая архитектура, только клиентская компонента, компонента бизнес-логика и сервер теперь не ограничены пределами локальной сети, а находятся где угодно в Интернете. Начиная с SQLXML 3.0 в роли Web-сервиса может выступать SQL Server 2000, так что надобность в промежуточной компоненте теперь отпадает. Присутствие ПО промежуточного слоя наиболее часто оправдывают требованиями безопасности, масштабируемости и программируемости. Последние два, вероятно, наиболее честные, потому что я с трудом понимаю, как толщина middleware может влиять на устойчивость сервера к попыткам несанкционированного проникновения. Если вы дыряво настроили политики безопасности на сервере, то злоумышленник все равно на него придет независимо от того, 5 шагов ему перед этим придется сделать или 10. Вот программируемость - это уже серьезней. Т-SQL до сих пор остается странной смесью мощи и ограничений. Отсутствие многих обыденных для современных языков конструкций, не говоря уже об ООП, приводило к тому, что народ утешал себя тем, что SQL не для того предназначался, и уходил писать логику на С++, Visual Basic, Delphi и т.д. В последнее время круг задач, решаемых SQL Server, очень сильно расширился за рамки пресловутого SQL, следовательно, возможности языка программирования на серверной стороне, как бы он ни назывался, должны им соответствовать. И они будут соответствовать в следующей версии. Пункт третий - масштабируемость. С целью повышения масштабируемости и распределения нагрузки в SQL Server 2000, как известно, были введены распределенные фрагментированные представления. Несмотря на то, что благодаря этому механизму SQL Server занимает в настоящий момент первые места в рейтингах производительности, следует понимать, что в действительности это лишь первый этап на пути к базе данных, автоматически распределяемой по многим серверам в сети, когда каждый узел, получивший запрос, разбивает его на подзапросы к тем серверам, где в действительности лежат нужные данные (а если они продублированы, то к наименее загруженным). Таким образом, понятно, что все три критерия обособления являются достаточно условными, и не всегда компоненты бизнес-логики будут выноситься за пределы SQL Server. Следовательно, тот факт, что клиентское приложение сможет общаться с ним напрямую как с Web-сервисом, на самом деле очень важен. Вернемся к Скрипту 14.
Для запросов к SQL Server по SOAP мы создаем еще один подкаталог websvc виртуальной директории и присваиваем ему тип vtSOAP. Его необходимо проассоциировать с физической поддиректорией (\WebService), т.к. в ней будет храниться wsdl и др. файлы, описывающие данный Web-сервис. Не мудрствуя лукаво, обзовем его SQLSoapSample. Методами могут выступать хранимые процедуры / функции, либо хранимые шаблоны. Первые добавляются как AddStoredProcMethod. Параметрами выступают имя метода, под которым он будет виден и вызываться с клиента, имя хранимой процедуры или функции, если в SELECT участвуют несколько таблиц, соединенных оператором JOIN, то должны ли они на клиенте получаться как вложенные элементы в случае XML-вывода / связанные таблицы в случае DataSet-вывода (1 - да, 0 - как независимые), должны ли ошибки выполнения возвращаться как ошибки SOAP (1 - да, 0 - нет) и что является результатом работы метода Web-сервиса: массив элементов XML, единственный DataSet или массив DataSet'ов. В данном случае выбран второй вариант. Массив DataSet'ов имеет смысл использовать в том случае, когда внутри процедуры выполняются несколько независимых SELECT'ов. Хранимая процедура CustomerOrdersForYear состоит из одного параметризованного запроса, с которым мы работали еще со Скрипта 3.


CREATE PROCEDURE CustomerOrdersForYear @Name nvarchar(20), @Year smallint AS
SELECT c.ContactName, c.ContactTitle, o.OrderDate, o.Freight FROM Customers c
INNER JOIN Orders o ON c.CustomerID = o.CustomerID
WHERE c.ContactName like @Name + '%'  and year(o.OrderDate) = @Year

Скрипт 19

В качестве второго метода Web-сервиса выбираем шаблон из п.10 (рис.6). Он добавляется вызовом AddTemplateMethod. Параметрами служат внешнее имя метода, местоположение шаблона относительно данного скрипта и способ передачи ошибок (SOAP - да/нет). Результат шаблона можно передавать только как набор XML-элементов. Строка sqlWebSvc.SoapMethods.GenerateWSDL(); производит автоматическую генерацию wsdl-файла, который кладется в физическую директорию, соответствующую виртуальному подкаталогу типа soap. После этого Web-сервис становится доступным для обращений. Как и в классическом DCOM, на машине клиента нужно создать прокси, содержащего сигнатуру методов Web-сервиса. В графической среде разработки Visual Studio это происходит автоматически при добавлении ссылки на wsdl-файл в раздел Web References проекта. Прокси можно также сгенерировать с помощью утилиты командной строки wsdl.exe:


wsdl.exe /l:CS /o:SQLSrvWebService_Proxy.cs /n:SQLSrvWebRef
http://localhost/SQLXML3/websvc?wsdl

В качестве параметров здесь передаются язык, на котором будет создан прокси, имя файла с прокси, его пространство имен и URI Web-сервиса с его описанием в виде wsdl. Обращение клиента к Web-сервису показано в Скрипте 20.


static void SQLSrvWebService_Client()
{
 SQLSrvWebRef.SQLSoapSample proxy = new SQLSrvWebRef.SQLSoapSample();
 proxy.Credentials = System.Net.CredentialCache.DefaultCredentials;

 Console.WriteLine("----------------------------------------------------------------");
 Console.WriteLine("Результаты выполнения шаблона (всегда как массив XML-элементов):");
 object[] resultXml = proxy.ПримерВызоваШаблона("20", "1000");
 foreach (XmlElement x in resultXml)
 Console.WriteLine(x.OuterXml);

 Console.WriteLine("\n----------------------------------------------------------------");
 Console.WriteLine("Результаты выполнения хранимой процедуры (заказаны как DataSet):");
 int retVal;
 DataSet resultRel = proxy.ЗаказыКлиентаЗаГод("Maria", 1997, out retVal);

 DataRelation rel = resultRel.Relations[0];
 Console.WriteLine("\nТаблицы связаны отношением " + rel.RelationName);
 Console.Write("Родительская таблица " + rel.ParentTable.TableName + ", родительский ключ - ");
 foreach (DataColumn c in rel.ParentColumns) Console.Write(c.ColumnName + " ");
 Console.Write("\nДочерняя таблица " + rel.ChildTable.TableName + ", дочерний ключ - ");
 foreach (DataColumn c in rel.ChildColumns) Console.Write(c.ColumnName + " ");
 Console.WriteLine("");

 foreach (DataRow rParent in rel.ParentTable.Rows)
 {
  Console.WriteLine("\nТаблица " + rel.ParentTable.TableName);
  foreach (DataColumn cParent in rel.ParentTable.Columns) Console.Write(cParent.Caption
  + ": " + rParent[cParent] + "; ");
  Console.Write("\n\tСвязанные записи из таблицы " + rel.ChildTable.TableName);
  foreach (DataRow rChild in rParent.GetChildRows(rel))
  {
   Console.Write("\n\t");
   foreach (DataColumn cChild in rel.ChildTable.Columns)
   Console.Write(cChild.Caption + ": " + rChild[cChild] + "; ");
  }
  Console.WriteLine("");
 }
}

Скрипт 20

Результат выполнения шаблона получается в виде массива XmlElement, состоящего из единственного элемента, OuterXml которого показан ниже:


<Солянка xmlns:sql="urn:schemas-microsoft-com:xml-sql">
  <Employees EmployeeID="1" LastName="Davolio" FirstName="Nancy" Title="Sales Re
presentative" TitleOfCourtesy="Ms." ... />
  <Customers ContactName="Horst Kloss" Кол-во="28" /><Customers ContactName="Jos
e Pavarotti" Кол-во="31" /><Customers ContactName="Roland Mendel" Кол-во="30" />
  <Клиент Имя="Horst Kloss" Фирма="QUICK-Stop" Должность="Accounting Manager"><А
дрес><Страна>Germany</Страна><Город>Cunewalde</Город><Улица_дом>Taucherstra?e 10
</Улица_дом></Адрес><Заказы><Заказ Номер="10273"><Дата>1996-08-05</Дата><Стоимос
ть>76.07</Стоимость></Заказ><Заказ Номер="10285"><Дата>1996-08-20</Дата><Стоимос
ть>76.83</Стоимость></Заказ>...</Заказы></Клиент>
  <Сотрудник Фамилия="Fuller" Имя="Andrew"><Сотрудник Фамилия="Davolio" Имя="Nan
cy" /><Сотрудник Фамилия="Leverling" Имя="Janet" /><Сотрудник Фамилия="Peacock"
Имя="Margaret" /><Сотрудник Фамилия="Buchanan" Имя="Steven"><Сотрудник Фамилия="
Suyama" Имя="Michael" /><Сотрудник Фамилия="King" Имя="Robert" /><Сотрудник Фами
лия="Dodsworth" Имя="Anne" /></Сотрудник><Сотрудник Фамилия="Callahan" Имя="Laur
a" /></Сотрудник>
</Солянка>

DataSet как результат второго метода состоит из двух таблиц: Customers и Orders. Выбор Row Formatting = Nested на стадии определения метода Web-сервиса приводит к тому, что условие соединения таблиц в запросе (JOIN) переходит в свойство Relations объекта DataSet и позволяет для каждого клиента выбрать сделанные им заказы:


Таблица Customers
ContactName: Maria Larsson; ContactTitle: Owner; Customers_Id: 0;
 Связанные записи из таблицы Orders
 OrderDate: 03.02.1997 0:00:00; Freight: 17.92; Customers_Id: 0;
 OrderDate: 28.02.1997 0:00:00; Freight: 16.27; Customers_Id: 0;
 OrderDate: 12.05.1997 0:00:00; Freight: 188.04; Customers_Id: 0;
 OrderDate: 06.06.1997 0:00:00; Freight: 242.21; Customers_Id: 0;

Таблица Customers
ContactName: Maria Anders; ContactTitle: Sales Representative; Customers_Id: 1;
 Связанные записи из таблицы Orders
 OrderDate: 25.08.1997 0:00:00; Freight: 29.46; Customers_Id: 1;
 OrderDate: 03.10.1997 0:00:00; Freight: 61.02; Customers_Id: 1;
 OrderDate: 13.10.1997 0:00:00; Freight: 23.94; Customers_Id: 1;

Таблица Customers
ContactName: Maria Larsson; ContactTitle: Owner; Customers_Id: 2;
 Связанные записи из таблицы Orders
 OrderDate: 14.10.1997 0:00:00; Freight: 152.3; Customers_Id: 2;
 OrderDate: 02.12.1997 0:00:00; Freight: 328.74; Customers_Id: 2;
 OrderDate: 11.12.1997 0:00:00; Freight: 48.2; Customers_Id: 2;
The program '[2460] ConsoleApplication1.exe' has exited with code 0 (0x0).

[Содержание]

15. Заключение

У меня закончилось время, которое я отвел на написание данного материала. В соответствии с нашей договоренностью (п.1) я ставлю точку. Отрадно, что мы успели разобрать практически все основные моменты. Для дальнейшего чтения рекомендуются темы OpenXML, DiffGrams и XQuery. Спасибо за внимание.

[Содержание]

10 точек защиты SQL Server

По материалам статьи Brian Knight " 10 Steps to Securing your SQL Server"
Перевод: Сергея Снисаренко

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

[Содержание]

1. Если возможно, всегда используйте Windows Authentication

Почти в каждой уязвимости Microsoft SQL Server автор видел предупреждение в нижнем колонтитуле, которое обычно предостерегает, что "…хорошо было бы Вам использовать режим Windows Authentication, чтобы избежать этой проблемы…" (перефразировано, конечно). Использование режима Windows Only исключает приблизительно 95% проблем безопасности SQL Server, которые автор встречал, включая известные вирусы. Для хакера, чтобы проникнуть через вашу систему безопасности использующую режим Windows Only, необходимо сначала пройти подтверждение подлинности в домене, что является гораздо более трудной задачей, чем прохождение идентификации SQL. Что является наиболее важным, так это то, что пароли не передаются по сети, так как SQL Server будет использовать маркер пользователя.

[Содержание]

2. Продумайте использование учетной записи sa

Старайтесь никогда не использовать учётную запись sa, даже если Вы являетесь администратором баз данных (DBA). Если Вы DBA и не можете использовать Windows Authentication, создайте новую учётную запись системного администратора и используёте в последствии только её. Многим это может не понравиться, поскольку Вы измените пароль sa для всех рабочих серверов. Но, тем не менее, этот пароль необходимо изменить и он не должен быть известен разработчикам. Многие разработчики, зная пароль sa, кодируют его в своих приложениях, так как эта учетная запись имеет максимальные разрешения, после чего им не нужно беспокоиться о правах своего приложения.
Как только Вы изменили пароль sa, постарайтесь наладить систему его периодического изменения (например, поставьте себе в Outlook периодическую задачу), это позволит избежать распространения этого пароля по организации. Имейте в виду, что если человек, который знает пароль sa покинет организацию, Вам можете понадобиться несколько часов что бы сменить его на каждом SQL Server. DBA - параноик (подобный автору этой статьи) постоянно задаётся вопросом, сколько SQL серверов находится в сети, о которой он не знает. Для этих целей можно использовать бесплатные утилиты, типа "Электронный Глаз", с помощью которых можно находить функционирующие в вашей сети SQL серверы, у которых sa без пароля (или, которые имеют простой пароль). Загрузить одну из таких утилит - Retina SQL Worm Scanner (Версия 1.0.0.0) можно по этой ссылке:
http://www.eeye.COM/HTML/Research/Tools/Retina SqlWorm.exe

[Содержание]

3. Удалите BUILTIN/Administrators

Автор статьи считает на сегодняшний день это самой большой уязвимостью SQL Server. Он не может понять, для каких целей Microsoft по умолчанию предоставляет администраторам NT права равные sa. Первое, что автор делает после новой инсталляции - удаление этого логина. Будьте осторожны! Перед удалением этого логина, Вы должны убедиться, что учетная запись, от имени которой запускается SQL Server, имеет свой собственный логин. Если у SQL Server нет логина для учетной записи NT, от имени которой стартует SQL Server, наверняка Вы будете иметь проблемы с запуском SQL Server или SQL Server AGENT.

[Содержание]

4. Измените учетную запись, от имени которой стартует MSSQLServer

По тем же причинам, автор считает целесообразным заменять учетную запись Localsystem, от имени которой по умолчанию стартует SQL Server. Если Вы собираетесь сделать это через Enterprise Manager (щёлкните правой кнопкой мыши по имени сервера и выберете пункт Properties | вкладка Security), Вы будете избавлены от необходимость выполнить несколько дополнительных шагов по предоставлению необходимых разрешений альтернативной учетной записи, которые ЕМ сделает за Вас. Когда вы измените учетную запись, под которой запускается SQL сервер, убедитесь, что она имеет минимальные права на вашем компьютере (ни в коем случае не обладает правами администратора!). Основная причина, по которой эти права должны быть минималными - не позволить злоумышленнику получить полный контроль над операционной системой, если он сможет получить права SysAdmin.
Убедитесь также, что для этой учетной записи опция Logon Locally запрещена. Это гарантирует, что никто не сможет войти в вашу систему под этой учетной записью и прочитать данные с вашего сервера или администрировать его. И последнее, убедитесь что имя учетной записи, под которой теперь запускается SQL сервер, не является информативным для злоумышленника. Не называйте ее, например, SQLAdmin или SQLStartupAccount. Убедитесь, что эта учетная запись выглядит, как обычный пользователь и не бросается в глаза злоумышленнику.

[Содержание]

5. Проверка Failed Logins и Denied Access

Наилучший способ выявления попыток несанкционированного доступа в систему - это правильная установка оповещения и предупреждения. Установкой опции Failed Login (Server Properties | Security tab), вы предоставите себе возможность видеть, когда незваный гость пытался получить доступ к вашей системе. Это особенно полезно, если у вас есть стандартная прикладная программа, которая использует только несколько учетных записей. Как только вы обнаруживаете любой failed login, вы знаете, что он вызван не вашей прикладной программой и, следовательно, это должен быть пользователь. Следующим шагом является запуск Profiler и выявление Failed Logins и Hostname. Это даст вам имя компьютера, с которого производилась попытка несанкционированного доступа.
Использование только таких простых методов аудита дает вам не очень много, до тех пор, пока вы не начнёте по настоящему отслеживать все попытки входа в систему и не установите надлежащую систему сигнализации для немедленного оповещения, когда попытка несанкционированного доступа в систему будет действительно иметь место. Одним из лучших способов для этого является настройка SQL Alerts для генерации оповещений о возникших ошибках и других событиях, в который, например, можно использовать используя команду NET SEND или отправлять письма через e-mail. Автор считает нужным отслеживать любые ошибки типа permission denied, например, такие как #229. Если вы определите для себя все, что вы хотите подвергнуть аудиту, вы можете написать скрипт для изменения таблицы sysmessages (в которой хранятся все ошибки SQL сервера) для включения регистрации, как показано ниже:

-- Error Message #229: %ls permission denied on object '%.*ls', database '%.*ls', owner '%.*ls'.
UPDATE sysmessages SET dlevel = (dlevel | 0x80) WHERE error = 229

Если вы являетесь злоумышленником и хотите скрыть ваши действия на SQL сервере, то наилучшим способом для этого является перезапись всех журналов ошибок на SQL сервере с помощью утилиты DBCC ERRORLOG пять раз, таким образом заметая все следы вашего там пребывания. Для защиты против этого я рекомендую добавить registry key (если он еще не существует), который увеличит число хранящихся на SQL сервере журналов ошибок с 5 до по крайней мере 10. Для этого внесите следующую строку в Registry:

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\MSSQLServer] "NumErrorLogs"=dword:00000010

И в заключение, подумайте над тем, чтобы регулярно проверять логины, у которых отсутствует пароль. Вы можете делать это с помощью простого запроса (имейте ввиду, что учетная запись Windows никогда не хранит пароль, следовательно вы можете отфильтровать эти записи используя параметр isntname = 0).

use master
go
select name, password from syslogins where password is null and name is not null and isntname = 0

[Содержание]

6. Следите за появлением новых Service Packs и Hot Fixes

Своевременная установка последних Service Packs и Hot Fixes является лучшим путем для защиты от наиболее опытных злоумышленников. Большинством из известных мне уязвимых мест, которые были исправлены с помощью Service Packs и Hot Fixes, очень тяжело воспользоваться, но если ними воспользовались, то это очень опасно. Всегда планируйте установку на вашем SQL сервере, по крайней мере один раз в квартал, всех последних Service Packs и Hot Fixes. Оперативно получать уведомления о выходе сервисных пакетов и заплаток можно подписавшись на Microsoft Security Alerts по адресу:
http://www.microsoft.com/technet/treeview/default.asp?url=/technet/security/bulletin/notify.asp.
С момента подписки вы будете получать e-mail всякий раз, когда будет обнаружено новое уязвимое место. К сожалению, нет возможности отфильтровать сообщения, относящиеся только к SQL серверу.

[Содержание]

7. Защищайте расширенные хранимые процедуры

SQL сервер предоставляет ряд дополнительных удобств и поддерживает расширенные хранимые процедуры. Единственной проблемой является то, что эти хранимые процедуры обладают теми же правами, что и учетная запись, под которой стартует SQL сервер. Если вы не используете репликацию или SQL Mail, то запускайте SQL сервер под системной учетной записью. Далее вы можете заблокировать все хранимые процедуры, которыми вы практически не пользуетесь. В особенности такие расширенные хранимые процедуры, как xp_cmdshell. Эта расширенная хранимая процедура позволяет выполнить любую команду операционной системы и может косвенно использоваться для доступа в вашу сеть. Несмотря на это, автор не хотел бы удалять ни одну из этих хранимых процедур. Enterprise Manager обычно использует их для доступа к функциям системного уровня и удаление этих хранимых процедур может привести к возникновению новых ошибок. Автор статьи предпочитает запретить доступ к ним от имени любой учетной записи, для которой они без надобности и, если только если вы чувствуете, что всё достаточно хорошо проверили, то можете их удалить.

[Содержание]

8. Измените порт, через который работает SQL сервер, и заблокируйте его

Если вы измените порт SQL сервера, то злоумышленнику потребуется несколько больше времени для сканирования портов и обнаружения вашего SQL сервера. Большинство неквалифицированных злоумышленников прекратят попытки сканирования вашей сети после проверки общеизвестных портов. Однако для защиты от более опытных взломщиков, вы должны быть уверенны в том, что ваш firewall защищает ваш SQL сервер от любого не установленного траффика. Вы можете изменить порт вашего SQL сервера, воспользовавшись утилитой Server Network Configuration, выбрав протокол TCP/IP и затем Properties для него. Заранее согласуйте новый адрес порта с вашим системным администратором, чтобы он был доступен через ваш firewall.

[Содержание]

9. Предоставляйте доступ к БД посредством хранимых процедур

Всегда старайтесь не предоставлять прямой доступ к вашим данным. Вместо этого используйте доступ к данным только через хранимые процедуры и предоставляйте права доступа процедурам вместо того, чтобы огульно раздавать права db_datareader и db_datawriter. Если вы используете хранимые процедуры, убедитесь что вы правильно запрограммировали ADO для работы с ними. Это поможет вам защититься от SQL Injection атак. SQL Injection атаки позволяют злоумышленнику выполнить любую SQL команду, которую он пожелает, используя формы (для ввода информации) вашего приложения. Еще одним преимуществом использования хранимых процедур является то, что их легче использовать. Например, если вы не используете хранимые процедуры, то вам придется перекомпилировать ваше приложение или обновлять ASP страницы каждый раз, когда вы изменяете текст запроса.

[Содержание]

10. Защищайте вашу операционную систему

Если ваша ОС не защищена, то ваш SQL сервер открыт настежь. Это как запереть дверь и оставить рядом с ней открытыми окна.

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

[Содержание]

ССЫЛКИ НА СТАТЬИ

Отечественные статьи

От Informix к SQL Server
Процесс переноса приложений с одной СУБД на другую в общем случае является трудоемкой задачей, для решения которой полезно прежде познакомиться с практическим опытом выполнения таких работ. В статье рассказывается об особенностях переноса системы класса ERP с платформы Informix On-Line Dynamic Server на Microsoft SQL Server 2000...
Отображение картинки из БД напрямую – создание своего HttpHandler
В форуме достаточно часто поднимается вопрос типа «а как отобразить картинку, если она сохранена в БД?». И ответ всегда звучал примерно так: «создать файл, который получает картинку из БД и пишет ее содержимое клиенту предварительно установив правильный ContentType»...
Data Analyzer на каждый персональный компьютер?
Любой поставщик инструментов BI в глубине души лелеет надежду на то, что именно его технология бизнес-анализа станет всеобще признанным стандартом, а сам продукт будет установлен на каждом персональном компьютере. Последняя версия Data Analyzer, предназначенная для Office XP suite, возможно и помогла корпорации Microsoft утереть нос многим другим...
Школа XML
В школе XML вы узнаете что такое XML и в чем разница между XML и HTML. Кроме того вы узнаете как начать использовать XML для решения своих задач...
Школа схем XML
В школе схем XML вы узнаете что такое XML-схема. Вы узнаете как XML-схема заменяет DTD и как применять язык XML-схем в своих приложениях...
Школа WSDL
WSDL - это XML-ориентированный язык, предназначенный для определения web-сервисов и доступа к ним...
eXtensible Markup Language
В моей статье "XML — потомок SGML" я попытался очень коротко описать, что такое XML и зачем он нужен. Я получил несколько писем, в которых читатели просят как можно подробнее остановиться на этой теме. Что я, собственно, и собираюсь сделать. Я постараюсь как можно подробнее рассказать о DTD, XML, XSLT, а также о спецификациях XPath, XLink, XPointer, XML Schema и о многом другом. Это повествование будет как можно более подробным и понятным читателю...
Проектирование баз данных с ERwin
В статье "Базовые концепции моделирования данных" (http://www.interface.ru/ca/erw01.htm), были введены основные понятия, связанные с моделированием данных. Здесь же мы детально опишем сущности и ключи сущностей. Как вы знаете, сущности - это понятия, информацию о которых следует сохранять для возможности дальнейшей обработки. В ERwin сущности являются графическим представлением логической группировки данных. Сущности могут быть вещественными, реальными объектами или неосязаемыми концептуальными абстракциями. Сущности не предназначены для представления единичного объекта. Скорее они представляют классы, включающие атрибуты, содержащие информацию о множестве экземпляров...

[Содержание]

Новые технические статьи Microsoft

BUG: BCP May Export Corrupted DBCS Characters That Are Stored In a Char or Varchar Data Type (Q323502)
BUG: Error Message 1785 Occurs When You Create a FOREIGN KEY Constraint That May Cause Multiple Cascade Paths (Q321843)
BUG: Hide Server Option Cannot Be Used on Multiple Instances of SQL Server 2000 (Q308091)
BUG: Incorrect Identity Value with Self-Referencing FOREIGN KEY Constraint (Q322818)
BUG: Reading a Profiler Trace with the ::fn_trace_gettable Function and SPID 1000 May Cause Errors (Q325197)
BUG: SNMP Configured Incorrectly When Default SQL Server 2000 Instance Is Not Installed (Q279870)
BUG: The SQL Server VDI Backup and Restore Operations Are Not Successful and the CoCreateInstance Error Occurs (Q323602)
DOC: SQL Server Books Online Includes Incorrect Documentation on Distribution Agent Profile Parameters in Transactional Replication (Q322667)
FIX: Full-Text Search Population of a Word Document Stored in SQL Server Causes CPU Spin with SQL Server 2000 Service Pack 2 (Q323039)
FIX: If You Use the sp_reinitmergesubscription Stored Procedure with @UPLOAD_FIRST Set to TRUE Data Loss May Occur for SQL Server CE Subscribers (Q324563)
FIX: Infinite Loop During Full-Text Catalog Population (Q323038)
FIX: Input Parameters to the OLE Automation (sp_OA) Stored Procedures Truncate at 4000 Characters (Q325492)
FIX: Lock Timeout on Scrollable Cursor May Occur if Page Locking is Disabled (Q323248)
FIX: Merge Non-Convergence for SQL Server CE Subscriber (Q315758)
FIX: Parameterized Query with Several IN Clauses Fails with Error: 8623 (Q325658)
FIX: Service Pack Installation May Save Standard Security Password in File (Q263968)
FIX: SQL Server CE Subscribers May Receive Duplicate Changes on Synchronization (Q306487)
FIX: SQL Server CE Subscriptions May Not Be Correctly Marked as Expired (Q313533)
FIX: SQL Server Fails to Bind TCP/IP Port at Startup (Q312935)
FIX: SQL Server Grants Unnecessary Permissions or an Encryption Function Contains Unchecked Buffers (Q322853)
FIX: Upgrade from SQL Server 7.0 May Abort with Messages.sql and You Cannot Connect to SQL Server (Q300676)
HOW TO: Identify Your SQL Server Service Pack Version and Edition (Q321185)
HOW TO: Set Up Alternate Synchronization Partner in SQL Server 2000 Merge Replication (Q321176)
INF: Bypass (Emergency) Mode and DUMP TRANSACTION WITH NO_LOG (Q165918)
INF: Creating Large-Scale, Highly Available OLAP Sites (White Paper) (Q322596)
INF: DTS/Replication Licensing for Desktop SQL Server 7.0 (Q207809)
INF: How To Enable Analysis Server to Use 3 GB of RAM (Q295443)
INF: How to Identify Which MSI File Was Used for an Existing MSDE Installation (Q311762)
INF: Performance Study of Microsoft Data Mining Algorithms (White Paper) (Q322325)
INF: Programs Run Through Xp_cmdshell Have No User Interface (Q323411)
INF: Shrinking the Transaction Log in SQL Server 2000 with DBCC SHRINKFILE (Q272318)
INF: SQL Server 2000 Security Update for Service Pack 2 (Q316333)
INF: The fn_get_sql Function Returns SQL Text for Handle in the Sysprocesses System Table (Q325607)
INF: Using SQL Server 2000 with FIPS 140-1 Ciphers (Q325757)
MS01-041: Malformed RPC Request Can Cause Service Problems (Q298012)
MS02-030: SQLXML Security Updates (Q321911)
PRB: "Error 229: Execute Permission Denied on Object 'xp_availablemedia' Owner 'dbo'" (Q323249)
PRB: A SELECT INTO Query May Return the Internal Query Processor Error 8630 (Q323586)
PRB: Full Text Resource Fails to Come Online on a Cluster with "Event ID 1069 :SQL Cluster Resource 'Full Text' failed" Error Message (Q304282)
PRB: Some SQL Server 7.0 Service Pack 2 Updates Must be Added Manually (Q266337)
PRB: Unable to View the Properties for a Database Maintenance Plan (Q323607)
PRB: You Can Only Use the Sp_grantlogin Stored Procedure with Windows NT Group Names That Are Less Than or Equal to 63 Characters (Q323596)
SQL Server Connection Fails When RC4 Encryption Is Disabled (Q324914)

[Содержание]

ФОРУМ SQL.RU

Самые популярные темы недели

Data Warehouse и OLAP-кубы для CRM (оптовые продажи, склад, сервис, и прочее)
О дате
Зарплата специалиста по MS SQL
64-разрядный SQL Server: первые официальные бенчмарки
BDE Client and deadlocks???
Тем, кто писал хр-процедуры на C++!!
Загнать NULL в столбец
достало
Индексирование
Вопрос
XML/XSL
Обрезание
Система безопасности.
RAID
Удаленное бэкап-устройство
СПАСИТЕ!!!! Проблема при установке SQL Server 2000!!!
CONSTRAINS_KEYS better then CONSTARAINT_NAME???
Ребяты, а как запихать вычисляемый столбец в запросе в условие Where?
SQL Server Agent-->STOP
SQL Redactor
Timeout Expired
Домен или группа?
Как получить данные из системной процедуры?
ASP + Stored procedure
select по дате
Нетривиальная задача: перетащить базу
Как передать на сервер рисунок используя FoxPro6.0
МНОГОПРОЦЕССОРНОСТЬ
Transfer работает, но с ошибками
Вешалка
Подскажите!
Насчет сортировки: это баг или что?
MS SQL2000 и E-Mail
Выбор сервера
Глобальный параметр в DTS Package
XML в RDBMS: есть ли смысл?
Какой-то ________ сменил пароль у SA. Есть ли возможность заломать или придется
Временная таблица и IF ELSE
Сохранение в файл результата запроса
От чего зависит быстродействие?
Резервное копирование
Сущности, атрибуты, типы данных...
Вызов процедуры в DLL из MS SQL 7
Помогите новичку (многие ко многим)
Констэйны и сообщения к ним.
Как я избавился от непомерного журнала транзакций
Проблема с репликацией - Distribution Agent
Как просмотреть журнал транзакций?
MSSQL & ADODB компонент & IIS с буквами без 8 бита...
И сново дерево
Распределенная база данных
Incorrect syntax near ',' in Select (Float)
Parallelism: на двухпроцессорном ПК INSERT выполняется длиннее, чем на однопроц
OPENROWSET
Trusted Connection
Имя SQL сервера
Большие глюки с арифметикой в MS SQL 2000 SP2 !!!! УЖАС!!!!
Вот такая задача

[Содержание]

Вопросы остались без ответа

Creating Dynamic View in stored procedure
VSS + MSSQL
MS SQL 7 and DB2 for AS400 on AS400! Some Problems....
Вероятно
А я - чайник
Нужна MSSQLRECOVERY
Как сделать инсталляционный комплект программы на Delphi с SQL6.5-драйверами
нет доступа
ПРОКОНСУЛЬТИРУЙТЕ!!! Вопрос о применении многопроцессорности
SP_OAxxxx
Закуплю
Merge Replication & Datetime (Earlier Wins) Conflict Resolver
Microsoft SQL Server 2000 Incorrect Registry Key Permissions Vulnerability
Режим открытия курсора
FreeTDS
Можно ли использовать SysMessages для задания сообщений CheckConstraints?
получение имен объектов зависящих от данного( а ля sp_depends)
так всё-таки кто-нибудь знает что нибудь о Timeout Expired
Meta Data Service
FIX: (Q324186)
Резервирование в SQL Anywehere Release 5.5.00
Код Ошибки при отказе доступа к таблице

[Содержание]

ИНФОРМАЦИЯ АВТОРА РАССЫЛКИ

В настоящее время я рассматриваю варианты своего участия в новых проектах. Интерес представляют крупные системы баз данных, как развивающиеся, так и разрабатывающиеся "с нуля". Если Ваша организациия находиться в Москве или ближайшем подмосковье и нуждается в услугах MS SQL Server DBA, предлагаю рассмотреть моё резюме, которое всегда доступно по этой ссылке: http://www.sql.ru/subscribe/REZUME.shtml

[Содержание]

#104<<  #105

Вопросы, предложения, коментарии, замечания, критику и т.п. присылайте Александру Гладченко на адрес: mssqlhelp@pisem.net

sql.ru Описание рассылки

МИНИФОРМА
ПОДПИСКИ




http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу

В избранное