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