如何创建Firebird数据库用户并向该用户授予一些特权

时间:2019-04-24 09:12:38

标签: c# .net firebird firebird-3.0

我正在使用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”

1 个答案:

答案 0 :(得分: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再创建他,或者设置一些新的尚未使用的用户名

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

P.P.S。我个人不会通过命令创建数据库,而是会从预先准备的备份文件中还原现成的数据库。 YMMV。