Как создать пользователя базы данных Firebird и предоставить ему некоторые привилегии - PullRequest
1 голос
/ 24 апреля 2019

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

var csb = new FbConnectionStringBuilder(@"DataSource=localhost;User=SYSDBA;Password=mw;Database=test.fdb;") { Pooling = false };

FbConnection.CreateDatabase(csb.ConnectionString, 16384, false, true);

FbConnection myConn = new FbConnection(csb.ConnectionString);

try
{
    myConn.Open();
    string sql = "CREATE USER user123 PASSWORD 'user123pass';
    FbCommand cmd = new FbCommand(sql, myConn);
    cmd.ExecuteNonQuery();
}
catch (System.Exception ex)
{
    error = ex.ToString();
}
finally
{
    if (myConn.State == ConnectionState.Open)
    {
        myConn.Close();
    }
 }

При выполнении этого кода выдается следующее исключение.

FirebirdSql.Data.FirebirdClient.FbException (0x80004005): добавить ошибку записи нарушение ограничения PRIMARY или UNIQUE KEY "INTEG_5" для таблицы "PLG $ SRP"

1 Ответ

1 голос
/ 24 апреля 2019

violation of PRIMARY or UNIQUE KEY - это означает, что вы пытаетесь вставить строку в таблицу, которая уже существует.

в вашем конкретном случае пользователь (с помощью плагина SRP) с таким именем уже создан, и вы не можете создать двух пользователей (с помощью одного и того же плагина) с одинаковым именем.

Проверка существующих пользователей: https://firebirdsql.org/file/documentation/release_notes/html/en/3_0/rnfb30-pseudo-users.html

 select * from sec$users

Затем либо drop user перед повторным созданием его, либо установите новое, еще не использованное имя пользователя

P.S. обратите внимание, что по умолчанию пользователи создаются в экземпляре сервера, поэтому вы не создаете одного и того же пользователя для каждой базы данных снова и снова. Как только вы создали пользователя - он существует на сервере для всех баз данных там. Это конфигурация по умолчанию, хотя ее можно изменить с помощью файла databases.conf в Firebird. К сожалению, вы не можете изменить эту конфигурацию при помощи строки подключения вашего приложения во время создания новых баз данных.

P.P.S. лично я бы не создавал команду базы данных по команде, а скорее восстановил бы готовую базу данных из предварительно подготовленного файла резервной копии. YMMV.

...