2

主要是想在下面回答我的问题#1,但如果有更多的知识,我们将不胜感激。

我在调查期间尝试使用这些资源,但没有成功:

http://social.msdn.microsoft.com/Forums/en/sqldatabaseengine/thread/f5eb164d-9774-4864-ae05-cac99740949b _ _ _本地应用程序数据路径。请确保用户在计算机上有本地用户配置文件。连接将被关闭。

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

问题

1.) 为什么在使用 IIS 7 运行 Telerik Rad Controls for ASP.NET AJAX“Live Demos”项目时会发生此错误(使用带有此连接字符串的 ASP.NET 开发服务器运行 Telerik Live Demos 工作正常)

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

2.) 在 IIS 7 中创建 SQL Server Express 实例与 ASP.NET 开发服务器和 SSMSE 有何不同

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

环境:

我没有通过 ASP.NET 开发服务器运行“实时演示”.NET 3.5 ASP.NET Web 应用程序(在您的系统托盘中弹出并在 Visual Studio 中单击播放后为您选择一个端口的功能)。这很好用!我在 IIS 7 上运行该网站。SQL Server Express 在控制面板 > 管理工具 > 服务 > 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" />

我试过设置“用户实例=假”,但这只会引发另一个错误:

数据库主服务器中的 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 斜体被其中一些字符破坏,所以我不得不删除该路径)

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

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

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

为自己记下这个 SQLExpress 主数据库查询:

选择 * FROM sys.dm_os_child_instances

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

在此处输入图像描述

重现:

下载用于 ASP.NET AJAX 的 Telerik Rad 控件。设置我在 Program Files\Telerik 下的“Live Demos”文件夹中提到的权限,将 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 身份验证..所有其他人都被禁用。将应用程序池设置为使用经典和 32 位。

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

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

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

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

4

2 回答 2

2

您正在使用可信身份验证 = true 的连接字符串。这意味着连接使用调用进程的安全上下文。

当您使用开发服务器运行时,您正在登录用户的安全上下文中运行,因此一切正常。

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

您可以通过以下任一方式修复它:

  • 将应用程序池的身份更改为可以访问数据库的普通用户
  • 使用带有用户名和密码的连接字符串
于 2011-09-09T21:21:53.720 回答
0

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

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

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

于 2018-03-22T13:49:14.493 回答