75

我在我的项目中使用代码优先并在主机上部署,但出现错误

数据库“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"/>
4

24 回答 24

77

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

  1. 转到SQL Server Management Studio并以管理员身份运行它。
  2. 选择安全-> 然后登录
  3. 在登录名下选择用户名或将访问您的数据库的任何用户,然后双击它。
  4. 给他们一个服务器角色,这将为他们提供创建数据库的凭据。就我而言, public 已经检查过了,所以我检查了dbcreatorsysadmin
  5. 在包管理器控制台上再次运行更新数据库。数据库现在应该已成功创建。

这是一张图片,以便您可以了解更大的情况,当然我模糊了我的凭据:在此处输入图像描述

于 2017-06-11T16:22:55.963 回答
21

确保您有权创建数据库。(如 user2012810 所述。)

或者

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

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

        }

        public DbSet<aaaa> Aaaas { get; set; }
    }
于 2013-10-05T13:43:32.897 回答
20

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

因此,我使用 Code First(使用现有的数据库方法)进行了改进。

脚步 :

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

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

5.现在运行您的代码并查看表被添加到提供的数据库中。

于 2014-12-06T07:46:35.613 回答
12

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

于 2015-10-14T19:51:14.940 回答
9

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

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

感谢马苏德

于 2017-01-03T09:23:44.923 回答
6

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

<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" />

请记住将默认数据库从 master 设置为 MFC(在您的情况下为 aspnet-test-2012615153521)。

于 2013-09-06T02:32:15.610 回答
4

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

于 2017-01-05T03:55:36.230 回答
3

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

于 2017-01-17T10:25:19.880 回答
3

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

于 2018-03-30T07:18:51.500 回答
3

我遇到了似乎是这个错误。我在 windows 上运行,发现我的管理员 windows 用户没有数据库管理员权限。

  1. 从“服务”关闭 SQL Server</li>

禁用服务

  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</li>

归功于: https ://social.msdn.microsoft.com/Forums/sqlserver/en-US/76fc84f9-437c-4e71-ba3d-3c9ae794a7c4/

于 2019-02-11T02:56:36.503 回答
2

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

于 2016-08-20T22:12:35.530 回答
2
  1. 手动创建空数据库。
  2. 将连接字符串中的“Integrated Security”从“true”更改为“false”。
  3. 确保您的用户是新数据库中的系统管理员

现在我希望你可以成功执行 update-database。

于 2020-01-15T15:22:14.793 回答
1

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

以下是我为解决它而采取的步骤:

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

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

3)右键单击连接 - >属性,并抓住连接字符串。

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) 在包管理器控制台中运行“更新数据库”以创建表。

请记住,您可以在 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();
        }
于 2015-04-15T12:33:53.977 回答
1

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

于 2015-08-23T01:00:17.743 回答
1

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

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

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

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

于 2019-03-31T08:13:41.390 回答
1

在你的主数据库上运行它

ALTER SERVER ROLE sysadmin ADD MEMBER your-user;  
GO 
于 2020-11-12T19:01:09.167 回答
0

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

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

于 2016-10-27T10:43:55.663 回答
0

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

HT 到这篇文章为我指出了那个方向:Model First with DbContext, Fails to initialize new DataBase

于 2018-04-24T13:35:43.780 回答
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' 
于 2018-09-01T18:02:43.820 回答
0

我遇到了同样的问题,我尝试了互联网上所有可用的东西。但是 SSMS 以管理员身份运行为我工作。如果您仍然遇到一些问题,请确保您必须已下载 SQL SERVER。

于 2019-01-27T13:11:41.313 回答
0

此错误的原因可能是由于将 Visual sudio 2013 中的版本相关 localdb 转发到 VS 2015 中的版本无关 localDB,因此只需将 web.config 文件 connectionStrings 从(localDb)\v11.0 更改(localDB)\ MSSQLLocalDB,它肯定会工作。这是对Visual Studio 2015 中与版本无关的本地数据库的 一个很好的解释

于 2019-11-17T16:48:09.830 回答
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 数据库。每个实例在单个用户的安全上下文下运行,每个用户一个实例。

参考:SQL Server Express 用户实例的 MSDN 链接

于 2021-06-17T16:48:06.863 回答
-1

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

于 2017-02-13T07:29:36.657 回答
-11

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

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

你去吧。您现在有权访问您的数据库。

注意:上述问题中的连接字符串是使用 SQL-server 身份验证。因此,在进行上述步骤之前,您必须先使用 windows-authentication 登录,然后您必须授予使用 sql-server 身份验证的用户权限。像“dbcreator”这样的权限。

如果您使用 SQL Server 身份验证登录并尝试向您登录的用户授予权限。它显示,权限被拒绝错误。

于 2013-01-26T01:24:21.730 回答