授予Asp.net mvc app删除和创建SQL Server数据库的权限

时间:2011-09-20 01:51:42

标签: asp.net sql-server asp.net-mvc sql-server-2008 iis

我正在使用SQL Server 2008 R2并且遇到了问题。我开发的应用程序需要在不同地点的客户站点进行测试。所以我计划一次配置客户端的机器,然后对于与应用程序相关的任何更改,我将只分发一个客户端可以在IIS上部署的asp.net mvc部署包。为此,我需要提供我的asp.net应用程序能力来删除和创建数据库(通过codefirst实体框架)。 在目前的配置中,我面临与删除数据库相关的权限问题。应用程序以某种方式无法删除数据库。以下是我正在使用的IIS和SQL Server配置的摘要。

对于IIS,我已根据标准惯例将应用程序池标识设置为“本地服务”。 asp.net web.config文件中的连接字符串如下所示。

connectionString="Server=.\SQLEXPRESS;Database=SomeDatabase;Trusted_Connection=true;User Id=someuser;Password=somepassword" />

对于SQL Server服务,我提供了“本地服务”作为登录,再次为此服务提供了最低限度的访问权限。对于SQL Server实例登录,我已经定义了用户和密码,并赋予了完整的权限(“sysadmin”)角色。

有了这个配置,我希望我的IIS应用程序能够使用上面创建的用户和密码进行连接,并且能够删除和创建SQL Server数据库。但我正在获得删除Dropping Database的许可。例外情况如下。

System.Data.SqlClient.SqlException (0x80131904): Cannot drop the database 'SomeDatabase', because it does not exist or you do not have permission.

我已检查数据库是否存在,因此归结为权限。我是否错过了某些配置?

3 个答案:

答案 0 :(得分:2)

我认为在Sql连接上使用的真实帐户是“本地服务”,因为您在连接字符串中定义了Trusted_Connection = True。尝试删除它,看看会发生什么。如果我没错,这个参数将使用Windows集成帐户,即你的本地服务。

答案 1 :(得分:2)

要清楚,您的连接字符串有点格式错误,可能没有达到预期的效果。

在连接字符串中指定Integrated Security=true时,会发生Windows身份验证。

将忽略连接字符串中的任何user id=属性。

删除Integrated Security=true属性,切换到SQL Server身份验证模式。

   Server=.\SQLEXPRESS;Database=SomeDatabase;
   User Id=someuser;Password=somepassword;

此外,DROP DATABASE命令可以由数据库所有者,db_owner角色的成员用户或服务器管理员角色的用户执行。

将数据库用户someuser添加到db_owner角色。

 EXEC sp_addrolemember 'db_owner', 'SomeUser';

或者,如果您确定上述帐户不应具有此角色(即限制性安全环境,策略等),请考虑仅为此目的创建和使用其他帐户。这可能意味着维护另一个连接字符串。如果用户/角色的分离对您来说足够重要,那么第二个选项可能会有效。

答案 2 :(得分:0)

在连接字符串中指定凭据时,您需要省略Trusted_Connection部分或将其设置为False

Data Source =myServerAddress; Initial Catalog =myDataBase; User Id =myUsername; Password =myPassword;

OR

Server =myServerAddress; Database =myDataBase; User ID =myUsername; Password =myPassword; Trusted_Connection =False;

有关详细信息,请参阅http://connectionstrings.com/sql-server-2008