1

我正在使用 SYSDBA 动态创建一个 firebird 数据库。我想创建一个具有某些权限的用户,然后使用新用户打开这个数据库。有人可以帮忙吗?

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):在表“PLG$SRP”上添加违反 PRIMARY 或 UNIQUE KEY 约束“INTEG_5”的记录错误

4

1 回答 1

1

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在重新创建他之前,要么设置一些新的,尚未使用的用户名

PS 请注意,默认情况下,用户是在服务器实例中创建的,因此不像您一次又一次地为每个数据库创建一个相同的用户。创建用户后 - 它存在于服务器上,用于那里的所有数据库。这是默认配置,尽管可以使用 Firebird 的databases.conf文件覆盖它。遗憾的是,在创建新数据库时,您无法通过应用程序的连接字符串更改此配置。

PPS 个人我不会通过命令创建数据库,而是从预先准备好的备份文件中恢复现成的数据库。YMMV。

于 2019-04-24T09:35:38.100 回答