IIS 7中的SQLExpress连接失败,用户实例错误 - “无法生成用户实例

时间:2011-09-09 19:04:24

标签: sql iis-7 telerik privileges user-instance

主要是希望回答下面的问题#1,但会有更多的知识。

我在调查过程中尝试使用这些资源,但没有成功:

http://social.msdn.microsoft.com/Forums/en/sqldatabaseengine/thread/f5eb164d-9774-4864-ae05-cac99740949b对于此错误: 由于检索用户的本地应用程序数据路径失败而无法生成SQL Server的用户实例。请确保用户已确认计算机上的本地用户配置文件。连接将关闭。

http://social.msdn.microsoft.com/forums/en-US/sqlexpress/thread/6dfdcc22-7a81-4e8f-a947-c1ce6982d4b3/对于此错误: 在数据库主服务器中拒绝CREATE DATABASE权限。尝试为文件附加自动命名的数据库失败。具有相同数据库的数据库name存在,或指定的文件无法打开,或者它位于UNC共享。

问题

1.。)运行带有IIS 7的ASP.NET AJAX“Live Demos”项目的Telerik Rad控件时,为什么会出现此错误(使用带有此连接字符串的ASP.NET Development Server运行Telerik Live Demos)

由于无法检索用户的本地应用程序数据路径而无法生成SQL Server的用户实例。请确保用户在计算机上具有本地用户配置文件。连接将被关闭。

2.。)如何在IIS 7中创建不同的SQL Server Express实例,从ASP.NET Development Server& SSMSE

3。)在不同的上下文中运行网站时,是否存在SQL连接字符串的某些属性(基于#2)。

环境:

我没有通过ASP.NET开发服务器运行“Live Demos”.NET 3.5 ASP.NET Web应用程序(在您的系统托盘中弹出的功能,并在Visual Studio中单击播放后为您选择一个端口) 。这很好用!我正在IIS 7上运行该网站.SQL Server Express正在使用控制面板中的NETWORK SERVICE用户>管理工具>服务> SQL Server(SQLExpress)。

使用随安装的“Live Demos”Web应用程序演示项目提供的此连接字符串:

<add name="NorthwindConnectionString"
             connectionString="Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|Northwind.mdf;Integrated Security=True;User Instance=True"
             providerName="System.Data.SqlClient" />

我尝试过设置“User Instance = False”,但这只会引发另一个错误:

在数据库主服务器中拒绝CREATE DATABASE权限。尝试为文件附加自动命名的数据库?失败。存在具有相同名称的数据库,或者无法打开指定的文件,或者它位于UNC共享上。

(其中“?”是* .mdf文件的路径 - C:\ Users \\ MyDocuments \ Visual Studio 2008 \ Projects \ TelerikDemos \ Telerik \ RadControls for ASP.NET AJAX Q2 2011 \ Live Demos \ App_Data \ Northwind.mdf .. Stack Overflow斜体用一些字符打破了,所以我不得不删除那条路径)

有人在上一个问题上回答我设置此“User Instance = False”,但似乎用户实例与您是否使用SQL Express无关。用户实例只是SQL Express的一项功能,它允许非常无特权的用户在其自己的用户上下文中托管数据库实例。

注意,此Northwind数据库与* .ldf(日志文件)一起存储在App_Data文件夹(位于“Live Demos”根目录应用程序目录下)的* .mdf文件中。我之前尝试将* .mdf文件作为实际数据库附加到“Databases”文件夹下(在SSMSE对象资源管理器树中),但后来删除了它们。

Web应用程序“Live Demos”根文件夹(以及嵌套文件夹/文件)为以下用户分配了所有权限:
- IIS APPPOOL \ Telerik(“Telerik”是IIS 7中此站点的应用程序池的名称)
- IUSR
- 网络服务

为我自己做一个关于这个SQLExpress主数据库查询的说明:

SELECT * FROM sys.dm_os_child_instances

还尝试了* .mdf&amp;的不同组合。 * .ldf权限,同时还更改SQL Server(SQLExpress)Windows 7服务(控制面板&gt;管理工具&gt;服务)上的用户..并在进行这些更改后重新启动服务。

enter image description here

要重现:

下载适用于ASP.NET AJAX的Telerik Rad Controls。设置我在Program Files \ Telerik下的“Live Demos”文件夹中提到的permimssions,将Web应用程序的.NET版本更改为.NET 3.5,使用该文件夹中的普通web.config文件切换出他们的3.5 web.config文件。您必须使用Visual Studio 2010,但我在Visual Studio 2008中运行它(由于我们的公司尚未在VS2010上,因此我做了一些小工作)。同时将正确的Bin35组件切换到“Live Demos”文件夹Bin文件夹中。编译解决方案。创建一个IIS 7网站。添加Windows身份验证。启用匿名和Windows身份验证..所有其他人都被禁用。将应用程序池设置为使用Classic和32位。

然后导航到此URL并单击“First Look”图像。

http://localhost/combobox/examples/overview/defaultcs.aspx

====================

如果要求,将提供更多证据。

2 个答案:

答案 0 :(得分:2)

您正在使用带有trusted authentication = true的连接字符串。这意味着连接使用调用进程的安全上下文。

当您使用开发服务器运行时,您正在登录用户的安全上下文中运行,因此每件事情都可以正常工作。

在IIS中运行时,您处于应用程序池进程的安全上下文中,即NETWORK SERVICE,它没有用户配置文件,因此崩溃。

您可以通过以下方式解决此问题:

  • 将应用程序池的标识更改为可访问数据库的普通用户
  • 使用带有用户名和密码的连接字符串

答案 1 :(得分:0)

IIS不会加载Windows用户配置文件,但某些应用程序可能会利用它来存储临时数据。 SQL Express是执行此操作的应用程序的示例。但是,必须创建用户配置文件以将临时数据存储在配置文件目录或注册表配置单元中。网络服务帐户的用户配置文件由系统创建,始终可用。但是,通过切换到唯一的应用程序池标识,系统不会创建任何用户配置文件。只有标准应用程序池(DefaultAppPool和Classic .NET AppPool)在磁盘上具有用户配置文件。如果管理员创建新的应用程序池,则不会创建用户配置文件。

但是,如果需要,可以通过将LoadUserProfile属性设置为&#34; true&#34;来配置IIS应用程序池以加载用户配置文件。

https://docs.microsoft.com/en-us/iis/manage/configuring-security/application-pool-identities