【问题标题】:Programmatically creating a database (no permission?)以编程方式创建数据库(没有权限?)
【发布时间】:2016-07-11 17:09:58
【问题描述】:

我正在尝试以编程方式创建一个新数据库(.mdf 文件)并最终在数据库中创建表。我不确定要使用什么连接字符串,我看到下面代码中的那个在多个站点上抛出了几次。执行时出现错误:

An unhandled exception of type 'System.Data.SqlClient.SqlException' occurred in System.Data.dll
Additional information: CREATE DATABASE permission denied in database 'master'.

下面是我为创建数据库而运行的代码:

string filename = "C:\\AnalysisResultsDatabase.mdf";
string databaseName = Path.GetFileNameWithoutExtension(filename);

using (var connection = new SqlConnection("Server=localhost;Integrated security=SSPI;database=master"))
{
    connection.Open();
    using (var command = connection.CreateCommand())
    {
        command.CommandText = String.Format("CREATE DATABASE {0} ON PRIMARY (NAME={0}, FILENAME='{1}')", databaseName, filename);
        command.ExecuteNonQuery();

        command.CommandText = String.Format("EXEC sp_detach_db '{0}', 'true'", databaseName);
        command.ExecuteNonQuery();
    }
}

【问题讨论】:

  • 您的域帐户是否具有创建数据库所需的权限?您似乎遇到了权限被拒绝错误。
  • this q/a 有帮助吗?
  • 任何时候使用字符串格式化来构建 SQL 查询,都要非常注意 SQL 注入。我不确定是否有 CREATE DATABASE 的选项,但对 SELECT/UPDATE/INSERT/DELETE 使用参数化查询。 security.stackexchange.com/questions/128412/…
  • @JDB 我之前尝试过,大部分代码都是从那里来的。该连接字符串似乎根本不起作用,甚至无法打开连接。
  • @CamBruce 我认为它没有必要的权限,由于缺少权限,我也无法添加新登录。

标签: c# sql database connection-string


【解决方案1】:

这可能是由于 SQL Server 实例服务标识没有权限访问磁盘上 MDF 文件的位置。

只是为了检查,尝试将服务标识更改为 LocalSystem(如果尚未设置为该帐户)。

【讨论】:

    【解决方案2】:

    您登录的域帐户没有CREATE DATABASE 的适当权限。在创建数据库之前,您必须联系有足够权限授予您权限的管理员。

    【讨论】:

      猜你喜欢
      • 2014-04-10
      • 2014-01-20
      • 2014-04-30
      • 1970-01-01
      • 2019-08-10
      • 1970-01-01
      • 2021-02-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多