Лекция № 24

Тема: "Подключение клиент/серверных СУБД в приложениях"

 

План

1. Администрирование SQL Server

2. Подключение к БД SQL Server в проектах Delphi

3. Создание пользовательского окна регистрации в системе

 

1. Администрирование SQL Server

 

Режимы аутентификации

Для доступа к SQL Server можно использовать два режима аутентификации: режим аутентификации Windows (Windows Authentication) и режим смешанной аутентификации (Mixed Mode Authentication). В первом случае для подключения к серверу пользователю достаточно пройти регистрацию в операционной системе Windows. В смешанном режиме пользователю нужно явным образом указать логин и пароль для подключения к серверу.

Чтобы задать нужный режим аутентификации откройте окно утилиты "Среда SQL Server Management Studio". В левой панели вызовите контекстное меню нужного сервера (если их несколько) и выберите команду "Свойства". В новом окне перейдите на закладку "Безопасность", выберите переключатель "Проверка подлинности SQL Server и Windows" и щелкните на кнопке ОК.

 

 

 

 Изменение типа подключения к серверу

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

Для того, чтобы подключение к серверу выполнялось с помощью учетных записей сервера надо настроить параметры подключения в окне регистрации перед запуском утилиты "Среда SQL Server Management Studio".

В поле "Проверка подлинности" выберите значение "Проверка подлинности SQL Server", в поле "Имя входа" введите имя пользователя (по умолчанию существует имя системного администратора "sa"), в поле "Пароль" введите пароль пользователя.

 

 

Управление учетными записями

SQL Server является клиент/серверной СУБД, поэтому в ней в полном объеме реализован механизм учетных записей пользователей.

В SQL Server есть два типа учетных записей:

- учетная запись для подключения пользователя к серверу SQL Server;

- учетная запись для подключения пользователя к конкретной базе данных.

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

Второй тип позволяет пользователю получить доступ к конкретной базе данных и работать с ней.

 

Имена входа для подключения к серверу ( login-записи)

Запустите утилиту "Среда SQL Server Management Studio". Для создания учетной записи в дереве раскройте узел "Безопасность", в контекстном меню узла "Имена входа" выберите команду "Создать имя входа". В результате откроется окно, в котором надо указать имя, затем выбрать переключатель "Проверка подлинности SQL Server" и дважды ввести пароль новой учетной записи.

 

 

В списке "База данных по умолчанию" укажите принятую по умолчанию базу данных и язык, который будет использоваться пользователем.

Если в левой части окна выбрать команду "Серверные роли", то вы можете указать, какие роли на сервере сможет выполнять новая login-запись; для этого вы должны выбрать эти роли из списка ролей, доступных для данного пользователя.

 

 

Если в левой части окна выбрать команду "Сопоставление пользователей", то в верхней части окна можно выбрать базы данных, к которым будет иметь доступ пользователь, а в нижней части указать роли, которые может выполнять пользователь в указанной базе данных.

 

 

Задав все параметры для имени входа, щелкните ОК для сохранения данных

По умолчанию в SQL Server имеется имя системного администратора "sa" без пароля. Для защиты сервера рекомендуется обязательно назначить данной учетной записи пароль. Для этого в контекстном меню этого имени выберите команду "Свойства" и в окне задайте пароль.

 

Учетные записи для подключения к базе данных (пользователи)

В отличие от имен входа SQL Server, пользователи SQL Server создаются для определенной базы данных.

 

 

Раскройте узел нужной базы данных. Дальше раскройте узел "Безопасность" и для вложенного узла "Пользователи" в контекстном меню выберите команду "Создать пользователя".

 

 

В поле "Имя пользователя" введите нужное значение и в списке "Имя входа" укажите допустимое имя SQL Server, которое будет соотноситься с пользователем БД.

С помощью списка "Схема по умолчанию" можно выбрать одну из стандартных схем доступа к БД, или с помощью флажков выбрать нужные схемы и роли для создаваемого пользователя.

После ввода всех параметров щелкните на кнопке "ОК".

 

Администрирование ролей баз данных

Вы можете упростить задачу управления полномочиями для групп пользователей путем использования ролей для баз данных. Роли баз данных используются, чтобы предоставлять нужные полномочия сразу целым группам пользователей. Вместо присваивания отдельных полномочий отдельным пользователям вы можете создать роль и потом присвоить ее нужной группе.

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

Для создания ролей базы данных раскройте узел базы данных, потом узел "Безопасность" и найдите узел "Роли".

 

 

Щелкните правой кнопкой мыши на этом узле и выберите в контекстном меню команду «Создать роль базы данных».

 

 

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

В левой части окна изберите команду "Защищаемые объекты". После чего в правой части можно указать нужные для защиты объекты базы данных (БД, талицы, индексы, представления и другие элементы) и задать параметры доступа к ним.

 

 

Использование фиксированных ролей на сервере

Во время инсталляции SQL Server создается ряд заранее определенных ролей, которые применяются на уровне сервера. Эти фиксированные роли на сервере используются для предоставления полномочий администратора. Ниже приводится список этих ролей.

- bulkadmin. Позволяет выполнять массовые вставки.

- dbcreator. Позволяет создавать и изменять базы данных.

- diskadmin. Позволяет управлять файлами на дисках.

- processadmin. Позволяет управлять процессами SQL Server.

- securityadmin. Позволяет управлять login-записями и создавать полномочия для доступа к базам данных.

- serveradmin. Позволяет задавать любые параметры сервера и закрывать базу данных.

- setupadmin. Позволяет управлять связанными серверами и процедурами запуска.

- sysadmin. Позволяет выполнять любые операции на сервере.

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

Эти роли можно присвоить при создании или редактировании имени входа на сервер.

 

2. Подключение к БД SQL Server в проектах Delphi

Для подключения БД SQL Server в Windows есть встроен драйвер БД.

Нанесите на форму компонент ADOConnection (ADO) и задайте свойства: Connection=false, LoginPrompt=true. Раскройте свойство ConnectionString и щелкните на кнопке Build.

На первом шаге выберите строку "Microsoft OLE DB Provider for SQL Server" и щелкните Дале

 

 

На следующем шаге в первом пункте введите имя сервера. Для создания приложения, выполняющего доступ к БД по сети, здесь нужно ввести сетевое имя сервера или его IP-адрес и через запятую номер порта (по замалчиванию 1433).

Во втором пункте в полях "Пользователь" и "Пароль" введите параметры имеющейся на сервер учетной записи и включите флажок "Разрешить сохранение пароля".

В третьем пункте из списка выберите нужную БД.

 

 

После создания подключения работа с БД выполняется стандартными методами с помощью компонентов доступа к данным.

 

3. Создание пользовательского окна регистрации в системе

Стандартное окно регистрации пользователя, которое появляется при установке свойства LoginPrompt имеет ряд недостатков:

- нельзя адаптировать его внешний вид под общий стиль разрабатываемой системы;

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

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

Пример. Создать форму для ввода регистрационной информации: логина, пароля и имя сервера.

 

 

При щелчке на кнопке "Войти" программа устанавливает параметры соединения. Если соединение установлено, то открывается основная форма с БД. Если соединение не установлено, то выдается сообщения об ошибке и программа закрывается.

 

Решение.

Добавьте в проект новую форму Form2 и задайте свойства: BorderStyle=bsDialog, Caption=Регистрация, Position=poDesktopCenter.

На форме разместите 4 компонента Edit (Standard) для ввода регистрационной информации. Для поля Edit2 (ввод пароля) установите свойство PasswordChar=*.

На форме разместите 4 компонента Label (Standard) и в свойстве Caption введите надписи для полей формы.

На форме разместите две кнопки Button (Standard) и в свойстве Caption введите надписи на кнопках.

Кнопка "Отмена"  просто завершает работу программы. Для нее напишем код:

 

procedure TForm2.Button2Click(Sender: TObject);

begin

    Close;

end;

 

Кнопка "Войти" должна передать в главную форму введенные пользователем параметры подключения.

Для этого опишем в коде формы регистрации глобальные переменные для сохранения параметров:

 

login, password, server, port:string;

 

Для кнопки напишем код:

 

procedure TForm2.Button1Click(Sender: TObject);

begin

//сохраняем параметры регистрации

login:=edit1.text;

password:=edit2.text;

server:=edit3.text;

port:=edit4.text;

//закрываем окно регистрации

close;

end;

   

Для вызова формы регистрации с помощью команды "Project – View Source" откройте код файла проекта и после слова begin введите команды:

 

form2:=TForm2.Create(nil);

form2.ShowModal;

 

На главной форме необходимо внести изменения в событие OnCreate. По умолчанию компонент ADOConnection использует строку подключения из свойства ConnectionString. Необходимо изменить это свойство, подставив  внего введенные пользователем параметры.

Следовательно событие OnCreate будет иметь следующий вид:

 

procedure Tform1.Form1Create(Sender: TObject);

begin

    //отключаемся от БД

    ADOConnection1.Connected:=false;

    //формируем строку параметров подключения

    //для ее формирования скопируйте текст из своства ConnectionString

    //вставьте в код и отредактируйте

    ADOConnection1.ConnectionString:='Provider=SQLOLEDB.1;Password='+password+

                                     ';Persist Security Info=True;User ID='+login+

                                     ';Initial Catalog=baza;Data Source='+server+','+port;

 

    try

        //пробуем подключиться к БД       

        ADOConnection1.Connected:=true;

    except

    //если подключение с указанными параметрами не удалось       

    begin

        //выдаем сообщение об ошибке           

        Application.MessageBox('Неверные регистрационные данные',

                               'Ошибка подключения',MB_OK+MB_IconError);

        //завершаем работу программы           

        ExitProcess(0);

        end;

    end;

    //если подключение к БД выполнено, подключаемся к таблицам   

    ADOTable1.Active:=true;

    ADOTable2.Active:=true;

end;

 

Замечание: В приведенном коде формы регистрации используется новая конструкция try...except...end. Данная конструкция позволяет вместо стандартных системных сообщений об ошибках выдавать на экран собственные сообщения (в нашем случае сообщения об ошибке подключения к БД).

Для работы этой конструкции надо в среде Delphi выполнить команду "Tools-Debugger Options", на закладке "Language Exception" снимите флажок "Stop On Delphi Exception". Обратите внимание, что оставлять данную настройку выключенной не рекомендуется, потому что после этого Delphi не будет выдавать подробных сообщений о любых ошибках.

 

Вопросы для самоконтроля

1. Какие режимы аутентификации на сервере SQL Server вы знаете? Как их настроить?

2. Как изменить тип подключения к серверу SQL Server?

3. Что означает понятие "имя входа" сервера SQL Server? Как управлять этими именами?

4. Что означает понятие "имя пользователя базы данных" SQL Server? Как управлять этими именами?

5. Опишите принципы администрирования полномочий доступа к БД SQL Server.

6. Опишите принципы администрирования ролей баз данных SQL Server.

7. Что такое фиксированные роли на сервере SQL Server? Как их используют?

8. Опишите принцип подключения БД SQL Server к проекту Delphi.

9. Как создать собственную формы регистрации на сервере?