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

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


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

Новости сайта "Упражнения по SQL (http://www.sql-ex.ru)" Выпуск 65 (10 декабря 2005 г.)

http://www.sql-ex.ru

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

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

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

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

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


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

§ Выставлена давно обещанная задача 138 от Cyrilus. Предварительная оценка сложности 4 балла. Реальную оценку дадут лидеры рейтинга. Готовлю еще одну задачу от Roman S. Golubin. Она заменит одну из задач второго сертификационного этапа, т.е. между 65 и 121 задачами. Планирую до нового года освежить и первый сертификационный этап. Это будут задачи от Shurgenz и pаparome.

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

§ Наверное, пора вводить почетное звание "истинный (или супер) аксакал" :-). Знаковое число - 1000 дней между первой и последней решенной задачей преодолел Robin. VIG на подходе; у него 999 и достаточно решить одну задачу, чтобы перейти порог в 1000 дней. Где-то недалеко маячит 3 года, но это "некруглое" число легко не заметить в суете.

§ Произошли значительные изменения в десятке. Во-первых, сменился лидер; paparome более чем на сутки опередил нашего прежнего лидера Shark. Во-вторых, на третье место вышел еще один новый участник - Dizil. Еще не все лидеры прошли две добавленные на прошлой неделе задачи. Может произойти и перестановка участников в десятке после решения добавленных задач. Например, noname и Shurgenz имеют незначительную разницу в результатах.
Наконец, серьезные перестановки может вызвать последняя задача. Но пока ее никто не отважился начать решать, считая, что до нового года осталось слишком мало времени. Видимо, среди новогодних пожеланий Деду Морозу будут и пожелания решить эту задачу в течение 2006 года :-).
Как бы то ни было, на первое место вышел автор 138 задачи Cyrilus. Теперь всех интересует, сколько времени потратят лидеры на решение этой задачи, и можно ли отыграть отрыв в несколько дней.
§ Продолжили движение и сохранили шансы на место в десятке
ValdemarES (задач 119, время 3.165)
SergeyTikh) (112, 5.366)
Goapsy (102, 3.779)
Pushkin (100, 5.279)
User_Name (97, 4.186)
§ Продолжили свое восхождение к вершине сотни:
VIG (135, 13.929)
Phohack (132, 65.658)
Robin (126, 75.605)
Sp999 (124, 23.777)
Bolschakoff_I_A (123, 51.267)
ogarok_dima (121, 11.367)
Aaz (120, 12.164)
хах (120, 42.371)
Weed (120, 47.370)
Johnny (119, 68.729)
go (118, 19.819)
ruchey (117, 34.855)
Lord Nick (116, 17.599)
LEG2005 (109, 22.302)
fil (107, 36.508)
Нина (96, 10.109)

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

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

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

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

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

No Person Number of
Sel_ex
Last_Sel Number of
DML_ex
Scores Days Days_2 LastSolved LastVisit
1 >Кувалкин К.С. (Cyrilus) 138 138 20 315 380 5.163 09 Dec 2005 09 Dec 2005
2 Войнов П.Е. (pаparome) 137 137 20 311 104 1.728 06 Dec 2005 09 Dec 2005
3 Духин А. (Shark) 137 72 20 311 148 2.762 06 Dec 2005 09 Dec 2005
4 Абашин П.И. (Dizil) 137 137 20 311 104 3.657 06 Dec 2005 09 Dec 2005
5 Голубин Р.С. (Roman S. Golubin) 137 72 20 311 108 6.579 04 Dec 2005 09 Dec 2005
6 Тарасов Д.Б. (Gavrila) 137 72 20 311 102 10.662 06 Dec 2005 09 Dec 2005
7 Страшников А.С. (EffEct) 137 72 20 311 205 57.947 06 Dec 2005 09 Dec 2005
8 Галиаскаров Э.Г. (Galogen) 136 59 20 309 380 61.499 07 Dec 2005 09 Dec 2005
9 Зверев Д.Л. (dimzv) 135 137 20 308 643 2.888 08 Aug 2005 23 Nov 2005
10 Носков Н.В. (niko2) 135 137 20 308 47 7.832 22 Aug 2005 03 Dec 2005
11 Гонтовой В.А. (noname) 135 137 20 308 105 9.797 29 Jun 2005 10 Nov 2005
12 Леденев С.А. (Shurgenz) 135 137 20 308 313 9.865 27 Jun 2005 06 Dec 2005
13 Бураков С.Г. (burakov58) 135 137 20 308 164 12.086 12 Jul 2005 04 Dec 2005
14 Крижевич С.А. (yaff) 135 137 20 308 134 14.297 11 Nov 2005 01 Dec 2005
15 Валуев Д.И. (Fiolent) 135 137 20 308 662 26.569 27 Jun 2005 03 Dec 2005
16 Мельникова И.А. (Iris_m) 135 137 20 308 478 91.738 02 Sep 2005 10 Oct 2005
17 Gershovich (VIG) 135 59 20 305 999 13.929 05 Dec 2005 09 Dec 2005
18 Колосов А.С. (KAS) 132 137 20 302 25 3.392 11 Mar 2005 30 Oct 2005
19 Алалыкин В.М. (BOBAH) 133 135 20 301 101 28.217 01 Sep 2005 04 Dec 2005
20 Сныткин В.Л. (Ded I) 132 136 20 300 252 7.365 12 May 2005 16 Nov 2005

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

No surname n_sel sel_all sel_scores dml_scores scores rating last_visit
1 Лебедев И. (swanotets) 40 60 80 32 112 218 09 Dec 2005
2 >Зуев К.В. (1nside) 57 57 103 9 112 412 09 Dec 2005
3 Рочев А.С. (Worst) 56 56 101 5 106 484 08 Dec 2005
4 Ivanov I.I. (vulkan-x) 47 47 76 0 76 827 08 Dec 2005
5 >Захаров (Захаров Д.В.) 27 57 64 8 72 422 09 Dec 2005
6 Иванов А.Ю. (Алексей I) 39 39 67 3 70 924 07 Dec 2005
7 Козлов С.Н. (Chorist) 35 35 62 0 62 1067 08 Dec 2005
8 >Харина (cympak) 36 36 49 9 58 1158 09 Dec 2005
9 >Хромов С.Ю. (корч) 32 34 57 0 57 1147 09 Dec 2005
10 Уткина (Уткина Наташа) 34 34 56 0 56 1197 03 Dec 2005
11 Reus E. (EugeniE) 22 44 38 17 55 683 08 Dec 2005
12 >Б А.В. (BDRON) 30 30 55 0 55 1220 09 Dec 2005
13 >Филиппов (fil) 12 107 29 23 52 69 09 Dec 2005
14 wuxep (Витёк) 18 34 40 9 49 954 07 Dec 2005
15 pavlov (Mitkko) 35 35 46 3 49 1364 09 Dec 2005
16 >Самохвалов В. (ValdemarES) 19 119 47 0 47 44 09 Dec 2005
17 >Горький А.Н. (Gorky) 19 69 45 2 47 302 09 Dec 2005
18 Зверев К.А. (blink) 19 60 43 0 43 446 07 Dec 2005
19 Фонарёва О.А. (Фонарёва Ольга) 6 58 16 24 40 237 09 Dec 2005
20 Шурдов А.М. (Gross-A) 25 25 40 0 40 1559 05 Dec 2005
21 >Корницкая Н.В. (Натали) 25 25 40 0 40 1591 09 Dec 2005

Изучаем SQL

Управление безопасностью SQL Server средствами Microsoft Access (продолжение, начало в вып.60-64)

Rick Dobson, Ph.D. (оригинал: Managing Microsoft SQL Server Security with Microsoft Access )
Выборочный перевод Леденева С. А.

Добавление и удаление логинов

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

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

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

Вторая процедура после соединения с сервером инициализирует объект login. Этот объект - член коллекции Logins, показанной на рисунке. Далее процедура устанавливает три параметра для логина: его имя (login_name), базу данных по умолчанию (defaulf_db_name) и пароль (password). Операции по простому присвоению работают с двумя первыми аргументами. Для установки пароля для логина SQL сервера вызывается метод SetPassword объекта login. При установке пароля для нового логина используйте пустую строку в качестве первого аргумента метода; укажите пароль для нового логина вторым аргументом. В нашем примере пароль для логина login_name определен как "password" (без кавычек). Добавление логина login_name завершается вызовом метода Add коллекции Logins.

Также Вы можете использовать метод SetPassword для переопределения пароля существующего логина. Первый аргумент метода SetPassword в этом случае - текущий пароль. Однако если Вы не знаете текущего пароля, Вы можете указывать первым аргументом пустую строку-так же, как при создании пароля для нового логина. Создание или изменение логина возможно в том случае, если Ваш текущий логин (под которым Вы осуществили соединение с сервером) входит в одну из фиксированных ролей сервера: sysadmin или securityadmin. Неважно, каким способом Вы меняете пароль: программно или другими средствами. В примере используется логин sa, входящий в фиксированную роль сервера sysadmin.

В нескольких следующих строках второй процедуры создается логин для группы Windows group с именем msdn_OS_users. В моем случае эта группа Windows из трех идентификаторов пользователей Windows, в действительности группа Windows могла быть как группой пользователей локального компьютера, так и домена сервера Windows. Процесс создания логина начинается с инициализации нового объекта login (lgn1). При попытке повторного использования lgn1 без переинициализации (обнуления), возникнет ошибка выполнения, напоминающая о том, что требуется новый объект. Процедура использует название группы Windows, состоящее из двух частей. Первая часть - имя сервера Windows, вторая - имя группы сервера Windows. Обратный слэш служит разделителем. Базой данных по умолчанию для второго логина снова указывается база данных your_db_name. Поскольку второй логин создается для аутентификации Windows, нет необходимости устанавливать пароль. Однако необходимо установить свойство Type в SQLDMOLogin_NTGroup. Это значение соответствует внутренней константе, соответствующей логину группы Windows. При добавлении логина SQL Server не нужно устанавливать значение свойства Type, поскольку оно задано по умолчанию для логинов SQL сервера. Заканчивается создание второго логина вызовом метода Add коллекции Logins.

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

После печати членов коллекции Logins процедура удаляет два вновь созданных логина поименно: login_name и YOUR_SERVER_NAME\msdn_OS_users. Этот пример демонстрирует использование коллекции Logins ее метода Remove и свойства Name логина, которого Вы хотите удалить. Для подтверждения удаления двух логинов процедура выводит список логинов повторно из коллекции Logins. Откройте окно Immediate и сравните два списка логинов: после добавления и удаления двух логинов.

Sub CallLoginDemo()
    Dim srvname As String
     Dim suid As String
     Dim pwd As String

     'устанавливаем параметры для логина при аутентификации SQL сервером
     srvname = "YOUR_SERVER_NAME"
     suid = "sa"
     pwd = "password"

     'Вызов процедуры создания логинов
     LoginDemo srvname, suid, pwd

End Sub

Sub LoginDemo(srvname As String, _

     suid As String, pwd As String)
     Dim srv1 As SQLDMO.SQLServer
     Dim lgn1 As SQLDMO.Login

     'Инициализация объекта сервера
     Set srv1 = New SQLDMO.SQLServer

     'Вызов метода Connect
     srv1.Connect srvname, suid, pwd

     'Инициализация объекта login
     Set lgn1 = New SQLDMO.Login

     'Добавление логина SQL Server
     lgn1.Name = "login_name"
     lgn1.Database = "your_db_name"
     lgn1.SetPassword "", "password"

     srv1.Logins.Add lgn1

     'Инициализируем логин для повторного использования
     Set lgn1 = New SQLDMO.Login

     'Добавляем логин для группы Windows
     lgn1.Name = "YOUR_SERVER_NAME\msdn_OS_users"
     lgn1.Database = "your_db_name"
     lgn1.Type = SQLDMOLogin_NTGroup
     srv1.Logins.Add lgn1

     'Вывод всех логинов после добавления двух новых
     Debug.Print "Логины после добавления двух новых"
     For Each lgn1 In srv1.Logins
     Debug.Print DecodeLoginType(lgn1.Type), lgn1.Name
     Next lgn1

     'Удаление только что добавленных логинов
     srv1.Logins.Remove "YOUR_SERVER_NAME\msdn_OS_users"
     srv1.Logins.Remove "login_name"

     'Повторный вывод всех логинов
     Debug.Print vbCr & "Логины после удаления двух логинов"
     For Each lgn1 In srv1.Logins
         Debug.Print DecodeLoginType(lgn1.Type), lgn1.Name
     Next lgn1

     'Очистка переменных
     srv1.Disconnect
     Set srv1 = Nothing
    
End Sub

Function DecodeLoginType(lgn_type As Byte) As String

     Select Case lgn_type
     Case 0
         DecodeLoginType = "SQLDMOLogin_NTUser"
     Case 1
         DecodeLoginType = "SQLDMOLogin_NTGroup"
     Case 2
         DecodeLoginType = "SQLDMOLogin_Standard"
     Case Else
         DecodeLoginType = "Type out of range"
     End Select

End Function

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

Контакты

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

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

Subscribe.Ru
Поддержка подписчиков
Другие рассылки этой тематики
Другие рассылки этого автора
Подписан адрес:
Код этой рассылки: comp.soft.db.sqlex
Архив рассылки
Отписаться
Вспомнить пароль

В избранное