我在项目中使用代码优先并在主机上部署,但是我收到错误
在数据库'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"/>
答案 0 :(得分:37)
我遇到了同样的问题。这对我有用:
答案 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(使用现有的数据库方法)开始工作。
步骤:
现在在Context类中,为它创建一个构造函数并从基类扩展它,并将连接字符串的名称作为参数传递。 就像,
public class DummyContext : DbContext
{
public DummyContext() : base("name=DefaultConnection")
{
}
}
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)
现在,我希望您可以成功执行更新数据库。
答案 13 :(得分:1)
第1步:与您的本地帐户断开连接。
第2步:再次使用管理员用户连接到服务器
第3步:对象资源管理器->安全性->登录名->右键单击服务器名称->属性->服务器角色-> sysadmin->确定
第4步:断开连接并连接到本地登录名并创建数据库。
答案 14 :(得分:1)
我遇到了似乎是此错误的内容。我在Windows上运行时,发现我的管理员Windows用户没有数据库管理员权限。
"C:\Program Files\Microsoft SQL Server\MSSQL14.SQLEXPRESS\MSSQL\Binn\sqlservr.exe" -m -s SQLEXPRESS
sqlcmd -S .\SQLEXPRESS
sp_addsrvrolemember 'domain\user', 'sysadmin'
GO
信用至: 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 数据库。每个实例都在单个用户的安全上下文下运行,每个用户一个实例。
答案 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)
权限被拒绝是一种安全性,因此您需要添加“用户”权限..
你去吧。您现在已拥有数据库权限。