C# 如何创建Firebird数据库用户并向该用户授予某些权限

C# 如何创建Firebird数据库用户并向该用户授予某些权限,c#,.net,firebird,firebird-3.0,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,

我正在使用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”上的主键或唯一键约束“INTEG_5”


违反主键或唯一键
-这意味着您试图将一行插入到已存在的表中

在您的特定情况下,已经创建了具有此名称的用户(通过SRP插件),并且您不能创建具有相同名称的两个用户(通过同一个插件)

检查现有用户:

然后在重新创建用户之前,将其删除,或者设置一些新的、尚未使用的用户名

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


p.p.S.就我个人而言,我不会逐个命令创建数据库,而是从预先准备好的备份文件中恢复现成的数据库。YMMV.

感谢您的帮助,它可以正常工作,因此可以向用户授予一些特权,如仅为该创建的数据库创建、选择等,并且该用户无法对任何其他数据库执行任何操作。默认情况下,用户不应对其他数据库中已存在的对象授予权限。但是,至少在Firebird 2中,用户可以在其他数据库中创建新数据库或新对象(如表、过程等)。我不知道FB3是否改变了这一点,我不熟悉它。参见FB3上注明的版本,关于用户授权的变化。无论如何,这个问题与您提出的问题不同,并且现在有效。用户不能执行
select*from PLG$SRP
,除非他们连接到安全数据库。OP可以使用
create或alter user
,而不是
create user
。。有可能他会在该计算机上篡改其他数据库在改造之前就依赖于那个用户。嗯,这是可能的,仅仅因为可以编辑数据就编辑数据是一种危险的习惯。
 select * from sec$users