数据库'master'中的CREATE DATABASE权限被拒绝(EF代码优先)

时间:2012-06-27 17:34:41

标签: code-first

我在项目中使用代码优先并在主机上部署,但是我收到错误

  

在数据库'master'中拒绝CREATE DATABASE权限。

这是我的连接字符串:

<add name="DefaultConnection" 
     connectionString="Data Source=.\SQLEXPRESS;Initial Catalog=aspnet-test-2012615153521;Integrated Security=False" 
     providerName="System.Data.SqlClient;User ID=test;Password=test"/>

24 个答案:

答案 0 :(得分:37)

我遇到了同样的问题。这对我有用:

  1. 转到 SQL Server Management Studio 并将其作为管理员运行。
  2. 选择安全 - &gt;然后登录
  3. 选择用户名或任何将在登录和双击下访问您数据库的用户。
  4. 为他们提供一个服务器角色,为他们提供创建数据库的凭据。在我的情况下,公众已经被检查,所以我检查了 dbcreator sysadmin
  5. 在Package Manager控制台上再次运行update-database。现在应该已成功创建数据库。
  6. 这是一张图片,以便您可以获得更大的图片,我当然模糊了我的凭据:enter image description here

答案 1 :(得分:19)

确保您有权创建数据库。(如提到的user2012810。)

您的代码似乎首先使用另一个(或默认)连接字符串。 您是否在上下文类中设置了连接名称?

public class YourContext : DbContext
    {
        public YourContext() : base("name=DefaultConnection")
        {

        }

        public DbSet<aaaa> Aaaas { get; set; }
    }

答案 2 :(得分:16)

尝试使用Code First创建数据库时遇到了同样的问题(没有数据库方法)。问题是EF没有足够的权限为您创建数据库。

所以我使用Code First(使用现有的数据库方法)开始工作。

步骤:

  1. 在Sql server管理工作室中创建数据库(最好不带表格)。
  2. 现在回到visual studio,在服务器资源管理器中添加新创建的数据库的连接。
  3. 现在使用数据库的连接字符串,并将其添加到app.config中,其名称为“Default Connection”。
  4. 现在在Context类中,为它创建一个构造函数并从基类扩展它,并将连接字符串的名称作为参数传递。 就像,

    public class DummyContext : DbContext
    {
      public DummyContext() : base("name=DefaultConnection")
      {
      }  
    }
    
  5. 5.现在运行您的代码,看到表格已添加到提供的数据库中。

答案 3 :(得分:9)

以管理员身份运行Visual Studio,它对我有用

答案 4 :(得分:7)

如果解决方案中有多个项目,并且将错误的项目设置为启动项目,也会发生此错误。

这很重要,因为Update-Database使用的连接字符串来自启动项目,而不是包管理器控制台中选择的“默认项目”。

(归功于masoud

答案 5 :(得分:5)

我已经解决了这个问题。 以这种方式尝试连接字符串:

<add name="MFCConnectionString" connectionString="Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\MFC.mdf;Initial Catalog=MFC;Integrated Security=false;User ID=sa;Password=123"
  providerName="System.Data.SqlClient" />

记得将默认db从master设置为MFC(在你的情况下,aspnet-test-2012615153521)。

答案 6 :(得分:3)

如错误所示,SQL登录没有创建数据库的权限。登录具有所需角色时授予权限。具有创建,更改和删除数据库权限的角色是dbCreator。因此应该将其添加到登录中以解决问题。可以通过右键单击用户在SQL Management Studio上完成,然后转到属性&gt;服务器角色。我遇到了同样的错误并通过这样做解决了它。

答案 7 :(得分:2)

仔细检查您的连接字符串。当它指向不存在的数据库时,EF会尝试在master数据库中创建表,并且可能会发生此错误 就我而言,数据库名称中存在拼写错误。

答案 8 :(得分:1)

检查连接字符串是否在Web.Config中。我删除了该节点并将其放入我的Web.Debug.config中,这是我收到的错误。将其移回Web.config并运行良好。

答案 9 :(得分:1)

以管理员身份运行Visual Studio并将您的SQL SERVER身份验证登录(谁有权创建数据库)和密码放在连接字符串中,它对我有用

答案 10 :(得分:1)

我将添加我必须做的事情,因为它是上述的合并。 我正在使用Code First,尝试使用'create-database'但是在标题中出现了错误。 关闭并重新打开(作为管理员这次) - 命令无法识别,但“update-database”被如此使用。同样的错误。

以下是我解决它的步骤:

1)打开SQL Server Management Studio并创建数据库“视频”

2)在VS2013中打开服务器资源管理器(在“查看”下)并连接到数据库。

3)右键点击连接 - &gt;属性,并抓住连接字符串。

4)在web.config中我添加了连接字符串

   <connectionStrings>
<add name="DefaultConnection"
  connectionString="Data Source=MyMachine;Initial Catalog=Videos;Integrated Security=True" providerName="System.Data.SqlClient"
  />
  </connectionStrings>

5)在设置上下文的地方,我需要引用DefaultConnection:

using System.Data.Entity;

namespace Videos.Models
{
public class VideoDb : DbContext
{
    public VideoDb()
        : base("name=DefaultConnection")
    {

    }

    public DbSet<Video> Videos { get; set; }
}
}

6)在Package Manager控制台中运行'update-database'来创建表。

请记住,您可以在Configuration.cs中使用Seed()在创建时插入值:

        protected override void Seed(Videos.Models.VideoDb context)
        {
        context.Videos.AddOrUpdate(v => v.Title,
            new Video() { Title = "MyTitle1", Length = 150 },
            new Video() { Title = "MyTitle2", Length = 270 }
            );

        context.SaveChanges();
        }

答案 11 :(得分:1)

如果您在IIS下运行该站点,则可能需要将应用程序池的标识设置为管理员。

答案 12 :(得分:1)

  1. 手动创建空数据库。
  2. 将连接字符串中的“集成安全性”从“ true”更改为 “假”。
  3. 确保您的用户是新数据库中的sysadmin

现在,我希望您可以成功执行更新数据库。

答案 13 :(得分:1)

第1步:与您的本地帐户断开连接。

第2步:再次使用管理员用户连接到服务器

第3步:对象资源管理器->安全性->登录名->右键单击服务器名称->属性->服务器角色-> sysadmin->确定

第4步:断开连接并连接到本地登录名并创建数据库。

答案 14 :(得分:1)

我遇到了似乎是此错误的内容。我在Windows上运行时,发现我的管理员Windows用户没有数据库管理员权限。

  1. 从“服务”中关闭SQL Server

Disable Services

  1. 打开cmd窗口(以管理员身份),并使用以下命令以本地管理员身份运行单用户模式(MSSQL的版本可能有所不同):
"C:\Program Files\Microsoft SQL Server\MSSQL14.SQLEXPRESS\MSSQL\Binn\sqlservr.exe" -m -s SQLEXPRESS
  1. 以管理员身份打开另一个cmd窗口
  2. 使用以下命令在该终端上打开sqlcmd:
sqlcmd -S .\SQLEXPRESS
  1. 现在将sysadmin角色添加到您的用户:
sp_addsrvrolemember 'domain\user', 'sysadmin'
GO
  1. 从“服务”中重新启用SQL Server

信用至: https://social.msdn.microsoft.com/Forums/sqlserver/en-US/76fc84f9-437c-4e71-ba3d-3c9ae794a7c4/

答案 15 :(得分:0)

在您的主数据库上运行

ALTER SERVER ROLE sysadmin ADD MEMBER your-user;  
GO 

答案 16 :(得分:0)

如果您使用 .\SQLExpress 作为数据源,您可以将“User Instance=True”属性添加到您的连接字符串,修复标题中提到的错误。

例如


Data Source=.\\SQLExpress;Integrated Security=true;  
User Instance=true;  
AttachDBFilename=|DataDirectory|\app_data\Northwind.mdf;  
Initial Catalog=Northwind;

用户实例允许非本地计算机管理员的用户附加和连接到 SQL Server Express 数据库。每个实例都在单个用户的安全上下文下运行,每个用户一个实例。

参考:MSDN Link for SQL Server Express User Instances

答案 17 :(得分:0)

此错误的原因可能是由于Visual sudio 2013中依赖于版本的localdb转发到VS 2015及更高版本中与版本无关的localDB所致,因此 只需将您的web.config文件connectionStrings从(localDb)\ v11.0 更改为(localDB)\ MSSQLLocalDB ,它肯定可以工作。 这是对Version independent local DB in Visual Studio 2015

的很好的解释

答案 18 :(得分:0)

我遇到了同样的问题,我尝试了互联网上所有可用的方法。但是SSMS以管理员身份运行对我有用。 如果仍然遇到问题,请确保您已经下载了SQL SERVER。

答案 19 :(得分:0)

对我来说,我只是关闭所有当前会话,包括 SQL Server Management Studio ,然后重新打开执行下面的脚本即可

IF EXISTS (SELECT NAME FROM master.sys.sysdatabases WHERE NAME = 'MyDb')
DROP DATABASE mydb RESTORE DATABASE SMCOMDB FROM DISK = 'D:/mydb.bak' 

答案 20 :(得分:0)

对我有用的解决方案是使用在创建edmx文件时运行数据库第一向导时创建的Entity Framework连接字符串。连接字符串需要元数据文件引用,例如“metadata = res:// /PSEDM.csdl|res:// /PSEDM.ssdl|res://*/PSEDM.msl”。此外,连接字符串需要位于调用应用程序的配置中。

HT在这篇文章中指出了我的方向:Model First with DbContext, Fails to initialize new DataBase

答案 21 :(得分:0)

这个问题的解决方案就像吃一块蛋糕一样简单。当您的用户凭据更改且SQL服务器无法识别您时,通常会出现此问题。无需卸载现有的SQL Server实例。您可以简单地使用新实例名称安装新实例。假设您的最后一个实例名称是'Sqlexpress',所以这次安装时,将您的实例命名为'Sqlexpress1'。另外,不要忘记在安装过程中选择混合模式(即Sql Server身份验证和Windows身份验证),并提供系统管理员密码,如果将来出现此类问题,这将非常方便。 这个解决方案肯定会解决这个问题。谢谢..

答案 22 :(得分:0)

我没有证明我的解决方案,只是假设。

在我的情况下,它是由连接字符串中的域名引起的。我假设如果DNS服务器不可用,则无法连接到数据库,因此实体框架会尝试创建此数据库。但许可被否定,这是正确的。

答案 23 :(得分:-7)

权限被拒绝是一种安全性,因此您需要添加“用户”权限..

  1. 右键单击数据库(.mdf文件),然后单击属性
  2. 转到安全标签
  3. 点击继续按钮
  4. 点击添加按钮
  5. 点击高级按钮
  6. 将显示另一个窗口,然后单击右侧的“立即查找”按钮。
  7. 在下面的字段中,转到最底部,然后单击“用户”。单击“确定”。
  8. 单击您已创建的“用户”权限,然后选中完整控件复选框。
  9. 你去吧。您现在已拥有数据库权限。