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>
по умолчанию будет использоваться первый пользовательский менеджер в списке).