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

Новости сайта "Упражнения по SQL" (http://www.sql-ex.ru) 129


Новости сайта "Упражнения по SQL (http://www.sql-ex.ru)" Выпуск 129 (03 марта 2007 г.)

SQL Exercises

Новым посетителям сайта

Сайт посвящен изучению языка, с помощью которого осуществляется взаимодействие с реляционными (и не только) СУБД. Суть обучения состоит в выполнении заданий на написание запросов к учебным базам данных; при этом система контролирует правильность выполнения заданий. В настоящее время реализованы все операторы подъязыка манипуляции данными (DML), которые включают в себя оператор извлечения данных SELECT, а также операторы модификации данных - INSERT, DELETE и UPDATE.

Мы надеемся, что справочного материала сайта окажется достаточно для самостоятельного обучения. Кроме того, свои решения вы можете обсудить на форуме сайта. Опытных же специалистов приглашаем проверить (продемонстрировать) свое мастерство и принять участие в соревновании, обеспечиваемом рейтинговой системой учета времени выполнения заданий. Фактически, рейтинг ведется на втором этапе тестирования, который начинается сейчас после решения 57-ти задач первого этапа. При подсчете рейтинга каждого участника отбрасывается один самый худший показатель среди всех решенных им упражнений.

Демонстрация плана выполнения запроса и сравнительная оценка эффективности решений поможет вам освоить принципы оптимизации запросов, которые пригодятся на третьем рейтинговом этапе.

Имеется возможность получить сертификат по SQL DML при выполнении определенного количества заданий.


Новости сайта

§ На главной странице в новостях сайта теперь будет публиковаться список специалистов, сертифицированных за последнюю неделю.

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

§ Надежды, связанные с Damirishe, оправдались - он решил последнюю задачу второго зтапа, войдя в двадцатку с результатом (задач 138, время 11.263).
Надеюсь, что надолго не задержится с этим PavelPS, который уже близок к решению 138 задачи.
Добрался до "фильтра" на этой неделе avk (136, 54.195).

§ Новые лица в сотне:
Если я ничего не пропустил, то новых лиц в сотне не появилось за эту неделю.
Сейчас из сотни проще вылететь, чем туда попасть :-).

§ Продвинулись в рейтинге:
Julia_M (135, 81.932)
Arcan (132, 5.773)
Aladdin (131, 14.910)
wasp (130, 71.671)
Kamin (124, 47.328)
15th (120, 9.344)
Онуфрий Голохвастов (119, 48.180)

§ На этой неделе сертифицированы:
Boss (A07015665) [BK] (г.Калуга, Россия)
Arcan (B07016375) [AR] (г.Запорожье, Украина)
Велимира (A07015224) [BK] (г.Смоленск, Россия)
wasp (B07005313) [AR] (г.Тамбов, Россия)

§ Число подписчиков - 3485

Число участников рейтинга - 9094

Число участников второго этапа - 893

Сертифицировано на сайте - 140

Лучшие результаты (ТОР 20)

No Person Number of
Sel_ex
Last_Sel Number of
DML_ex
Scores Days Days_2 Days_3 S_3 LastSolved LastVisit
1 Агапов В. (KERBEROS) 141 141 20 333 89 6.183 1.262 11 20 Nov 2006 26 Feb 2007
2 Солдатенков Ю.С. (SolYUtor) 141 141 20 333 265 17.216 2.517 11 07 Feb 2007 02 Mar 2007
3 Кувалкин К.С. (Cyrilus) 141 141 20 333 746 12.417 2.519 11 10 Dec 2006 02 Mar 2007
4 Карасёва Н.В. (vlksm) 141 141 20 333 196 27.850 2.710 11 18 Nov 2006 02 Mar 2007
5 Мурашкин И.В. (lepton) 141 141 20 333 240 14.865 4.724 11 18 Nov 2006 01 Mar 2007
6 Зверев Д.Л. (dimzv) 141 141 20 333 1141 9.324 4.938 11 19 Dec 2006 22 Dec 2006
7 Голубин Р.С. (Roman S. Golubin) 141 141 20 333 457 54.984 33.803 11 18 Nov 2006 01 Mar 2007
8 Войнов П.Е. (pаparome) 140 140 20 329 489 2.738 .049 7 26 Dec 2006 28 Feb 2007
9 Тарасов Д.Б. (Gavrila) 140 140 20 329 466 20.242 .513 7 05 Dec 2006 02 Mar 2007
10 Мальцев А.В. (Палкин) 140 141 20 329 145 27.557 7.373 7 09 Jan 2007 12 Feb 2007
11 Васьков Е.В. (Johan) 140 140 20 329 124 12.713 11.402 7 20 Nov 2006 15 Feb 2007
12 Валуев Д.И. (Fiolent) 139 140 20 326 1188 117.017 62.302 4 05 Dec 2006 02 Mar 2007
13 Юлдашев М.Р. (Snowbear) 139 139 20 325 546 4.113 .000 3 15 Jan 2007 02 Mar 2007
14 Держальцев В.А. (MadVet) 138 139 20 324 540 34.249 3.085 3 08 Oct 2006 19 Oct 2006
15 Палий С.А. (PS_Sergey) 139 139 20 325 212 15.756 4.188 3 01 Dec 2006 03 Dec 2006
16 Салимов Д.М. (Damirishe) 138 138 20 322 156 11.263 .000 0 24 Feb 2007 02 Mar 2007
17 Бородкина М.И. (marishkin) 138 138 20 322 67 15.105 .000 0 22 Jan 2007 21 Feb 2007
18 Утёнков М.Н. (=Maxim=) 138 138 20 322 200 24.998 .000 0 19 Nov 2006 08 Feb 2007
19 Slobodcicov A.N. (Testo) 136 138 20 319 337 7.171 .000 0 25 Aug 2006 10 Nov 2006
20 Иванов А.Н. (Goapsy) 136 138 20 319 270 18.911 .000 0 07 Aug 2006 22 Feb 2007

Лучшие результаты за неделю

No surname n_sel sel_all sel_scores dml_scores scores rating last_visit
1 Malakhov A.A. (eviSport) 43 57 76 26 102 620 02 Mar 2007
2 >Исаков (traum) 49 49 92 0 92 1366 02 Mar 2007
3 >Шахбулатов Р.Г. (ruslan-shah) 27 71 59 32 91 326 02 Mar 2007
4 >Prokhorov K.N. (Nekrott) 42 49 81 9 90 1266 02 Mar 2007
5 Тимаков А.А. (pAckmAn) 40 40 69 11 80 1634 27 Feb 2007
6 Nelubin A.P. (Nelubin) 36 36 65 9 74 1813 28 Feb 2007
7 Соколов (sir_derryk) 40 40 73 0 73 1856 01 Mar 2007
8 >Труфанов А.Н. (TruF) 40 40 73 0 73 1859 02 Mar 2007
9 >Башлыков В.В. (VetaleG) 38 38 69 0 69 2009 02 Mar 2007
10 Fidoskin K. (fidos) 35 40 68 0 68 1867 27 Feb 2007
11 >Рыкунов М. (Optik) 32 32 54 11 65 2135 02 Mar 2007
12 >Ananina (Rossi) 37 37 65 0 65 2143 02 Mar 2007
13 Завьялов А. (azavyalov1) 32 40 64 0 64 1874 02 Mar 2007
14 Revenko A. (Harris) 35 35 63 0 63 2217 25 Feb 2007
15 Smit (4OKHYTbIU) 38 38 62 0 62 2278 01 Mar 2007
16 >sonia A.M. (sonia) 38 38 61 0 61 2326 02 Mar 2007
17 Иванцов А.В. (Warning) 29 36 58 0 58 2163 27 Feb 2007
18 ilyina N.N. (_tasha_) 33 33 58 0 58 2480 02 Mar 2007
19 Rukin (chel123456) 20 45 42 15 57 1346 27 Feb 2007
20 >Daniel R.V. (danr) 26 41 57 0 57 1819 02 Mar 2007
21 >Смагин В. (Васисуалий) 30 30 55 0 55 2664 02 Mar 2007
22 T T. (TarasTS) 32 32 55 0 55 2667 02 Mar 2007
23 >Лепешкин К.С. (sniff) 28 35 54 0 54 2335 02 Mar 2007
24 >Щеткин А.Г. (Alex Wolker) 28 59 53 0 53 966 02 Mar 2007
25 Гуринов А.В. (andygee) 19 40 44 7 51 1639 24 Feb 2007
26 Melnik S.A. (MSA) 28 29 51 0 51 2833 27 Feb 2007
27 Кузяев М.Ю. (ZeFender) 24 24 42 9 51 2868 02 Mar 2007
28 >Pillai J. (jyotish) 28 28 50 1 51 2878 02 Mar 2007

Изучаем SQL

Изменение контекста выполнения в SQL Server 2005

Tim Chapman (оригинал: Modifying execution context in SQL Server 2005)
Перевод Моисеенко С.И.

Аннотация

Тим Чапман объясняет, как Вы можете использовать предложение EXECUTE AS для изменения контекста выполнения в SQL Server 2005. Затем он показывает, как Вы можете использовать это предложение для исполнения роли владельца таблицы в схеме.

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

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

Цепочки владения

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

Когда пользователь выполняет хранимую процедуру (а мы предполагаем, что пользователь имеет разрешения на выполнение хранимой процедуры), SQL Server проверяет владельца (Schema) процедуры и сравнивает его с владельцем любых объектов, которые доступы через процедуру. Если процедура и какие-нибудь вызываемые в ней объекты имеют того же самого владельца, разрешения на объект (ты), на которые имеются ссылки, не проверяются. Так, если пользователю Тиму дают разрешения на выполнение процедуры с именем usp_ProcedureChain принадлежащую dbo, то пока dbo владеет любыми другими процедурами, которые вызывает usp_ProcedureChain, никакой ошибки не будет возникать при выполнении Тимом этой процедуры.

Переключение контекста

В SQL Server 2000 Вы могли использовать команду SETUSER, чтобы представиться в контексте пользователя для учетной записи SQL User Account. К сожалению, эта команда могла использоваться только sysadmin или db_owner и не могла использоваться для учетных записей Windows.

В SQL Server 2005 вместо SETUSER для изменения контекста выполнения хранимой процедуры, триггера, пакета или функции под конкретным именем пользователя или логином в определении кода можно использовать предложение EXECUTE AS. Когда контекст изменен на другого пользователя или логин, SQL Server проверит разрешения для этого логина или пользователя. Чтобы задать предложение EXECUTE AS, когда вы создаете или модифицируете процедуру или функцию, необходимо иметь разрешения IMPERSONATE на данный объект, а также разрешения создавать объекты.

Пример

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

Первый оператор - команда REVERT - используется для отхода на один шаг назад в цепочке контекста выполнения. (Я делаю это в начале затем, чтобы Вы могли запустить пример повторно полностью, не беспокоясь об очистке каких-либо объектов.)

REVERT

GO

Семь операторов в листинге A - операторы очистки, которые проверяют наличие объектов, которые я буду использовать позже; и, если последние существуют, то я удаляю их.

Листинг A

IF OBJECT_ID('usp_InsertMyTable','P')>0
    DROP PROCEDURE usp_InsertMyTable

GO

IF OBJECT_ID('TableOwnerSchema.MyTable','U')>0
    DROP TABLE TableOwnerSchema.MyTable

GO

IF EXISTS (SELECT * FROM sys.schemas WHERE name = N'TableOwnerSchema')
    DROP SCHEMA [TableOwnerSchema]

IF EXISTS (SELECT * FROM sys.database_principals WHERE name = N'BaseUser')
    DROP USER BaseUser

IF EXISTS (SELECT * FROM sys.server_principals WHERE name = N'BaseUser')
    DROP LOGIN BaseUser

IF EXISTS (SELECT * FROM sys.database_principals WHERE name = N'TableOwner')
    DROP USER TableOwner

IF EXISTS (SELECT * FROM sys.server_principals WHERE name = N'TableOwner')
    DROP LOGIN TableOwner

Следующий скрипт создает два серверных логина и две учетные записи пользователя базы данных для регистрации. Обратите внимание на операторы CHECK_EXPIRATION и CHECK_POLICY, которые впервые появились в SQL Server 2005. Эти операторы сообщают SQL Server не предписывать политику истечения пароля этой пользовательской учетной записи, и не проверять для этой учетной записи никакие типы политики пароля. Это очень полезные опции для предписания политики безопасности для учетных записей SQL.

CREATE LOGIN [BaseUser] WITH PASSWORD=N'baseuser',
DEFAULT_DATABASE=[TRS],
CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF

GO

CREATE USER [BaseUser] FOR LOGIN [BaseUser]

GO

CREATE LOGIN [TableOwner] WITH PASSWORD=N'tableowner',
DEFAULT_DATABASE=[TRS],
CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF

GO

CREATE USER TableOwner FOR LOGIN TableOwner

GO

(Окончание следует...)

Полезная информация

§ Все статьи, публикуемые в рассылке, затем выкладываются на сайте Книги и статьи по SQL.

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

§ Желающих поспособствовать популяризации сайта прошу проголосовать/поставить закладку в социальных сетях:
del.icio.us
dzone.com
Digg.com

Контакты

По всем вопросам, связанным с функционированием сайта, проблемами при решении упражнений, идеями вы можете обращаться к Сергею И.Моисеенко msi77@yandex.ru. Вы также можете предложить свои задачи для публикации на сайте.

Подписка Subscribe.Ru
Новости сайта "Упражнения по SQL"

В избранное