Firebird как изменить пароль sysdba

Что еще может понадобиться

Что еще может понадобиться

Сетевой адрес для сервера

  • В администрируемой сети обратитесь к системному администратору
    за IP-адресом для Вашего сервера.

  • Если у Вас простая изолированная сеть из, например, двух
    компьютеров, Вы можете назначить серверу любой IP-адрес за
    исключением 127.0.0.1 (который зарезервирован за локальным
    loopback-интерфейсом) и, конечно же, IP-адресом, назначенным для
    клиентского (второго) компьютера.

  • Если Вы намерены испробовать установку и клиента и сервера на
    автономном компьютере, Вам необходимо использовать адрес
    loopback-интерфейса – localhost, с IP-адресом
    127.0.0.1

Замечание

Под Windows к Superserver возможно осуществлять локальное
подключение без использования loopback-интерфейса. Это не
TCP/IP-соединение и это не потоко-безопасный (thread-safe) способ
подключения к локальному серверу. Этот способ хорош при эксклюзивном
режиме работы с базой данных с использованием утилит командной строки
(gsec, gbak и
т.д.). В противоположность этому, в случае Linux и Classic-сервера
прямые соединения, даже множественные, к базе данных полностью
безопасны.

Имя пользователя и пароль, значения по умолчанию

SYSDBA —
пользователь, который имеет все привилегии на сервере. В зависимости от
версии, операционной системы и архитектуры, инсталляционная программа
для SYSDBA:

  • назначит пароль masterkey (точнее,
    masterke: символы после восьмого игнорируются),
    или

  • запросит пароль во время процедуры установки, или

  • сгенерирует и сохранит случайное значение пароля в файле
    /opt/firebird/SYSDBA.password.

Если, вдруг, Ваш сервер выставлен непосредственно в Интернет и при
этом пароль у SYSDBA —
masterkey, немедленно измените его, используя утилиту
командной строки gsec ( В целях повышения уровня безопасности целесообразно
изменить пароль SYSDBA в любом
случае).

Как изменить пароль SYSDBA

Для управления учетными записями пользователей в составе пакета
Firebird поставляется утилита командной строки
gsec.

Важно

В некоторых инсталляциях Firebird запуск утилиты
gsec возможен только при входе в систему от имени
привилегированного пользователя
(например, root в системе Linux) или
пользователя, от имени которого происходит запуск серверного
процесса Firebird. На серверных системах Windows для использования
утилиты gsec, обычно, Вы должны быть
членом группы Power User
или другой правомочной группы.

Если Вы уверены, что у Вас достаточно привилегий, но
использование gsec заканчивается
сообщениями типа «unavailable database —
unable to open database
» — возможно, сервер
не запущен. Вернитесь к разделу Тестируем то, что
установили
и попробуйте устранить причину.

Если Вы уверены, что у Вас достаточно привилегий, но
использование gsec заканчивается
сообщениями типа «unavailable database —
unable to open database
»:

  • либо Вы используете Windows Classic Server и указываете
    неверное значение параметра -database
    (см. далее), либо

  • возможно, сервер не запущен, в этом случае, вернитесь к
    разделу Тестируем то,
    что установили
    и попробуйте устранить
    причину.

Предположим, Вы решили сменить пароль SYSDBA на
icuryy4me.

  1. Перейдите к интерпретатору командной строки и смените
    текущую директорию на ту, в которой находятся утилиты командной
    строки. Если Вы не знаете, где они находятся, обратитесь за
    подсказкой к таблице Компоненты Firebird 1.5 и их расположение.

  2. Наберите следующее, если Вы не
    используете Windows Classic Server:

    gsec -user sysdba -password
    masterkey

    В случае использования Windows Classic Server, Вы
    должны указывать полное сетевое расположение
    базы данных безопасности (к сожалению!):

    gsec -user sysdba -password masterkey -database
    «localhost:C:Program
    FilesFirebirdFirebird_1_5security.fdb»
    (при
    необходимости измените путь)

    Замечание

    • В Linux, лучше писать ./gsec, чем
      просто gsec. Иначе есть шанс, что
      запуститься «не та»
      gsec, или она просто не
      найдется.

    • На всех платформах, за исключением Windows, путь и
      имена файлов являются чувствительными к регистру; пароли
      всегда регистрочувствительны.

    В любом случае, после нажатия клавиши
    Enter, Вы должны наблюдать
    приглашение утилиты gsec:

  3. Наберите команду:

    modify sysdba -pw icuryy4me

  4. Нажмите Enter. Новое значение пароля —
    icuryy4me, зашифровывается и сохраняется,
    предыдущее значение — masterkey, теперь
    недействительно.

  5. Для выхода из gsec, используйте
    команду:

Замечание

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

Средства администрирования

В состав пакета Firebird не входит какое-либо графическое средство
администрирование, но есть набор утилит командной строки, исполняемые
файлы находятся в папке
bin.

При этом существует большой выбор средств от сторонних
производителей, различных степеней замечательности, (кросс-)
«платформенности» и платности.

Начать ознакомление со списком можно на сайте http://www.ibphoenix.com в
разделе Downloads
> Contributed > Admin Tools page.

Замечание

Для управления сервером под Linux Вы можете использовать
клиента под Windows и наоборот.

Автор перевода считает
допустимым отдельным образом отметить средство администрирования, в
разработке которого он сам принимает участие — FlameRobin. Это простое и
удобное графическое средство управления базами данных Firebird с
открытым исходным кодом. На сегодняшний день доступны версии под Linux,
MacOS и Windows. Подробную информацию можно получить на сайте проекта
http://www.flamerobin.org

Скрипт changeDBAPassword.sh позволяет изменить
пароль для пользователя SYSDBA (администратора баз данных) и изменить владельца других,
стартующих автоматически (startup), скриптов. Скрипт выполняется в неинтерактивном
режиме, как часть процесса установки (при установке создаётся случайно
сгенерированный пароль, который сохраняется в файле
/opt/firebird/SYSDBA.password). Пароль в последствии используется
при запуске скрипта /etc/rc.d/init.d/firebird,
который также является символической ссылкой на /etc/init.d/firebird. Новый пароль также
изменяется в базе данных безопасности (с логинами и паролями пользователей)
/opt/firebird/security.fdb.

Предостережение

Скрипт должен выполняться пользователем root, и в процессе
выполнения сначала будет запрошен ввод текущего пароля SYSDBA, а затем
нового пароля. Оба пароля будут видны на экране, поэтому для повышения
безопасности не позволяйте никому смотреть на экран при выполнении
скрипта.

После выполнения скрипта файл
/opt/firebird/SYSDBA.password будет содержать новый
пароль в текстовом виде, поэтому убедитесь, что этот файл не доступен
для чтения никому, кроме пользователя root.

Следующий пример показывает изменение пароля SYSDBA с ‘masterkey’ на
‘biroguin’, который не является словом и будет более устойчив к взлому и
угадыванию.

# cd /opt/firebird/bin
# ./changeDBAPassword.sh
Please enter current password for SYSDBA user : masterkey
Please enter new password for SYSDBA user : biroguin
GSEC> GSEC>

Running ed to modify /etc/init.d/firebird
#

Предостережение

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

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

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

Перейдём в каталог с исполняемыми файлами экземпляра Firebird и с помощью утилиты gsec подключимся к базе данных пользователей (файл security2.fdb в каталоге с экземпляром) командой следующего вида:

cd /d D:FBInst1Binbin
gsec -user sysdba -password masterke -database "localhost/3051:D:FBInst1Binsecurity2.fdb"

Войдя в интерактивный режим работы с утилитой gsec, выполняем команду смены пароля:

modify sysdba -pw newP@s$w

При указании пароля помните про то, что Firebird 2.5 игнорирует в пароле символы больше восьмого, поэтому задавать пароль длинной больше 8 символов нет смысла.

Обратите внимание на то, какой мы используем путь к файлу БД security2.fdb. Это важный момент для конфигураций, когда на одном сервере выполняется несколько экземпляров Firebird. Если мы попытаемся использовать простое указание локального пути на файловой системе вида D:FBInst1Binsecurity2.fdb, то можем столкнуться со странной ситуацией, при которой оба запущенных экземпляра Firebird будут пытаться использовать один и тот же файл security2.fdb. Это может вызвать серьёзную путаницу при работе с утилитой gsec для настройки двух разных экземпляров. Именно поэтому лучше использовать подключение к экземпляру через протокол TCP, явно указывая адрес хоста и порт экземпляра Firebird, а также относящийся к нему файл security2.fdb.

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

Описанным способом меняем пароль, используемый по умолчанию, для пользователя SYSDBA на всех отдельный экземплярах Firebird. Разумеется, для разных экземпляров при этом в целях безопасности лучше использовать разные пароли.

Кстати входить в интерактивный режим работы с утилитой gsec для смены пароля SYSDBA не обязательно. Можно выполнить смену пароля одной командой, указав в ней и действующий в экземпляре пароль и новый пароль, который необходимо установить. Посмотрим, как это делается на примере нашего второго экземпляра:

cd /d E:FBInst2Binbin
gsec -user sysdba -password masterke -database "localhost/3052:E:FBInst2Binsecurity2.fdb" -modify sysdba -pw newPAz$w

И опять же. Для проверки, после смены пароля, попытаемся подключиться к базе данных security2.fdb, относящейся к нашему второму экземпляру Firebird, сначала со старым паролем, который ранее был установлен по умолчанию, а затем с тем паролем, который мы задали.

Результат должен быть предсказуемым.

Таким образом, мы заменили пароль пользователя SYSDBA на всех экземплярах Firebird, улучшив тем самым уровень их безопасности.


Проверено на следующих конфигурациях:

Версия ОС Версия Firebird
Windows Server 2012 R2 Standard EN (6.3.9600) 2.5.8 32-bit
Windows Server 2012 R2 Standard EN (6.3.9600) 2.5.9 64-bit

Автор первичной редакции:
Алексей Максимов
Время публикации: 06.11.2018 23:01

Сегодня возник вопрос как изменить пароль для SYSDBA. Рассмотрим как это сделать стандартными средствами, а именно утилитой GSEC.

GSEC — это утилита для работы с базой данных безопасности (содержащей информацию о пользователях СУБД). Она позволяет управлять учетными записями пользователей для различных баз данных СУБД Firebird. Используя различные опции, можно добавлять, изменять или удалять учетные записи пользователей из базы данных безопасности.

Информация обо всех пользователях баз данных СУБД Firebird хранится в общей базе данных безопасности. Это обычная база данных СУБД Firebird, которая располагается на сервере, и называется security.fdb. Начиная с СУБД Firebird 2 она называется security2.fdb. По умолчанию этот файл располагается в директории:

C:Program FilesFirebirdFirebird_x_x

для ОС Windows (где x_x — версия Firebird, например 1_5).

/opt/firebird

для ОС Linux и других Unix-систем.
Вносить изменения в базу данных безопасности может только пользователь SYSDBA. Обычный пользователь может запустить GSEC только для просмотра информации.

Первоначально, при установке сервера (под Windows), пользователю SYSDBA присваивается стандартный пароль masterkey. Этот пароль НЕОБХОДИМО поменять после установки сервера. В противном случае, вы подвергаете опасности как данные в БД, так и саму БД, в силу того, что пользователь SYSDBA обладает наивысшими правами доступа к БД.

Для изменения стандартного пароля, воспользуемся утилитой GSEC, из стандартного набора сервера Firebird. Эта утилита находится в папке bin каталога, куда установлен Firebird.

В моем случае для Firebird 2.5.2 x32, Windows 7 Professional x64 это папка:
«c:Program Files (x86)FirebirdFirebird_2_5bin»

Запускаем командную строку и выполняем следующие команды:

U:>c:
C:>cd "c:program files (x86)firebirdfirebird_2_5bin"
c:Program Files (x86)FirebirdFirebird_2_5bin>gsec -user SYSDBA -password masterkey
GSEC> modify SYSDBA -pw newpassword
Warning - maximum 8 significant bytes of password used
GSEC> quit
c:Program Files (x86)FirebirdFirebird_2_5bin>

Можно также выполнить следующую команду

c:>"c:Program Files (x86)FirebirdFirebird_2_5bingsec" -user SYSDBA -password masterkey -modify SYSDBA -pw newpassword

что приведет к тому же результату.

Следует помнить, что Firebird воспринимает только первые 8 символов пароля, остальные отбрасывает, так что создавать избыточно длинный пароль для SYSDBA смысла не имеет.

Более подробно о использовании утилиты работы с базой данных безопасности GSEC можно на сайте Firebird по следующей ссылке:

https://www.firebirdsql.org/manual/ru/fbutils-gsec-ru.html

(Visited 6 677 times, 1 visits today)

Posted by Rewalon

Добавил admin | Категория Наши материалы | 12 Августа 2014



Пользователь SYSDBA имеет все привилегии доступа к серверу.

Программа инсталляции создаст пользователя SYSDBA в базе данных безопасности (security.fdb). Для версий под Windows и версии 1.O.X под Linux пароль masterkey.
В версии 1.5 и более поздних под Linux инсталлятор в процессе установки rгенерирует случайный пароль, помещает eгo в базу данных безопасности и сохраняет в текстовом файле SYSDBA.password.
Запомните этот пароль или используйте для доступа к базе данных безопасности, чтобы изменить eгo на что-нибудь более простое для запоминания.

Как изменить пароль пользователя SYSDBA

Если вы работаете в Linux или другой системе, которая может выполнять SH скрипты, измените текущий каталог на ../bin в вашем каталоге инсталляции и найдите скрипт с именем changeDBAPassword.sh. Все, что вам нужно сделать, ¬ это запустить скрипт и ответить на подсказки. Когда вы в первый раз запустите скрипт, вам будет нужно ввести пароль, который инсталлятор записал в файл SYSDBA.password;
он находится в корневом каталоге Firebird:


[bin} # sh changeDBAPassword, sh 
или 
[bin] # /changeDBAPassword, sh

Прямое использование gsec

Следующая процедура будет работать под Windows и Linux. В Linux, чтобы запустить gsec, вы должны войти в операционную систему как суперпользователь (root). Пусть вы решили изменить у SYSDBA пароль с masterkey на icuryy4me (в Firebird 1.5 для Linux инсталлированный пароль не masterkey, он может оказаться совсем невразумительным!). Вам нужно выполнить следующие шаги:

  1. Перейдите в окно командной строки на вашем сервере и сделайте текущим каталог, в котором находятся ваши утилиты командной строки.
  2. Для Windows наберите следующее, рассматривая символы, как чувствительные к регистру.

gsec -user sysdba -password masterkey 
Для платформ POS1X наберите: 
./gsec -user sysdba -password masterkey 

Теперь вы должны увидеть подсказку утилиты gsec:


GSEC> 
Наберите команду:
GSEC> modify sysdba -pw icuryy4me 
  1. Нажмите клавишу . Новый пароль icuryy4me будет зашифрован и сохранен, а masterkey не будет больше действовать.
  2. Теперь завершите программу gsec.

GSEC> quit

Поскольку Firebird игнорирует все символы в пароле после восьмого, icuryy4m будет работать так же, как и icuryy4monkey.

Введение

Эта статья предназначена прежде всего для тех, кто планирует в ближайшем будущем обновить СУБД Firebird до версии 4.0.
Многие администраторы всё ещё используют Firebird 2.5, но планируют обновиться до версии 4.0 прежде всего из-за наличия в ней встроенной репликации.
Именно поэтому здесь описан процесс миграции как с Firebird 2.5, так и Firebird 3.0.

Спонсором написания статьи «Руководство по миграции на Firebird 4.0» является IBSurgeon (iBase.ru)
(https://www.ib-aid.com, https://www.ibase.ru): техническая поддержка и инструменты разработчика и
администратора для СУБД Firebird.

1. Ручная установка Firebird 4.0 в Windows

Далее описан процесс установки из zip архива.
Даже если вы устанавливаете Firebird из специального инсталляционного пакета, вам всё равно может потребоваться изменить некоторые настройки после установки.
Кроме того, ручная установка позволяет установить несколько версий Firebird на одной машине.

Скачайте архив соответствующей разрядности и распакуйте его в директорию, в которой будет размещён сервер Firebird.
Далее необходимо создать пользователя SYSDBA.
Для тех администраторов, которые мигрируют с Firebird 3.0, это операция не нова.
В Firebird 2.5 и ранее после установки пользователь SYSDBA существовал всегда и имел пароль по умолчанию masterke, который надо было сразу же менять.

1.1. Инициализация SYSDBA

Начиная с Firebird 3.0 пользователь SYSDBA не инициализирован по умолчанию (для плагина управления пользователями SRP), поэтому необходимо явно создать пользователя и указать ему пароль.
Это можно сделать двумя способами:
с использованием консольного инструмента для выполнения интерактивных запросов isql.exe и консольного инструмента для управления базой данных безопасности gsec.exe.

Замечание

В зависимости от размещения Firebird эти утилиты могут потребовать запуска с привилегиями администратора.

1.1.1. Инициализация SYSDBA с помощью ISQL

Запустите инструмент для выполнения интерактивных запросов isql.exe.
Соединитесь с базой данных безопасности в режиме встроенного сервера, указав при этом пользователя SYSDBA без пароля.
Пользователя SYSDBA ещё не существует в базе данных безопасности, но в embedded режиме пользователь и его пароль не проверяется, и Firebird доверяет любому указанному имени пользователя.
Выполните SQL запрос для создания пользователя SYSDBA:

CREATE USER SYSDBA PASSWORD '<password>';

Пользователь SYSDBA инициализирован, можно выходить из интерактивного режима.

Пример 1. Инициализация SYSDBA через ISQL

c:Firebird4.0>isql

Use CONNECT or CREATE DATABASE to specify a database

SQL> connect security.db user SYSDBA; Database: security.db, User: SYSDBA
SQL> CREATE USER SYSDBA PASSWORD 'm8ku234pp';
SQL> exit;

c:Firebird4.0>

1.1.2. Инициализация SYSDBA с помощью GSEC

Запустите gsec.exe указав пользователя SYSDBA и базу данных security.db.
Выполните команду для добавления пользователя SYSDBA:

add SYSDBA -pw <password>

Пример 2. Инициализация SYSDBA через GSEC

c:Firebird4.0>gsec -user SYSDBA -database security.db

* gsec is deprecated, will be removed soon *

GSEC> add SYSDBA -pw m8ku234pp
GSEC> quit

c:Firebird4.0>

Предупреждение

Инструмент gsec.exe является устаревшим, многие возможности доступные через SQL недоступны в нём.

1.2. Конфигурация

Перед тем как установить и запустить Firebird как службу необходимо выбрать режим работы сервера.

1.2.1. Режим сервера

По-умолчанию Firebird будет стартовать в режиме SuperServer.
Если вы хотите чтобы сервер запускался в другой архитектуре, то необходимо изменить значение параметра ServerMode в firebird.conf.
Раскомментируйте его (удалите решётку) и установите нужный режим: Super, SuperClassic или Classic.

1.2.2. Авторизация из клиентских библиотек Firebird 2.5

В Firebird 4.0 по умолчанию используется безопасная парольная аутентификация (SRP).
Клиенты Firebird 2.5 и более ранние версии использовали традиционную аутентификацию (Legacy_Auth), которая отключена в Firebird 4.0 по-умолчанию, поскольку не является безопасной.

Для поддержки традиционной аутентификации необходимо изменить следующие параметры AuthServer, UserManager и WireCrypt.

Пример 3. Включение авторизации с предыдущими версиями клиента Firebird

AuthServer = Srp256, Srp, Legacy_Auth
UserManager = Srp, Legacy_UserManager
WireCrypt = Enabled

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

Важно

Одноименные пользователи в разных менеджерах пользователей — это разные пользователи, и у них могут быть разные пароли.
Это относится и к SYSDBA и владельцу базы данных.

Если вам не нужна поддержка безопасной парольной аутентификации (SRP), удалите из AuthServer плагины Srp256 и Srp; из UserManager — Srp, а WireCrypt можете изменить на Disabled.

Ранее мы уже создали SYSDBA в менеджере пользователей SRP.
В Legacy_UserManager SYSDBA уже существует, причём со стандартным паролем masterkey, который необходимо изменить.
Сделаем это c использованием инструмента isql.
В операторе ALTER USER необходимо обязательно указать менеджер пользователей Legacy_UserManager.

Пример 4. Изменение пароля SYSDBA в Legacy_UserManager

c:Firebird4.0>isql
Use CONNECT or CREATE DATABASE to specify a database
SQL> connect security.db user sysdba;
Database: security.db, User: SYSDBA
SQL> ALTER USER SYSDBA SET PASSWORD 'er34gfde' USING PLUGIN Legacy_UserManager;
SQL> exit;

c:Firebird4.0>

1.2.3. Установка часового пояса соединения по умолчанию

В Firebird 4.0 введены новые типы даты и времени с поддержкой часовых поясов.

Даже если вы не собираетесь в ближайшее время использовать типы с часовыми поясами, то необходимо учитывать, что выражения CURRENT_TIMESTAMP и CURRENT_TIME теперь возвращают типы данных с часовыми поясами.
Существует режим совместимости, который позволяет преобразовать типы с часовыми поясами в типы без часовых поясов.
Однако такое преобразование может работать неверно, если часовой пояс соединения выставлен неправильно.

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

DefaultTimeZone = Europe/Moscow

1.2.4. Одновременный запуск нескольких экземпляров Firebird

Здесь предполагается, что вы хотите запустить экземпляры разных версий Firebird, каждая из которых установлена в своём каталоге.

Для одновременного запуска нескольких экземпляров Firebird необходимо развести их по разным портам tcp (если, конечно, слушатель запущен в режиме прослушивания TCP/IP).
Для этого необходимо изменить в firebird.conf параметр RemoteServicePort.
Например, если у вас уже есть один сервер, который слушает порт 3050, то необходимо установить любой другой свободный порт, например 3051. В этом случае в строке подключения необходимо будет указывать новый порт.
(кроме случая когда приложению и клиенту Firebird доступен firebird.conf с измененным номером порта по умолчанию)

Также желательно изменить параметры IpcName и RemotePipeName. Если их оставить неизменными, то в логе того экземпляра, который будет запущен вторым, появятся ошибки. Это не является критической ошибкой, если вы не пользуетесь протоколами XNET и WNET.
Однако, если они используются, то стоит учесть, что эти параметры придётся изменять и на стороне клиента через DPB.

1.3. Установка и запуск Firebird как службы

Утилита instsvc.exe записывает, удаляет или меняет информацию о запуске сервера в базе сервисов операционной системы.
Кроме того, она позволяет управлять запуском и остановкой сервиса.

Если запустить её без параметров, то будет выведена справка по командам и параметрам.

instsvc
Usage:
  instsvc i[nstall]
                    [ -a[uto]* | -d[emand] ]
                    [ -g[uardian] ]
                    [ -l[ogin] username [password] ]
                    [ -n[ame] instance ]
                    [ -i[nteractive] ]

          sta[rt]   [ -b[oostpriority] ]
                    [ -n[ame] instance ]
          sto[p]    [ -n[ame] instance ]
          q[uery]
          r[emove]  [ -n[ame] instance ]


  '*' denotes the default values
  '-z' can be used with any other option, prints version
  'username' refers by default to a local account on this machine.
  Use the format 'domainusername' or 'serverusername' if appropriate.

Важно

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

Для установки сервиса необходимо ввести команду

В этом случае Firebird будет установлен в качестве службы с именем «Firebird Server – DefaultInstance».
Эта служба будет запускаться автоматически при старте ОС, под учётной записью LocalSystem, предназначенной для служб.

Если необходимо чтобы было установлено несколько экземпляров Firebird работающих как службы, то необходимо задать им разные имена с помощью опции -n

Для запуска службы воспользуйтесь командой

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

Для остановки службы воспользуйтесь командой

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

Для удаления сервиса необходимо ввести команду

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

Для просмотра всех служб Firebird установленных в системе воспользуйтесь командой

Firebird Server - fb30 IS installed.
  Status  : running
  Path    : C:Firebird3.0firebird.exe -s fb30
  Startup : automatic
  Run as  : LocalSystem

Firebird Server - fb40 IS installed.
  Status  : running
  Path    : C:Firebird4.0firebird.exe -s fb40
  Startup : automatic
  Run as  : LocalSystem

1.3.1. Использование install_service.bat и uninstall_service.bat

Для упрощения процедуры установки и удаления служб в ZIP архиве в комплекте с Firebird поставляются два BAT файла: install_service.bat и uninstall_service.bat.

В этом случае процедура установки Firebird в качестве сервиса выглядит следующим образом

В этом случае процедура удаления службы Firebird выглядит следующим образом

Если необходимо задать службе имя отличное от умолчательного, то указываем это имя в качестве аргумента

Если служба была установлена с именем отличным от умолчательного, то указываем это имя в качестве аргумента

uninstall_service.bat fb40

1.4. Установка клиента

Если речь идёт об установке только клиентской части, то обязательно требуется файл fbclient.dll.
Клиент Firebird 4.0 обязательно требует наличия установленного Microsoft Runtime C++ 2017 соответствующей разрядности.
Если данная библиотека не установлена, то можно скопировать дополнительные библиотеки, которые поставляются в ZIP архиве под Windows msvcp140.dll и vcruntime140.dll.

Желательно, чтобы рядом с fbclient.dll был расположен файл сообщений firebird.msg.
Большинство сообщений об ошибках уже содержатся в fbclient.dll, однако если вы собираетесь пользоваться консольными утилитами файл firebird.msg обязательно должен присутствовать.

В отличие от Firebird 2.5 и Firebird 3.0 клиентской библиотеки так же требуются файлы ICU (icudt63.dll, icuin63.dll, icuuc63.dll и icudt63l.dat).
Ранее ICU библиотека требовалась только серверу.
Теперь она может потребоваться клиентской части, если вы собираетесь работать с типами данных TIMESTAMP WITH TIME ZONE и TIME WITH TIME ZONE.
ICU библиотека также требуется при вызове функций UtilInterface::decodeTimeTz() и UtilInterface::decodeTimestampTz().

Замечание

В Windows 10 может использоваться ICU библиотека поставляемая вместе с операционной системой.

Если необходимо сжатие трафика при работе по TCP/IP, то потребуется библиотека zlib1.dll.

Вам может потребоваться библиотека plugins/chacha.dll, если вы собираетесь использовать плагин шифрования трафика ChaCha.

Для того чтобы клиентское приложение могло загрузить библиотеку fbclient.dll она должна располагаться либо рядом с приложением,
либо в одной из директорий в которой производится поиск, например добавленной в PATH или системной директории для размещения общедоступных библиотек (system32 или SysWOW64).

Важно

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

Для развёртывания клиентской библиотеки Firebird в системном каталоге Windows воспользуйтесь командой

instclient install fbclient

Важно

Утилита instclient не копирует в системный каталог никаких файлов кроме fbclient.dll.

1.5. Установка embedded версии

Embedded версия теперь требует большего количества файлов.
Минимальная структура файлов и каталогов для Firebird 4.0 embedded следующая:

  • intl

    • fbintl.conf

    • fbintl.dll

  • plugins

    • engine13.dll

  • firebird.conf

  • icudt63l.dat

  • fbclient.dll

  • ib_util.dll

  • icudt63.dll

  • icuin63.dll

  • icuuc63.dll

  • msvcp140.dll

  • vcruntime140.dll

  • firebird.msg

При необходимости вы также можете скопировать исполняемые файлы утилит fbsvcmgr.exe, fbtracemgr.exe,
gbak.exe, gfix.exe, gstat.exe, isql.exe, nbackup.exe.

Замечание

Для тех кто мигрирует с Firebird 2.5 следует учитывать 2 момента:

  • Вместо единой библиотеки fbembed.dll требуется несколько файлов, причём файл fbclient.dll переименовывать нельзя.
    Компоненты доступа должны использовать в качестве точки входа именно библиотеку fbclient.dll.

  • В файле конфигурации firebird.conf следует изменить значение параметра ServerMode на SuperClassic или Classic
    для того чтобы на одном компьютере можно было подключаться к одной и той же базе данных из разных приложений, использующих embedded (поведения Firebird 2.5 embedded по умолчанию).

2. Преобразование базы данных к новому формату

Базы данных Firebird 4.0 имеют ODS (On-Disk Structure) 13.0. Для того, чтобы Firebird 4.0 мог работать с вашей базой данных её необходимо привести к родной ODS.
Обычно это осуществляется с помощью инструмента gbak.
Однако не торопитесь делать резервное копирование своей БД и её восстановление с новой ODS — сначала необходимо устранить возможные проблемы совместимости.

2.1. Список несовместимостей на уровне языка SQL

Проблемы совместимости языка SQL возможны как для объектов самой базы данных (PSQL процедуры и функции), так и в DSQL запросах, используемых в вашем приложении.

Перечислим некоторые наиболее часто встречающиеся проблемы совместимости на уровне SQL которые вы можете исправить ещё до перехода на новую ODS.
Полный список несовместимостей вы можете прочитать в Release Notes 3.0 (для тех кто переходит с Firebird 2.5) и Release Notes 4.0 в главе «Compatibility Issues».

2.1.1. Новые зарезервированные слова

Проверьте вашу базу данных на наличие новых зарезервированных слов в идентификаторах, столбцах и переменных.
В первом SQL диалекте такие слова не могут применяться в принципе (надо будет переименовать), в третьем — могут применяться, но должны обрамляться двойными кавычками.
Список ключевых и зарезервированных слов вы можете найти в Release Notes 3.0 и 4.0 в главе «Reserved Words and Changes».
Ключевые слова могут применяться в качестве идентификаторов, хотя это не рекомендуется.

2.1.2. Имена столбцов в PSQL курсорах

Этот пункт актуален для тех кто переходит с Firebird 2.5. Все выходные столбцы в PSQL курсорах объявленных как DECLARE CURSOR должны иметь явное имя или псевдоним.
То же самое касается PSQL курсоров используемых как FOR SELECT …​ AS CURSOR <cursor name> DO
…​
.

Пример 5. Проблема с неименованными столбцами в курсорах

create procedure sp_test
returns (n int)
as
  declare c cursor for (select 1 /* as a */ from rdb$database);
begin
  open c;
  fetch c into n;
  close c;
  suspend;
end
Statement failed, SQLSTATE = 42000
unsuccessful metadata update
-ALTER PROCEDURE SP_TEST failed
-Dynamic SQL Error
-SQL error code = -104
-Invalid command
-no column name specified for column number 1 in derived table C

2.1.3. Новые типы данных

В Firebird 4.0 введены новые типы данных:

  • TIMESTAMP WITH TIME ZONE

  • TIME WITH TIME ZONE

  • INT128

  • NUMERIC(38, x) и DECIMAL(38, x)

  • DECFLOAT(16) и DECFLOAT(34)

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

Некоторые выражения теперь могу возвращать типы NUMERIC(38, x), DECIMAL(38, x) и INT128.
О решении этой проблемы мы поговорим позже, поскольку на этапе изменения ODS они обычно не проявляются.

Выражения CURRENT_TIMESTAMP и CURRENT_TIME теперь возвращают типы TIMESTAMP WITH TIME ZONE и TIME WITH TIME ZONE.
Это может стать серьёзной проблемой.

Для старых клиентских библиотек и приложений вы можете установить режим совместимости типов, однако это не поможет внутри хранимых процедур, функций и триггеров.
Вам необходимо использовать выражения LOCALTIMESTAMP и LOCALTIME вместо CURRENT_TIMESTAMP и CURRENT_TIME там где вы не хотите получить типы данных с часовыми поясами.
Данные выражения специально были введены в корректирующих релизах Firebird 2.5.9 и Firebird 3.0.4, чтобы вы заранее могли подготовить свои базы данных для миграции на Firebird 4.0.

2.1.4. Литералы дат и времени

В Firebird 4.0 ужесточён синтаксис литералов дат и времени.

Литералы ‘NOW’, ‘TODAY’, ‘TOMORROW’, ‘YESTERDAY’ с неявным приведением типа (с префиксами TIMESTAMP, DATE, TIME) теперь запрещены.
Дело в том, что значение таких литералов вычислялось во время подготовки DSQL запроса или компиляции PSQL модулей, что приводило к неожиданным результатам.

Если что-то вроде TIMESTAMP ‘NOW’ использовалось в запросах DSQL в коде приложения или в перенесенном PSQL, возникнет проблема совместимости с Firebird 4.

Пример 6. Следующий код не будет скомпилирован

..
DECLARE VARIABLE moment TIMESTAMP;
..
SELECT TIMESTAMP 'NOW' FROM RDB$DATABASE INTO :moment;

/* здесь переменная: moment будет "заморожена" как отметка времени
в момент последней компиляции процедуры или функции  */
..

Необходимо вычистить такие литералы (например заменить на явное преобразование типа CAST('NOW' AS TIMESTAMP)) в коде ваших процедур и функций до преобразования вашей базы данных в новую ODS.

Кроме того, необходимо проверить другие литералы дат и времени с явным заданием известной даты (времени).
Ранее в таких литералах позволялись разделители частей даты и времени не соответствующие стандарту, теперь такие разделители запрещены.
Подробнее о разрешённых форматах литералов даты и времени вы можете прочитать в «Руководство по языку SQL СУБД Firebird 4.0» в главе «Литералы даты и времени».

2.2. Поддержка внешних функций (UDF) объявлена устаревшей

Поддержка внешних функций (UDF) в Firebird 4 объявлена устаревшей.
Эффект от этого заключается в том, что UDF нельзя использовать с конфигурацией по умолчанию, поскольку для параметра UdfAccess в firebird.conf
значение по умолчанию теперь None.
Библиотеки UDF ib_udf и fbudf изъяты из дистрибутива.

Большинство функций в этих библиотеках уже устарели в предыдущих версиях Firebird и были заменены встроенными аналогами.
Теперь доступны безопасные замены для некоторых из оставшихся функций либо в новой библиотеке определяемых пользователем подпрограмм (UDR) с именем [lib]udf_compat.[dll/so/dylib]
(это делается после смены ODS), либо в виде преобразований по сценарию в сохраненные функции PSQL.

Рекомендуем заранее (до перехода на новую ODS) заменить UDF функции на их встроенные аналоги.
Если вы делаете миграцию с Firebird 3.0, вы также можете переписать часть функций на PSQL.

Если после этих шагов у вас остались UDF функции, то необходимо изменить параметр конфигурации

2.3. Преобразование базы данных к новой ODS

После предварительной подготовки, вы можете попробовать преобразовать базу данных к новой ODS с помощью инструмента gbak.

В данном примере предполагается, что на одной машине стоят Firebird 3.0 и Firebird 4.0. Firebird 3.0 работает используя TCP порт 3053, а Firebird 4.0 — 3054.

Прежде всего необходимо создать резервную копию вашей базы данных на текущей версии Firebird с помощью следующей команды.

gbak -b -g -V -user <username> -pas <password> -se <service> <database> <backup_file> -Y <log_file>

Пример 7. Создание резервной копии на текущей версии Firebird

gbak -b -g -V -user SYSDBA -pas 8kej712 -se server/3053:service_mgr my_db d:fb30_backupmy_db.fbk -Y d:fb30_backupbackup.log

Далее необходимо восстановить вашу копию на Firebird 4.0 с помощью команды

gbak -c -v -user <username> -pas <password> -se <service> <backup_file> <database_file> -Y <log_file>

Пример 8. Восстановление резервной копии на Firebird 4.0

gbak -c -v -user SYSDBA -pas 8kej712 -se server/3054:service_mgr d:fb30_backupmy_db.fbk d:fb40_datamy_db.fdb -Y d:fb40_datarestore.log

Важно

Обратите внимание, на переключатели -V и -Y, они обязательно должны использоваться, чтобы вы могли просмотреть в лог файле, что в процессе восстановления пошло не так.

После восстановления внимательно изучите restore.log на предмет ошибок.

2.3.1. Предупреждения об отсутствии UDF

После восстановления в файле restore.log вы можете увидеть следующие предупреждения

gbak: WARNING:function UDF_FRAC is not defined
gbak: WARNING: module name or entrypoint could not be found

Это означает, что у вас есть UDF, которые объявлены в базе данных, но их библиотека отсутствует.
Выше уже было описано, что надо делать в этом случае.
Но это в основном касалось ваших UDF библиотек.
Однако если вы использовали UDF из комплекта поставляемого с Firebird, а именно ib_udf и fbudf, то вы можете заменить их на встроенные функции или на безопасные аналоги UDR расположенные в библиотеке udf_compat.dll.
Для этого необходимо запустить SQL скрипт миграции, поставляемый в комплекте с Firebird 4.0, который расположен в misc/upgrade/v4.0/udf_replace.sql.
Это делается следующей командой

isql -user sysdba -pas masterkey -i udf_replace.sql {your-database}

Пример 9. Предупреждение

Этот сценарий не повлияет на объявления UDF из сторонних библиотек!

3. Перенос псевдонимов баз данных

Этот раздел актуален для тех кто мигрирует с Firebird 2.5.
Файл aliases.conf в котором настраивались псевдонимы баз данных переименован в databases.conf.
Он полностью обратно совместим по синтаксису, однако его назначение значительно расширено.
Теперь в нём можно задавать некоторые индивидуальные параметры для каждой базы данных.
Настоятельно рекомендуем воспользоваться этой возможностью, если ваш сервер обслуживает более 1 базы данных.

Параметры, которые можно задавать на уровне базы данных, помечены в файле firebird.conf надписью ‘Per-database configurable’.

Перенос списка пользователей из Firebird 2.5 и Firebird 3.0 осуществляется по-разному.
Перенос пользователей из Firebird 3.0 производится значительно проще, поэтому сначала опишем этот случай.

4.1. Перенос списка пользователей из Firebird 3.0

Самый простой способ перенести пользователей из базы безопасности Firebird 3.0 в базу данных безопасности Firebird 4.0 заключается резервной копии security3.fdb с помощью gbak и восстановлении её в Firebird 4.0.
Однако учтите, что в этом случае вы потеряете некоторые новые возможности.
Мы пойдём более сложным способом:

  1. Сделайте резервную копию базы данных безопасности на Firebird 3.0

    c:Firebird3.0>gbak -b -g -user SYSDBA security.db d:fb30_backupsecurity.fbk
  2. Восстановите резервную копию на Firebird 4.0 под новым именем

    c:Firebird4.0>gbak -с -user SYSDBA -pas 8kej712 -se localhost/3054:service_mgr d:fb30_backupsecurity.fbk d:fb40_datasecurity_30.fdb
  3. Сохраните следующий скрипт для переноса пользователей в файл copy_user.sql

    set term ^;
    
    EXECUTE BLOCK
    AS
      -- замените на параметры вашей копии БД безопасности
      DECLARE SRC_SEC_DB     VARCHAR(255) = 'd:fb40_datasecurity_30.fdb';
      DECLARE SRC_SEC_USER   VARCHAR(63) = 'SYSDBA';
      ---------------------------------------------------
      DECLARE PLG$USER_NAME  SEC$USER_NAME;
      DECLARE PLG$VERIFIER   VARCHAR(128) CHARACTER SET OCTETS;
      DECLARE PLG$SALT       VARCHAR(32) CHARACTER SET OCTETS;
      DECLARE PLG$COMMENT    BLOB SUB_TYPE TEXT CHARACTER SET UTF8;
      DECLARE PLG$FIRST      SEC$NAME_PART;
      DECLARE PLG$MIDDLE     SEC$NAME_PART;
      DECLARE PLG$LAST       SEC$NAME_PART;
      DECLARE PLG$ATTRIBUTES BLOB SUB_TYPE TEXT CHARACTER SET UTF8;
      DECLARE PLG$ACTIVE     BOOLEAN;
      DECLARE PLG$GROUP_NAME SEC$USER_NAME;
      DECLARE PLG$UID        PLG$ID;
      DECLARE PLG$GID        PLG$ID;
      DECLARE PLG$PASSWD     PLG$PASSWD;
    BEGIN
      -- перемещаем пользователей из плагина SRP
      FOR EXECUTE STATEMENT Q'!
          SELECT
              PLG$USER_NAME,
              PLG$VERIFIER,
              PLG$SALT,
              PLG$COMMENT,
              PLG$FIRST,
              PLG$MIDDLE,
              PLG$LAST,
              PLG$ATTRIBUTES,
              PLG$ACTIVE
          FROM PLG$SRP
          WHERE PLG$USER_NAME <> 'SYSDBA'
    !'
              ON EXTERNAL :SRC_SEC_DB
              AS USER :SRC_SEC_USER
              INTO :PLG$USER_NAME,
                   :PLG$VERIFIER,
                   :PLG$SALT,
                   :PLG$COMMENT,
                   :PLG$FIRST,
                   :PLG$MIDDLE,
                   :PLG$LAST,
                   :PLG$ATTRIBUTES,
                   :PLG$ACTIVE
      DO
      BEGIN
        INSERT INTO PLG$SRP (
            PLG$USER_NAME,
            PLG$VERIFIER,
            PLG$SALT,
            PLG$COMMENT,
            PLG$FIRST,
            PLG$MIDDLE,
            PLG$LAST,
            PLG$ATTRIBUTES,
            PLG$ACTIVE)
        VALUES (
            :PLG$USER_NAME,
            :PLG$VERIFIER,
            :PLG$SALT,
            :PLG$COMMENT,
            :PLG$FIRST,
            :PLG$MIDDLE,
            :PLG$LAST,
            :PLG$ATTRIBUTES,
            :PLG$ACTIVE);
      END
      -- перемещаем пользователей из плагина Legacy_UserManager
      FOR EXECUTE STATEMENT Q'!
          SELECT
              PLG$USER_NAME,
              PLG$GROUP_NAME,
              PLG$UID,
              PLG$GID,
              PLG$PASSWD,
              PLG$COMMENT,
              PLG$FIRST_NAME,
              PLG$MIDDLE_NAME,
              PLG$LAST_NAME
          FROM PLG$USERS
          WHERE PLG$USER_NAME <> 'SYSDBA'
    !'
              ON EXTERNAL :SRC_SEC_DB
              AS USER :SRC_SEC_USER
              INTO :PLG$USER_NAME,
                   :PLG$GROUP_NAME,
                   :PLG$UID,
                   :PLG$GID,
                   :PLG$PASSWD,
                   :PLG$COMMENT,
                   :PLG$FIRST,
                   :PLG$MIDDLE,
                   :PLG$LAST
      DO
      BEGIN
        INSERT INTO PLG$USERS (
            PLG$USER_NAME,
            PLG$GROUP_NAME,
            PLG$UID,
            PLG$GID,
            PLG$PASSWD,
            PLG$COMMENT,
            PLG$FIRST_NAME,
            PLG$MIDDLE_NAME,
            PLG$LAST_NAME)
        VALUES (
            :PLG$USER_NAME,
            :PLG$GROUP_NAME,
            :PLG$UID,
            :PLG$GID,
            :PLG$PASSWD,
            :PLG$COMMENT,
            :PLG$FIRST,
            :PLG$MIDDLE,
            :PLG$LAST);
      END
    END^
    
    set term ;^
    
    commit;
    
    exit;

    Важно

    Не забудьте заменить значение переменной SRC_SEC_DB на путь к копии вашей БД безопасности.

    Замечание

    Мы исключили копию пользователя SYSDBA, поскольку инициализировали его при установке.

  4. Выполните скрипт на Firebird 4.0 подключившись к БД безопасности в embedded режиме

    c:Firebird4.0>isql -i "d:fb40_datacopy_users.sql" -u SYSDBA -ch UTF8 security.db

Поздравляем ваши пользователи перенесены с сохранением всех атрибутов и паролей.

4.2. Перенос списка пользователей из Firebird 2.5

Перенос пользователей из Firebird 2.5 более сложен.
В Firebird 3.0 ввели новый способ аутентификации SRP — Secure Remote Password Protocol.
Старый способ аутентификации также доступен, но выключен по умолчанию поскольку считается недостаточно безопасным.
В Release Notes 3.0 описан способ переноса пользователей из Legacy_UserManager в SRP, однако в этом случае вы не сможете подключаться через fbclient версии 2.5. Кроме того, перенести пароли из Legacy_UserManager в SRP невозможно.
Предлагаемый скрипт перенесёт список пользователей, но будут сгенерированы случайные пароли.
Если вы хотите восстановить прежние пароли, то это придётся делать вручную.
Я написал альтернативный скрипт, который позволяет перенести пользователей из security2.fdb в security3.fdb в плагин Legacy_UserManager.
Здесь я опишу оба варианта.

4.2.1. Копирование списка пользователей в плагин SRP

Из-за новой модели аутентификации в Firebird 3 обновление базы данных безопасности версии 2.5 (security2.fdb) напрямую для использования в Firebird 4 невозможно.
Однако существует процедура обновления, позволяющая сохранить данные учетной записи пользователя — имя пользователя, имя и т. Д., Но не пароли — из базы данных security2.fdb, которая использовалась на серверах версии 2.x.

Процедура требует запуска сценария security_database.sql, который находится в каталоге misc/upgrade вашей установки Firebird 3. Эти инструкции предполагают, что у вас есть временная копия этого сценария в том же каталоге, что и исполняемый файл isql.

Замечание

  • В Firebird 4.0 файл сценария обновления БД безопасности security_database.sql отсутствует в каталоге misc/upgrade, поэтому вам необходимо скачать zip архив с дистрибутивом Firebird 3.0.

  • В приведенных ниже командах замените masterkey фактическим паролем SYSDBA для вашего сервера, если это необходимо.

  1. Сделайте резервную копию БД безопасности security2.fdb на Firebird 2.5

    c:Firebird2.5>bingbak -b -g -user SYSDBA -password masterkey -se service_mgr c:Firebird2.5security2.fdb d:
    fb25_backupsecurity2.fbk
  2. Разверните резервную копию на Firebird 4.0

    c:Firebird4.0>gbak -c -user SYSDBA -password masterkey -se localhost/3054:service_mgr d:fbdata4.0security2.fbk d:f
    bdata4.0security2db.fdb -v
  3. На сервере Firebird 4.0 перейдите в каталог, в котором находится утилита isql, и запустите сценарий обновления:

    isql -user sysdba -pas masterkey -i security_database.sql
    {host/path}security2db.fdb

    security2db.fdb — это просто пример имени базы данных: это может быть любое предпочтительное имя.

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

4.2.2. Копирование списка пользователей в плагин Legacy_UserManager

В отличие от предыдущего варианта, данный скрипт сохранит ваши исходные пароли.
Однако, мы советуем вам в будущем всё равно перейти на плагин Srp.

  1. Сделайте резервную копию БД безопасности security2.fdb на Firebird 2.5

    c:Firebird2.5>bingbak -b -g -user SYSDBA -password masterkey -se service_mgr c:Firebird2.5security2.fdb d:
    fb25_backupsecurity2.fbk
  2. Разверните резервную копию на Firebird 4.0

    c:Firebird4.0>gbak -c -user SYSDBA -password masterkey -se localhost/3054:service_mgr d:fbdata4.0security2.fbk d:f
    bdata4.0security2db.fdb -v
  3. Сохраните следующий скрипт для переноса пользователей в файл copy_security2.sql

    set term ^;
    
    EXECUTE BLOCK
    AS
      -- замените на параметры вашей копии БД безопасности
      DECLARE SRC_SEC_DB     VARCHAR(255) = 'd:fbdata4.0security2.fdb';
      DECLARE SRC_SEC_USER   VARCHAR(63) = 'SYSDBA';
      ---------------------------------------------------
      DECLARE PLG$USER_NAME  SEC$USER_NAME;
      DECLARE PLG$COMMENT    BLOB SUB_TYPE TEXT CHARACTER SET UTF8;
      DECLARE PLG$FIRST      SEC$NAME_PART;
      DECLARE PLG$MIDDLE     SEC$NAME_PART;
      DECLARE PLG$LAST       SEC$NAME_PART;
      DECLARE PLG$GROUP_NAME SEC$USER_NAME;
      DECLARE PLG$UID        INT;
      DECLARE PLG$GID        INT;
      DECLARE PLG$PASSWD     VARBINARY(64);
    BEGIN
      FOR EXECUTE STATEMENT q'!
          SELECT
              RDB$USER_NAME,
              RDB$GROUP_NAME,
              RDB$UID,
              RDB$GID,
              RDB$PASSWD,
              RDB$COMMENT,
              RDB$FIRST_NAME,
              RDB$MIDDLE_NAME,
              RDB$LAST_NAME
          FROM RDB$USERS
          WHERE RDB$USER_NAME <> 'SYSDBA'
    !'
          ON EXTERNAL :SRC_SEC_DB
          AS USER :SRC_SEC_USER
          INTO
              :PLG$USER_NAME,
              :PLG$GROUP_NAME,
              :PLG$UID,
              :PLG$GID,
              :PLG$PASSWD,
              :PLG$COMMENT,
              :PLG$FIRST,
              :PLG$MIDDLE,
              :PLG$LAST
      DO
      BEGIN
        INSERT INTO PLG$USERS (
            PLG$USER_NAME,
            PLG$GROUP_NAME,
            PLG$UID,
            PLG$GID,
            PLG$PASSWD,
            PLG$COMMENT,
            PLG$FIRST_NAME,
            PLG$MIDDLE_NAME,
            PLG$LAST_NAME)
        VALUES (
            :PLG$USER_NAME,
            :PLG$GROUP_NAME,
            :PLG$UID,
            :PLG$GID,
            :PLG$PASSWD,
            :PLG$COMMENT,
            :PLG$FIRST,
            :PLG$MIDDLE,
            :PLG$LAST);
      END
    END^
    
    set term ;^
    
    commit;
    
    exit;

    Важно

    Не забудьте заменить значение переменной SRC_SEC_DB на путь к копии вашей БД безопасности.

    Замечание

    Мы исключили копию пользователя SYSDBA, поскольку инициализировали его при установке.

  4. Выполните скрипт на Firebird 4.0 подключившись к БД безопасности в embedded режиме

    c:Firebird4.0>isql -i "d:fb40_datacopy_security2.sql" -u SYSDBA -ch UTF8 security.db

Поздравляем! Ваши пользователи перенесены с сохранением всех атрибутов и паролей.

5. Настройка доверительной аутентификации

Настройка доверительной аутентификации (если она необходима) в Firebird 4.0 делается точно так же как она делалась в Firebird 3.0.
Для тех производит миграцию с Firebird 2.5 опишем этот процесс подробнее.

  1. Первым делом необходимо подключить плагин доверительной аутентификации в файле конфигурации firebird.conf или databases.conf
    в параметре AuthServer (по умолчанию он отключен).
    Для этого необходимо добавить плагин с именем Win_Sspi, и будем использовать его совместно с Srp256.

    AuthServer = Srp256, Win_Sspi
  2. Следующим шагом необходимо включить отображение пользователей из Win_Sspi на CURRENT_USER.
    Для этого необходимо создать отображение в целевой базе данных с помощью следующего запроса

    CREATE MAPPING TRUSTED_AUTH
    USING PLUGIN WIN_SSPI
    FROM ANY USER
    TO USER;

    Данный SQL запрос создаёт отображение только на уровне текущей базе данных.
    Отображение не будет применяться к другим базам данных расположенных на том же сервере.
    Если вы хотите создать общее отображение для всех баз данных, то добавьте ключевое слово GLOBAL.

    CREATE GLOBAL MAPPING TRUSTED_AUTH
    USING PLUGIN WIN_SSPI
    FROM ANY USER
    TO USER;
  3. Включение SYSDBA-подобного доступа для администраторов Windows (если он нужен).

    Для включения такого доступа необходимо создать следующее отображение

    CREATE MAPPING WIN_ADMINS
    USING PLUGIN WIN_SSPI
    FROM Predefined_Group
    DOMAIN_ANY_RID_ADMINS
    TO ROLE RDB$ADMIN;

    Вместо включения SYSDBA-подобного доступа для всех администраторов Windows, вы можете дать административные привилегии конкретному пользователю с помощью следующего отображения

    create global mapping cto_sysdba
    using plugin win_sspi
    from user "STATION9DEVELOPER"
    to user SYSDBA;

6. Несовместимости на уровне приложения

На уровне API клиентская библиотека fbclient 4.0 совместима с предыдущими версиями.
Однако могут возникнуть проблемы совместимости на уровне некоторых SQL запросов.
Большинство из них мы уже описывали ранее в разделе
Список не совместимостей на уровне языка SQL.
Далее опишем некоторые другие проблемы, которые могут возникнуть на уроне языка SQL.

6.1. Новые типы данных

Как уже говорилось ранее, некоторые выражения могут возвращать новые типы данных, которые не могут быть интерпретированы вашим приложением без его доработки.
Такая доработка может занять существенное время или оказаться вам не по силам.
Для упрощения миграции на новые версии вы можете установить параметр DataTypeCompatibility в режим совместимости с необходимой версией в firebird.conf или databases.conf.

DataTypeCompatibility = 3.0

Это самый быстрый путь добиться совместимости с новыми типами данных.
Однако со временем вы можете начать внедрять поддержку новых типов в своё приложение.
Естественно, это будет происходить постепенно — сначала один тип, потом другой и так далее.
В этом случае вам надо настроить отображение тех типов, поддержку которых вы ещё не доделали, на другие типы данных.
Для этого используется оператор SET BIND OF.

Синтаксис

SET BIND OF { <type-from> | TIME ZONE } TO { <type-to> | LEGACY | NATIVE | EXTENDED }

Подробное описание этого оператора есть в «Firebird 4.0 Release Notes» и «Руководство по языку SQL СУБД Firebird 4.0».
С помощью него вы можете управлять отображением новых типов в вашем приложении выполнив соответствующий запрос сразу после подключения, и даже написать AFTER CONNECT триггер в котором использовать несколько таких операторов.

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

create or alter trigger tr_ac_set_bind
on connect
as
begin
  set bind of int128 to legacy;
  set bind of decfloat to legacy;
end

6.2. Согласованное чтение в транзакциях READ COMMITTED

Firebird 4 не только вводит согласованность чтения (READ CONSISTENCY) для запросов в транзакциях READ COMMITTED, но также делает его режимом по умолчанию для всех транзакций READ COMMITTED, независимо от их свойств RECORD VERSION или NO RECORD VERSION.
Это сделано для того, чтобы обеспечить пользователям лучшее поведение — как соответствующее спецификации SQL, так и менее подверженное конфликтам.
Однако это новое поведение может также иметь неожиданные побочные эффекты.
Пожалуй самый важный из них это так называемые рестарты при обработке конфликтов обновления.
Это может привести к тому, что некоторый код, не подверженный транзакционному контролю, может выполняться многократно в рамках PSQL.
Примерами такого кода может быть:

  • использование внешних таблиц, последовательностей или контекстных переменных;

  • отправка электронных писем с использованием UDF;

  • использование автономных транзакций или внешних запросов.

Подробнее о согласованном чтении в транзакциях READ COMMITTED вы можете прочитать «Firebird 4.0 Release Notes».

Другим важным эффектом является то, что недофетченные курсоры в транзакциях READ COMMITTED READ CONSISTENCY в Read Only режиме теперь удерживают сборку мусора.
Рекомендуем вам отказаться от использования в приложении единой длинной READ COMMITTED READ ONLY транзакции, и заменить её на несколько таких транзакций, каждая из которых активна ровно столько времени сколько это необходимо.

Если особенности режима READ CONSISTENCY по каким-либо причинам нежелательны, то параметр конфигурации ReadConsistency можно изменить, чтобы разрешить устаревшее поведение.

6.3. INSERT … RETURNING требует привилегию SELECT

Если какой-либо оператор INSERT содержит предложение RETURNING, которое ссылается на столбцы базовой таблицы, то вызывающей стороне должна быть предоставлена соответствующая привилегия SELECT.

7. Заключение

На этом всё.
Надеемся, что данная статья поможет вам перевести ваши базы данных и приложения на Firebird 4.0 и воспользоваться всеми преимуществами новой версии.

Содержание

Firebird (FirebirdSQL) — кроссплатформенная система управления базами данных (СУБД), работающая на Mac OS X, Linux, Microsoft Windows и разнообразных Unix платформах.

Firebird используется в различных промышленных системах (складские и хозяйственные, финансовый и государственный сектора) с 2001 г. Это коммерчески независимый проект C и C++ программистов, технических советников.

Среди недостатков: отсутствие кэша результатов запросов, полнотекстовых индексов, значительное падение производительности при росте внутренней фрагментации базы. Над решением этих проблем неустанно работает сообщество.

http://www.firebirdsql.org/

Инструмент для проектирования БД: IBExpert

Архитектуры сервера

Существует четыре различных взаимозаменяемых архитектуры сервера:

  • ClassicServer — один процесс на одно соединение; поддержка многопроцессорных машин.

  • SuperServer — все соединения используют один процесс, меньшие требования к памяти при большем быстродействии; для многопроцессорных машин (до 3.0 для однопроцессорных).

  • SuperClassic Server — один процесс, но свой поток на каждое соединение. Данная архитектура введена в версии 2.5.

  • Embedded (встраиваемая) версия — весь движок содержится в одной библиотеке с именем клиентской библиотеки сервера, идеально подходит для однопользовательских систем, не требует инсталляции в Windows.

Установка

apt-get install firebird2.5-super
apt install firebird3.0-server

Запуск

service firebird2.5-super start
service firebird start

Настройка

По умолчанию сервер использует TCP порт 3050.

/etc/firebird/2.5/firebird.conf

Пароль SYSDBA

В этом файле храниться праволь, заданный по умолчанию:

/etc/firebird/2.5/SYSDBA.password
# Password for firebird SYSDBA user
#
# You may want to use the following commands for changing it:
#   dpkg-reconfigure firebird2.5-super
# or
#   dpkg-reconfigure firebird2.5-classic
#
# If you change the password manually with gsec, please update it here too.
# Keeping this file in sync with the security database is critical for the
# correct functioning of the init.d script and for the ability to change the
# password via `dpkg-reconfigure firebird2.5-super/classic'
 
ISC_USER=sysdba
ISC_PASSWORD="masterkey"

Псевдонимы

aliases.conf
# ------------------------------
# List of known database aliases
# ------------------------------
 
#
# Example Database:
#
employee.fdb = /usr/share/doc/firebird2.5-common-doc/examples/empbuild/employee.fdb
employee = /usr/share/doc/firebird2.5-common-doc/examples/empbuild/employee.fdb

Доступ к серверу извне

Изменение пароля sysdba

По умолчанию пароль: masterkey

Запуск консоли:

gsec -user sysdba -password <ПАРОЛЬ>

Внутри консоли:

GSEC> modify sysdba -pw <НОВЫЙ ПАРОЛЬ>
GSEC> quit

Создание резервной копии БД

gbak -b ФАЙЛ_БД -user ПОЛЬЗОВАТЕЛЬ -password ПАРОЛЬ ФАЙЛ_РЕЗЕРВНОЙ_КОПИИ_БД

Пример скрипта для создания резервной копии нескольких БД:

fb_backup.sh
#!/bin/bash
 
DB_BACKUP="/srv/Backup"
DB_HOME="/srv/fb"
BACKUP_CMD="/usr/bin/gbak -B"
USER_PASSWD="-User SYSDBA -Password PASSWORD"
BACKUP_EXT=".bac"
FILE_TIME_STAMP=`date '+%d'` #День месяца
 
declare -a DB_FILE
DB_FILE[1]="db1.gdb"
DB_FILE[2]="db2.gdb"
DB_FILE[3]="db3.gdb"
 
for n in 1 2 3
do
    BACKUP_FILE=$DB_BACKUP/${DB_FILE[$n]}_$FILE_TIME_STAMP$BACKUP_EXT
    $BACKUP_CMD $DB_HOME/${DB_FILE[$n]} $USER_PASSWD $BACKUP_FILE
    /bin/gzip $BACKUP_FILE -f
done

Восстановление БД

gbak -r ФАЙЛ_РЕЗЕРВНОЙ_КОПИИ_БД -user ПОЛЬЗОВАТЕЛЬ -password ПАРОЛЬ ФАЙЛ_БД

Интерактивная оболочка SQL

Пример соединения с БД

connect "СЕРВЕР:ПУТЬ_ИМЯ_ФАЙЛА_БД" user 'ПОЛЬЗОВАТЕЛЬ' password 'ПАРОЛЬ';

Решение проблем

Деинсталляция (MS Windows)

Ссылки

In most Firebird setups, the username and password is kept in a central security database (security3.fdb in the case of Firebird 3). If you don’t know the username and password of a user anymore, you have the following options.

Be aware, this answer uses Firebird 3 as its base, but most options also apply to Firebird 2.5 and earlier. Instead of security3.fdb, use security2.fdb. The create user and alter user steps only work in Firebird 2.5 or higher.

  1. Use the sysdba account (or another user with RDB$ADMIN role in the security database) to reset the password of the user through any other database
  2. Use gsec as SYSDBA in embedded mode to reset the password
  3. Replace the security database with a copy with a known password for the user

If your database uses itself as its security database, you will first have to remove that setting from the databases.conf by commenting out the SecurityDatabase setting for that database.

For Firebird 3, this answer assumes the creation of a user for the Srp authentication mechanism, and the steps below assume that the firebird.conf in the Firebird installation has setting AuthServer = Srp (or at least that setting AuthServer contains Srp) and setting UserManager = Srp (or at least that Srp is the first entry for UserManager).

Option 1: reset a password

Works on Firebird 2.5 and higher

Connect to a database with SYSDBA (or another user with admin role on the security database), and use

ALTER USER <username> SET PASSWORD '<new password>';

This is probably not an option in your case though.

Option 1a: reset with embedded connection (passwordless)

Works on Linux for Firebird 2.5 or higher, on Windows requires Firebird 3.0 or higher.

Stop Firebird server, and use ISQL to connect to the database in embedded mode (which doesn’t require a password):

isql -user sysdba <database>

With a default Firebird 3 installation, you can use employee for <database>, which will use the employee example database.

Alter the password as described above. Alternatively, try replacing sysdba with the actual username in the isql commandline.

Start Firebird server again.

Option 2: use gsec to change the password

Works on Linux for all version, on Windows this only works for Firebird 3.0 and higher.

Be aware that gsec is deprecated since Firebird 3 and may be removed from future Firebird versions.

Stop the Firebird server, open the command line, and in the Firebird installation folder do:

gsec -user sysdba

and on the gsec prompt

modify <username> -pw <new password>

or if the user doesn’t exist yet:

add <username> -pw <new password>

Start Firebird server again.

Option 3: replace security database

Most of these steps also apply if you are using a new Firebird install; just skip the replacing of the security database.

Stop Firebird server and make a copy of your current security3.fdb as a backup.

Obtain a default security3.fdb for your platform (eg download a zipkit from the Firebird 3 download page) or use a security3.fdb with a known password, and replace your current security3.fdb with this default version. Don’t start Firebird yet.

For earlier Firebird versions, look for your version on the download page.

The default password for sysdba is normally ‘masterkey’, but on Firebird 3 the default security3.fdb only contains this user for the legacy authentication mechanism, which is disabled in a default Firebird 3 installation.

To add a sysdba user, use an embedded connection to any database and create a sysdba account. On the command prompt from the Firebird installation folder, run:

isql -u sysdba <database>

Within ISQL execute:

create user sysdba password '<sysdba password>';
commit;

To add another user, connect using SYSDBA — similar to the previous step 2 — to any database and execute

create user <username> password '<new password>';
commit;

And exit isql (with quit;)

Then start Firebird server again, and you should be able to connect with this user and its password.


Most of these steps assume you already have a database to connect to, if you don’t yet have one, then you’ll need to create on first.

Start isql as user sysdba:

isql -u sysdba

And create a database

create database '<path-of-database>';

You can then use that database for the earlier steps.

Понравилась статья? Поделить с друзьями:
  • Firebird validation error for column
  • Flashtool 1002 ошибка
  • Firebird sql error code 206
  • Flashing super xiaomi mi tool error
  • Firebird msg not found как исправить ibexpert