FirebirdSql.Data.FirebirdClient подключается к пользователю, отличному от Sysdba - имя пользователя и пароль не определены

Я использую FirebirdSql.Data.FirebirdClient для подключения к базе данных Firebird (настольное приложение WPF).

Версия сервера: WI-V3.0.5.33220 Firebird 3.0, а версия провайдера ADO.net - 7.5.0 (NuGet)

Я создал пользователя, отличного от SYSDBA, который имеет доступ только для чтения к таблицам (только SELECT). Подключение к FlameRobin работает без проблем с этим новым пользователем. Однако, когда я указываю этого нового пользователя и соответствующую роль только для чтения в классе FbConnectionStringBuilder, я получаю

"ваше имя пользователя и пароль не определены"

ошибка. Если я заменю нового пользователя на SYSDBA и соответствующий пароль, соединение будет работать.

using FirebirdSql.Data.FirebirdClient;

namespace Test
{
    class DBConnection
    {
        FbConnection fbConnection;
        public void CreateConnection() 
        {
            FbConnectionStringBuilder builder = new FbConnectionStringBuilder();
            builder.Charset = "WIN1252";
            builder.Database = "firebird2:DB_NAME";
            builder.Dialect = 3;
            builder.Role = "READ_ONLY_OTN";
            builder.UserID = "TEST";
            builder.Password = "Test";
            builder.ServerType = FbServerType.Default;
            fbConnection = new FbConnection(builder.ConnectionString);
            fbConnection.Open();
        }
    }
}

Что может быть причиной этой ошибки, кроме неправильного пароля (я проверял его дважды, а также с помощью FlameRobin)?

1 ответ

Решение

Проблема в том, что при подключении к Firebird 3 провайдер Firebird ADO.net (FirebirdSql.Data.FirebirdClient) поддерживает только новый плагин аутентификации SRP, а не плагин аутентификации Legacy_Auth. Если ваш пользователь создан с помощью Legacy_UserManager, вы не сможете пройти аутентификацию с помощью провайдера Firebird ADO.net. Вам нужно создать пользователя с помощью Srp.

В зависимости от вашей точной конфигурации Firebird вам необходимо добавить Srp к UserManager config, а затем создайте пользователя с помощью:

create user <youruser> password '<password>' using plugin srp;

По соображениям безопасности я бы рекомендовал вам отказаться от создания пользователя с помощью Legacy_UserManager:

drop user <youruser> using plugin legacy_usermanager;

Я бы также рекомендовал вам удалить Legacy_UserManager из UserManager список или убедитесь, что Srp стоит первым в списке, чтобы избежать случайного создания пользователей с менее безопасным диспетчером пользователей (выполнение операторов управления пользователями SQL без using plugin <plugin> по умолчанию будет использоваться первый пользовательский менеджер в списке).

Другие вопросы по тегам