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

MS SQL Server

  Все выпуски  

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


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


#157<<  #158

СОДЕРЖАНИЕ

1.БЕЗОПАСНОСТЬ
1.1.Удаленное переполнение буфера в MDAC функции во всех версиях Windows
2.СОВЕТЫ
2.1.Расслоение таблиц в базах данных
3.ССЫЛКИ НА СТАТЬИ
3.1.Статьи на русском языке
3.2.Новые и обновлённые технические статьи Microsoft
3.3.Англоязычные статьи
4.ФОРУМ SQL.RU
4.1.Самые популярные темы недели
4.2.Вопросы остались без ответа

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

По сообщению securitylab.ru от 21 августа 2003г., обнаружено:
Удаленное переполнение буфера в MDAC функции во всех версиях Windows

Уязвимость обнаружена в Microsoft® Data Access Components (MDAC) во всех Windows системах. Удаленный пользователь может выполнить различные действия на операционной системе, включая выполнение произвольного кода. Уязвимость можно также эксплуатировать через SQL сервер, используя команду Transact-SQL OpenRowSet. Нападающий может представить злонамеренный запрос к базе данных, содержащий некорректный параметр к команде OpenRowSet, чтобы переполнить буфер и выполнить произвольный код на компьютере, на котором выполняется MS Sql сервер.

Уязвимость обнаружена в Microsoft Data Access Components 2.5-2.7
Microsoft оценила риск обнаруженной уязвимости как “Критический”
Для устранения уязвимости, установите:

Microsoft Data Access Components (MDAC) 2.8

или

Microsoft Data Access Components (MDAC) Security Patch MS03-033

Дополнительная информация:

Удаленное переполнение буфера через MDAC в MS SQL сервере (подробности эксплуатации)
MS03-033: Security Update for Microsoft Data Access Components

[В начало]

СОВЕТЫ

Расслоение таблиц в базах данных

Автор: Александр ДЕНИСЕНКО (aden@online.ru, aledin@academy.ru)

Расслоение таблицы - это её представление в виде совокупности других таблиц и алгоритм её синтеза. В большинстве баз имеется механизм виртуальных таблиц или видов (view). Как правило, виртуальная таблица для наблюдателя вообще неотличима от реальной. Простейший пример такого рода - разбиение таблицы Т на две части и оператор UNION в качестве алгоритма синтеза. Как правило, разбиение производится на непересекающиеся части и таблица эквивалентна виду:


Select * from T1
UNION
Select * from T2

Это позволяет администратору базы переопределять источник данных в процессе эксплуатации, не затрагивая программного кода разработчика. Оператор синтеза является некоторым аналогом объединения множеств. К сожалению, в распространенных базах типа [1] нет явного оператора разности двух таблиц.

Мы покажем некоторые дополнительные возможности подобных механизмов, которые могут оказаться полезными для администратора (постараемся показать на примерах).

Рассмотрим в качестве примера таблицу T, имеющую одно ключевое поле К и несколько не ключевых полей - F1,…,FN. Разобьём нашу таблицу по горизонтали на три части, диапазоны ключей которых могут пересекаться (состав их полей идентичен). Назовем эти части T0, T+ и T- и в качестве алгоритма синтеза примем такой оператор:


SELECT * FROM T0
   Where K not in (select K from T-)
Union
Select * from T+

Назовем часть (слой) T1 статической, а части (слои) T+ и T- назовём динамическими (положительной и отрицательной поправкой соответственно). Теперь подменим операции изменения таблицы следующим образом:

- добавление новой строки - это её добавление в T+
- удаление строки - это её добавление в T-
- изменение строки с ключом К - это занесение её старой редакции в T- и новой редакции - в T+

Напомним, что в [1] для этого служит развитой механизм триггеров.
По существу мы выносим все поправки к исходной таблице в две дополнительные - для добавлений и удалений. Что можно из этого получить?

1. Раздельная оптимизация

Предположим, что темп обновления исходной таблицы невелик по сравнению с её размером. Например, в справочник из миллиона строк в течение некоторого цикла (сутки или неделя) вносится (удаляется, изменяется) несколько тысяч строк.

Оптимизация хранения такой таблицы, как правило, является компромиссом между тремя параметрами:

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

Любая пара этих параметров допускает оптимизацию лишь ценой третьего. Для иллюстрации вспомним оптимизацию индексов в [1]. Например, если процент заполнения индексных страниц сделать небольшим, то можно достичь высокой скорости поиска и сравнительно неплохой производительности при изменении; однако это приведёт к большому расходу памяти, занимаемой таблицей.

Воспользуемся приведенным выше представлением и алгоритмом синтеза. Все поправки к таблице перенаправим в корректирующие слои (которые необходимо периодически подливать к статической части по окончании цикла - например, в конце смены или в выходные - как правило, массовая корректировка значительно эффективнее построчной). Теперь выберем высокий процент (fillfactor) заполнения для T0 (100 процентов) и низкий для динамических частей (например, десять процентов). Если наша таблица имеет порядка миллиона строк, то мы увеличиваем расход памяти в десять раз только для динамических слоёв. На практике замедление поиска в расслоённой таблице не сильно заметно при сравнительно небольших объёмах части T- (до нескольких сотен или тысяч строк - желательно, чтобы отрицательный слой оставался резидентным в быстрой памяти). Это связано с особенностями реализации физического хранения строк в [1]. Принципиально сложность операции вычитания не должна отличаться от суммы (как с числами в процессоре), но это требует специальных приёмов хранения.

2. Восстановление первоначального состояния.

При необходимости вернуть таблицу в состояние на момент начала цикла (на утро, например) достаточно изменить описание вида (alter view в [1] - операция мгновенная, в отличие от восстановления баз). Если создать более чем по одной динамической части для добавления и удаления, то можно выполнять моментальный откат таблицы на соответствующий моменту набор слоёв.

3. Индивидуальность и защита

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

Более того, каждый может получить индивидуальное представление общего ресурса. Это из Стругацких ('каждый слышит свою трубку' - Улитка на склоне).
Напомним, что в [1] имя таблицы можно формировать динамически с использованием таких переменных, как имя наблюдателя.

4. Снижение конфликтов

Индивидуальность динамических слоёв для наблюдателя позволяет уменьшить накладные расходы при разрешении конфликтов - ряд блокировок становятся излишними. Каждый волен вносить изменения одновременно с другими наблюдателями, но в свои собственные слои. Видимость или невидимость слоя для того или иного наблюдателя реализуется сравнительно быстрой операцией изменения вида (опять alter view). Помните старика Хоттабыча на стадионе (дайте им каждому по мячу).

5. Перестроение на марше: 365*24

Так условно называют систему, которая должна обслуживать наблюдателя круглогодично и круглосуточно (даже если дней в году 366!). Администраторы многих систем сталкиваются со следующей проблемой: необходимо периодически реорганизовывать базу, сохраняя её доступность. Например, перестроение индексов приводит к потере доступности базы из-за блокировок; иногда необходимо отформатировать диск, на котором размещена база и т.д.

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

В этом случае без двух копий не обойтись. Для переключения наблюдателей между копиями воспользуемся динамическим формированием имени базы (переменная). Если в какой-то момент N наблюдателей работают с базой, то мы не можем их отключить ни на секунду, но можно вновь подключающихся наблюдателей перенаправлять ко второй копии. Разумеется, для этого потребуются и два экземпляра динамических слоёв - чтобы базы были клонами - то есть их состояния совпадали в любой момент (это достигается либо дублированием операций изменения базы, либо встречными триггерами на двух экземплярах динамических слоёв). Так со временем все соединения окажутся установленными со вторым экземпляром базы. Это означает, что первый экземпляр можно отсоединить (detach) или перевести в автономный режим, затем перенести его на другую машину и 'причесать' - например, перестроить индексы, убрать разрывы и физическую фрагментацию. В это время динамические слои второго экземпляра также должны быть задублированы. Теперь физически возвращаем первый экземпляр (причёсанный) и переключаем наблюдателей на него по мере возникновения новых соединений. Мы исходим из того, что все наблюдатели рано или поздно отсоединятся от второго экземпляра. Совокупность первого причёсанного экземпляра и второй копии динамических слоёв (собранных за время причёсывания) и даёт нужный результат.

[1]. Microsoft SQL2000. Электронная документация.

[В начало]

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

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

Основы OLAP
Дмитрий Лобач
Трудно найти в компьютерном мире человека, который хотя бы на интуитивном уровне не понимал, что такое базы данных и зачем они нужны. В отличие от традиционных реляционных СУБД, концепция OLAP не так широко известна, хотя загадочный термин "кубы OLAP" слышали, наверное, почти все. Что же такое OnLine Analytical Processing, где он обитает, и с чем его едят, мы и попытаемся разобраться...

[В начало]

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

A Complex UPDATE Statement That Uses an Index Spool Operation May Cause an Assertion
BUG: A Delete Operation That Involves a Cascade Delete Updates the Statistics Incorrectly
FIX: Access Violations May Occur in Analysis Services If Real-Time ROLAP Cubes Are Stressed
FIX: An Access Violation May Occur When You Run a Query That Contains 32,000 or More OR Clauses
FIX: An Outer or Semi JOIN Query That Results in Hash Role Reversal Followed by a Spill May Return Incorrect Results
FIX: Cannot Connect to Port '1433' Using Sockets After You Apply SQL Server 7.0 Service Pack 4
FIX: Cannot Upload Null Values in Sql_variant Data Type by Using SQL Server CE Merge Replication
FIX: Cursor Plans Are Not Removed From the Cache When Virtual Memory Depleted
FIX: Error 644 or 8646 May Occur During a DELETE or UPDATE Against a Table That Contains a Unicode Column with a Latin1_General_BIN Collation
FIX: Inserting Unicode Data into SSCE Causes SQL Server CE to Stop Responding or Causes an Exception Error
FIX: SQL Server CE eMbedded Visual Basic CompactDatabase Unable to Fix Corrupted Database
FIX: You Receive an Incorrect Result in a MOLAP Cube That Uses the Float Datatype Column for a Measure
HOW TO: Configure SQL Server Security for .NET Applications
INF: Compacting a SQL Server 2000 CE Database by Using Visual Basic .NET
MS02-040: Unchecked Buffer in OpenRowset Updates
MS03-031: Security Patch for SQL Server 2000 64-bit
MS03-031: Security Patch for SQL Server 7.0 Service Pack 4
MS03-031:Security Patch for SQL Server 2000 Service Pack 3
Post a Question to the Microsoft SQL Server Newsgroups
PRB: The SQL Server Desktop Engine Setup Program May Stop Responding When It Is Started from an External Application

[В начало]

Англоязычные статьи

Displaying Execution Plans
Randy Dyess
Not too long ago I published an article describing a basic plan to use when optimizing existing or newly created queries. After a brief discussion with the publishers at www.SQLServerCentral.Com to create a new series of articles, I have decided to visit this topic again and write a series of articles on optimizing and tuning Transact-SQL queries. The plan for this series is to start with the basics of execution plans, progress to advanced execution plan topics and finish up with articles on other methods used to optimize and tune stored procedures. You can review the brief query tuning plan article on my website at www.TransactSQL.Com to get a sense of the game plan for this series of articles. It is also my intention to write smaller articles to further explain any points of the larger monthly article that readers still have questions on. So send in any questions to me at Randy Dyess you may have about an article and I will either answer you directly or create a smaller article to answer your question.
One Small Step For Microsoft…
Mary Jo Foley
And one giant leap toward simplifying patch management, when Microsoft Installer 3.0 goes to beta next month. Microsoft is taking another step towards its goal of simplifying software-patch management across its product line.
Microsoft Weighs Automatic Security Updates as a Default
By Brian Krebs
Microsoft Corp. executives, digging out from the aftermath of an unwelcome Internet worm that wriggled into 500,000 of its customers' computers last week, say that it is time to consider making software updates automatic for home users of the Windows operating system
Create Maintenance Job with a Click without using a Wizard
Robin Back
I have found, working at company using a few hundred SQL servers, how much time I spent to track if a database has required database- and transaction log backups. We also had a few different ways of getting reports of the jobs to know if they had run successfully or not. We all know the importance of standards, don't we?
The DataSet Alternative
Dan Wahlin
The .Net platform's DataSet class provides several ways to read, filter, sort, and manipulate XML data. DataSets are a powerful new addition to the .Net platform that allow both relational and XML data to be read, edited, and bound to different controls. When used properly, DataSets provide an alternative to using the Document Object Model (DOM) classes or the XmlTextReader class to parse XML. Several examples of using XML and DataSets together will show you how you can simplify common tasks and how DataSets can be an alternative to Web services in applications that exchange data.
Design an Effective Data-Access Architecture
Dan Fox
.NET offers new options for accessing your data, forcing you to decide two things when you design the interface that exposes this content. For this solution: Visual Studio .NET, ADO.NET, C#, VB. With the release of Visual Studio .NET (VS.NET) and the .NET Framework, a good number of organizations have begun architecting and implementing .NET applications. Many, if not most, of these applications will consume and expose data residing in relational database management systems, such as Microsoft SQL Server and Oracle. This implies these applications will rely on ActiveX Data Objects .NET (ADO.NET), the set of classes in the .NET Framework that supply the programming models to manipulate data
Retrieve Data Easily
by Andrew J. Brust
ADO.NET makes data binding easier and more powerful, using Web Forms and Windows Forms. Probably the hardest thing about learning the .NET platform is knowing where to begin. For my money, knowing how to create data access application code is a top priority. So understanding the basics of programming ADO.NET, the successor to ActiveX Data Objects (ADO), would seem a decent place to start
Testing for an Updated Column in a Trigger
Andy Warren
The columns_updated function gives you the ability to easily test to see if specific columns were modified with less code than you might otherwise need to use. In this article I'll demonstrate how to create a trigger that uses this function and point out some reasons why you may NOT want to use it! You may also want to look at another article I've posted Using Update() in Triggers.
Disaster Recovery Reporting scripts
By Joseph Sack
Have you ever been asked a seemingly simple question about a SQL Server configuration, and realize that you do not remember (or do not know) the answer?
SQL Server Tip #2: Capturing Error Messages
Gregory A. Larsen
If you want to write some SQL Server code that will return the output of a stored procedure (SP) into a table, then this tip is for you. You may want to do this for a number of reasons. One of the reasons I commonly do this is to enable me to process through the SP output in my code, one record at a time.
Calling CryptoAPI from Stored Procedures
Gregory A. Larsen
Do you have sensitive data stored in SQL Server? Would you like to encrypt or hash some of that sensitive data? This article will show you how to call CAPICOM to invoke CryptoAPI from TSQL to hash or encrypt/decrypt data.
Path Finder
Joe Celko
I got an email asking me how to find paths in a graph using SQL. The author of the email had seen my chapter on graphs in SQL for Smarties, and read that I was not happy with my own answers. What he wanted was a list of paths from any two nodes in a directed graph, and I would assume that he wanted the cheapest path.
How to Select the Optimal Information Exchange Architecture
Joseph Hudicka
Over 80 percent of Information Technology (IT) projects fail. Startling? Maybe. Surprising? Not at all. In almost every IT project that fails, weakly documented requirements are typically the reason behind the failure. And nowhere is this more obvious than in data migration.
ASP.NET Session State Management Using SQL Server
John Paul Cook
Web applications are by nature stateless. Statelessness is both an advantage and a disadvantage. When resources are not being consumed by maintaining connections and state, scalability is tremendously improved. But the lack of state reduces functionality severely. Ecommerce applications require state to be maintained as the user navigates from page to page. ASP.NET’s Session object makes it easy for developers to maintain state in a Web application. State can be maintained in-process, in a session state server, or in SQL Server.

[В начало]

ФОРУМ SQL.RU

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

Ваше мнение об упражнениях SELECT на http://sql.ipps.ru
Тормоза сервера при вставке
Проверка производительности SQL Server?
xp_sendmail и вообще отправка почты
Первоначальная синхронизация в ручную (репликация сведением)
Microsoft SQL Server "Yukon" Beta1 released
DTS: таблица=>Excel
инсерт с возвратом ид
Блокировка таблицы при выполнении SP?
Курсор + много update'ов по 1 строке или 1 select + 1 update
А кто нибудь знает какой-нибудь буржуйский продукт, аналог 1C?
Люююююди.... плиз.Помогите чайнику......
Можно ли одним запросом получить такое множество?
Хитрая выборка :)
Авторизация MSSQL из ASP
Процедура вешает приложение и сервер:( Что не так?
Как сделать синхронизацию 2-ух mssql серверов
Срочно, нужнл аргументировать выбор SQL сервера.
INNER JOIN между таблицами из разных баз
В распределенном приложении все входят под sa. Правильно ли это?

[В начало]

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

Delphi+ADO+SQL2K = ???
хрaнение сoстaвнoгo id?
XML error
Не проходите мимо! Поиск обьектов сразу по нескольким серверам MSSQL
Single user mode (sysdatabases)
Появились packet_errors - как лечить ?
perexod is SQL 6.5 na SQL 2000
выборка
Распределённые транзакции
оффтоп Работа для Киевлян:)

[В начало]


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

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

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




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

В избранное