Аутентификация пользователя
Для подключения к системе Гедымин надо иметь учетную запись и знать ее пароль. В отличие от сервера Interbase, все учетные записи Гедымина хранятся в самой базе данных в таблице GD_USER. Таким образом, существенно облегчается процесс переноса файла базы с одного сервера на другой, что особенно актуально при развертывании распределенной базы данных.
При создании учетной записи в системе Гедымин автоматически создается учетная запись на сервере Interbase. Ее имя и пароль генерируются системой. Этой учетной записи предоставляется право на использование роли ADMINISTRATOR, которая изначально определена в каждой базе данных Гедымина. Роли ADMINISTRATOR предоставлены полные права на доступ ко всем таблицам и процедурам. При подключении к серверу базы данных используется роль ADMINISTRATOR и учетная запись сервера Interbase, сопоставленная учетной записи платформы Гедымин. В процессе работы (за исключением момента аутентификации) Гедымин не использует средства SQL для разграничения доступа пользователей к таблицам и колонкам базы данных. Вместо этого используются внутренние механизмы платформы.
Важным элементом механизма безопасности платформы Гедымин является учетная запись сервера Interbase с именем STARTUSER и паролем startuser. Поскольку учетные записи Interbase не передаются вместе с базой данных, а хранятся в отдельной базе на сервере, то STARTUSER создается инсталлятором в процессе установки серверной части платформы. Если по какой-либо причине используется ручная установка или база данных размещается на компьютере, где уже установлен и сконфигурирован сервер, например, для работы с другими приложениями, то данную учетную запись необходимо создать вручную, либо с помощью утилиты командной строки gsec, либо с помощью любой доступной графической надстройки.
Единственным правом, которым обладает учетная запись STARTUSER является право выполнения процедуры аутентификации GD_P_SEC_LOGINUSER. Таким образом, хотя имя и пароль этой учетной записи известны всем, подключение под ней не представляет никакой опасности . Само сабой разумеется, что учетная запись STARTUSER не обладает правом использования роли Administrator. В базе данных присутствует процедура с именем GD_P_SEC_LOGINUSER, которая отвечает за аутентификацию пользователя. На вход этой процедуры передается наименование учетной записи платформы Гедымин и введенный пользователем пароль. Процедура возвращает код завершения (успех, или номер ошибки), а так же имя учетной записи Interbase, ее пароль и дополнительную информацию.
Рассмотрим подробно, как происходит загрузка платформы и ее подключение к серверу базы данных.
- Запускается файл GEDEMIN.EXE;
- Определяется имя сервера и путь к файлу базы данных:
- Если среди параметров командной строки присутствует ключ /sn, то его значение используется в качестве имени сервера и пути к файлу базы данных;
- Если в командной строке имя сервера и путь к базе данных не заданы, то из системного реестра считывается информация о последнем подключении;
- С использованием имени сервера и пути к файлу базы данных осуществляется попытка подключиться используя учетную запись STARTUSER и ее пароль;
- Если возникла ошибка, то проверяется ее код:
- Если сервер не сконфигурирован, нет учетной записи STARTUSER, то Гедымин предлагает ее создать. При этом запрашивается пароль учетной записи SYSDBA. После успешного создания учетной записи STARTUSER попытка подключения повторяется.
- Если указанной базы данных нет на сервере, то выдается предупреждающее сообщение и открывается окно выбора базы данных.
- При возникновении других ошибок соответствующие сообщения выводятся на экран.
- Если подключение под учетной записью STARTUSER прошло успешно, то:
- если в параметрах командной строки заданы имя пользователя и его пароль, то эти значения используются для аутентификации пользователя. Диалоговое окно запроса пароля на экран не выводится.
- если в параметрах командной строки не заданы ни имя пользователя, ни его пароль или задан только один параметр, то из системного реестра считывается имя учетной записи Гедымина, под которой последний раз было осуществлено подключение и на экран выводится окно для ввода пароля;
- Если необходимо, на экран выводится диалоговое окно для ввода имени пользователя и пароля. В этот момент подключение к базе данных под учетной записью STATUSER по-прежнему активно.
- Если в течение трех минут пользователь не вводит имя пользователя и пароль, то диалоговое окно и подключение к базе данных закрываются. Пользователю предлагается либо завершить выполнение программы, либо продолжить загрузку платформы без подключения к базе данных.
- В процессе работы в диалоговом окне пользователь может выбрать другую базу данных из выпадающего списка, либо зарегистрировать новую базу данных. в любом случае, активное подключение закрывается и повторяются шаги 3-5.
- Используя активное подключение вызывается процедура GD_P_SEC_LOGINUSER на вход которой передаются: имя учетной записи Гедымин и введенный пользователем пароль;
- Процедура проверяет введенную информацию. По заданному имени пользователя в таблице GD_USER отыскивается запись:
- Если запись существует, и введенный пользователем пароль совпадает с тем, который хранится в записи, то возвращается имя пользователя Interbase, его пароль, а так же вспомогательная информация.
- Если переданы неверные данные или подключение невозможно, то возвращается соответствующий код ошибки. Например, такой учетной записи нет в базе данных, или запись заблокирована или введен неверный пароль и т.п.
- Закрывается активное подключение к базе данных.
- Происходит подлючение к базе данных с использованием учетной записи Interbase, ее пароля и роли ADMINISTRATOR.
- Если такой учетной записи Interbase нет на сервере, то, возможно, база данных была перенесена на другой сервер или сервер был переустановлен, т.е. файл с паролями isc4.gdb был заменен чистым файлом. Запрашиваем у пользователя пароль SYSDBA и пытаемся пересоздать учетную запись. Если получилось, отражаем изменения в таблице GD_USER.
- Если подключение прошло успешно, то на этом процедура аутентификации завершена. Осуществляется загрузка платформы.