我使用 Entity Framework 的代码优先方法。当我第一次运行应用程序时,它将尝试创建与我的 MVC 模型匹配的数据库。
但是我认为它没有创建它的权限。我收到以下错误:
数据库‘master’中的 CREATE DATABASE 权限被拒绝。
哪个用户正在尝试访问 SqlServer,我如何添加它的权限以使其工作?
这是我正在使用的连接字符串(应该是正确的......)
<add name="ContextDb"
connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;initial catalog=ContextDb"
providerName="System.Data.SqlClient"/>
干杯
答案1
一般提示:不要这样做。
数据库创建(除了非常简单的场景外)是一种管理行为,不应由用户执行。事实上,您不应该期望能够执行任何 DDL - 不能创建表等。什么都不能。
初学者的基本安全 101 指出,数据库的创建和维护不是由不受信任的用户完成,而是由管理员完成。
这就是为什么您通常在设置和/或由管理员运行的工具中执行此操作。
只有极其简单的场景才能避免这种情况,而且只能使用本地 Express 数据库。但即便如此,您仍然非常信任用户 - 我真的希望这不是高级的东西。如果在 SQL Express 端没有任何重新配置,这意味着用户必须是管理员 ;)
答案2
当您在连接字符串中使用“Integrated Security=SSPI”时,这意味着将使用运行可执行文件的用户的 Windows 凭据建立与 SQL 的连接。该网站connectionstrings.com是构建连接字符串的一个很好的参考。