在数据库“ master”中拒绝 CREATEDATABASE 权限(EF 代码优先)

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

在数据库“ master”中拒绝 CREATEDATABASE 权限。

这是我的连接字符串:

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

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

  1. 右键单击 database (即. mdf 文件) ,然后单击 properties
  2. 转到安全标签
  3. 单击“继续”按钮
  4. 单击“添加”按钮
  5. 单击“前进”按钮
  6. 将显示另一个窗口,然后单击右侧的“ Find Now”按钮。
  7. 在下面的字段中,到最底部,点击“用户”。点击确定。
  8. 单击已创建的权限“用户”,然后选中完整控件复选框。

好了,您现在有了访问数据库的权限。

注意: 上述问题中的连接字符串使用的是 SQL-server 身份验证。因此,在执行上述步骤之前,必须首先使用 windows-entication 登录,然后必须向使用 sql-server 身份验证的用户授予权限。类似于“ dbcreate”的权限。

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

我用自己的方式解决了这个问题。 按以下方式尝试连接字符串:

<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 from master 设置为 MFC (在您的示例中为 aspnet-test-2012615153521)。

请确保您拥有创建 db 的权限(正如 user2012810所提到的)

或者

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

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


}


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

我在尝试使用代码优先(不使用数据库方法)创建数据库时遇到了同样的问题。问题是 EF 没有足够的权限为您创建数据库。

因此,我使用了 CodeFirst (使用现有的数据库方法)。

步骤:

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

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

5.And now run your code and see the tables getting added to the database provided.

我要加上我必须要做的,因为它是上述内容的综合。 我使用了 Code First,尝试使用“ create-database”,但在标题中出现了错误。 关闭和重新打开(作为管理员这一次)-命令没有识别,但’更新数据库’是如此使用。同样的错误。

以下是我为解决这个问题所采取的步骤:

1)开启 SQLServerManagementStudio 并创建一个数据库“视频”

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)在 Package Manager 控制台运行‘ update-database’来创建表。

记住你可以在创建的时候使用 eed ()来插入值, configuration.cs :

        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();
}

检查连接字符串是否在 Web 中。配置。我删除了那个节点,把它放到了我的网站上。Config,这是我收到的错误。把它移回到 Web.config 并且工作得很好。

以管理员身份运行 VisualStudio,它对我很有用

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

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

在我的例子中,它是由连接字符串中的域名引起的。我有一个假设,如果 DNS 服务器不可用,它不能连接到数据库,因此实体框架试图创建这个数据库。但是许可被拒绝了,这是正确的。

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

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

(信贷到 Masoud)

如错误所示,SQL 登录名没有创建数据库的权限。当登录名具有所需的角色时授予权限。具有创建、更改和删除数据库权限的角色是 DbCreator。因此,应该将其添加到登录名中以解决该问题。可以在 SQLManagementStudio 上通过右键单击用户,然后转到 Properties > Server Roles 来完成。我遇到了同样的错误,并通过这样做解决了它。

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

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

我也有同样的问题,这对我很有效:

  1. 转到 SQLServerManagementStudio并运行为 管理员
  2. 选择 保安-> 然后选择 登录名
  3. 选择登录名下的 用户名或任何将访问数据库的用户,然后双击它。
  4. 给他们一个服务器角色,该角色将为他们提供创建数据库的凭据。在我的案例中,public 已经被检查过了,所以我检查了 Db 创造者系统管理员
  5. 在 PackageManagerConsole 上再次运行 update-Database。现在应该成功创建了数据库。

这是一张图片,你可以看到更大的画面,当然,我模糊了我的证件:enter image description here

再次检查连接字符串。当它指向不存在的数据库时,EF 尝试在 master数据库中创建表,这种错误可能会发生。
在我的案例中,数据库名称中有一个输入错误。

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

这个职位指出我在那个方向的 HT: 使用 DbContext 先建模,无法初始化新数据库

对我来说,我只是关闭所有当前会议,包括 SQLServerManagementStudio,然后我重新打开执行脚本下面的工程罚款

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

我也有同样的问题,我尝试了网上所有可用的方法。但是 SSMS 是以管理员的身份为我工作的。 如果您仍然面临某些问题,请确保您已经下载了 SQLSERVER。

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

  1. 从“服务”中关闭 SQLServer

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. 从“服务”重新启用 SQLServer

提供者: Https://social.msdn.microsoft.com/forums/sqlserver/en-us/76fc84f9-437c-4e71-ba3d-3c9ae794a7c4/

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

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

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

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

出现此错误的原因可能是由于在 Visual sudio 2013中将版本依赖的 localDB 转发到 VS 2015以后的版本独立的 localDB,因此 只需将 web.config 文件 ConnectionStrings 从 (localDb) v11.0更改为 (localDB) MSSQLLocalDB,就可以了。 这是对 Visual Studio 2015版本独立的本地数据库的一个很好的解释

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

现在我希望您能够成功地执行 update-database。

在你的主数据库里运行这个

ALTER SERVER ROLE sysadmin ADD MEMBER your-user;
GO

如果使用 。 SQLExpress作为 资料来源,可以将“ 用户实例 = 真”属性添加到连接字符串中,以修复标题中提到的错误。

比如说,


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 链接

这是大错特错的——永远不要在不需要的地方过度提升您的权限(使用 SA)。

  1. 要创建数据库,您所需要的是: CREATE DATABASECREATE ANY DATABASEALTER ANY DATABASE权限 < a href = “ https://Learn.microsoft.com/en-us/sql/t-sql/statement/create-database-transact-sql? view = sql-server-ver15 & amp; tab = sqlpool”rel = “ nofollow noReferrer”> 文档 或登录为 dbcreator的成员 服务器级角色。
  2. 接下来-您需要确保 mssql 服务登录(默认情况下是 NT Service\MSSQLServer)具有修改文件的权限 系统中创建数据库的位置 (数据页通常为1. mdf 文件,数据库通常为1. ldf 文件 日志)。
  3. 然后确保您知道在哪里创建数据库 Default 发送可能的最懒查询,仅定义数据库 名称: CREATE DATABASE [db_name],然后假设其余的- 应用默认设置。请确保更改这些设置以反映 mssql 引擎服务访问或提升的位置 服务权限。无论哪种方式,这种修改都需要 mssql 应用设置。
  4. 最后,确保使用该登录名连接到 mssql。 如果您执行 EXECUTEASUSER 语句来切换您的登录名,则 此方法只允许对 DB 用户进行交互,而不允许 服务器级别的登录。尝试这样做会给你 CREATE DATABASE permission denied in database 'master'错误消息。

要获得在本地帐户中创建数据库的权限,请按照下列给定的步骤操作。

  1. 断开与本地帐户的连接。
  2. 再次使用 登录: sa密码: pwd连接到服务器(pwd 给予您的本地登录名)。
  3. 对象资源管理器-> 安全-> 登录-> 右键单击服务器名称-> 属性-> 服务器角色-> 系统管理员-> 确定
  4. 断开连接并连接到本地登录并创建数据库。

附注: 对我来说,即使没有连接/断开到服务器,它工作!