我在ASP#中使用了C#。我想通过Web服务器访问SQL Server数据库。从开发区域执行我的应用程序时,它正在运行,但在将应用程序部署到IIS服务器后,它显示以下异常:
在数据库' master'中拒绝CREATE DATABASE权限。试图 附加文件D:\ newtest \ newtest.mdf的自动命名数据库失败。 存在同名的数据库,或者指定的文件不能存在 打开,或者它位于UNC分享。
我使用以下连接字符串附加数据库
Data Source = .\\SQLEXPRESS;AttachDbFileName=databasepath; Integrated Security=true
如何通过IIS远程访问SQL Server数据库?
答案 0 :(得分:0)
使用SQL Server创建Credential并更新配置文件
connectionString="Data Source=Abcl\SQLEXPRESS;Initial Catalog=master;User ID=sa;Password=pwd12" providerName="System.Data.SqlClient"
如果您正在使用像mdf这样的db文件 请使用像这样的
connectionString="AttachDbFilename='C:\Documents and Settings\nmartin\My Documents\PS_Upload\TimeTrack\src\TimeTracker\TimeTrack\App_Data\ASPNETDB.MDF';Integrated Security=True; User Instance=True"
答案 1 :(得分:0)
尽管Sanjay的答案是正确的,但它并没有真正解释为什么你获得了许可被拒绝。
在ASP.NET / IIS中运行的代码作为特定用户运行,在工作进程'config中无效。对于IIS 6 [Server 2003](以及我认为),IIS 7+ [Server 2008]的默认值为NETWORK SERVICE
,默认行为是作为特殊应用程序池用户IISAPPPOOL\yourAppPoolName
运行。
如果您在数据库中为正确的用户帐户授予必要的权限 - 您应该能够绕过错误并仍然使用集成安全性。
顺便说一下,通常最好为数据库提供最严格(但仍然可操作)的权限集。 CREATE DATABASE
需要相当高的权限级别(我不记得我的头脑。)如果您将其授予您的IIS应用程序,那么您将面临一个很大的风险,即允许一个不太尊敬的用户控制你的数据库系统并对其造成严重破坏。
答案 2 :(得分:0)
他们的关键是你在连接字符串中使用了Integrated Security=True
。
在开发环境中运行项目时,Web应用程序通常作为本地用户帐户运行。此外,您的帐户通常是本地SQL实例上的特权用户(admin)。
在部署服务器上,IIS通常作为本地计算机帐户(或为AppPool配置的帐户)运行。该帐户通常在SQL服务器实例上没有任何特殊权限。
正如debracey指出的那样,你通常不希望你的应用程序的SQL权限高到足以造成任何伤害(即使这是你的诚实错误)。避免使用的一种常见模式是为您的应用设置两个单独的SQL帐户: