Gib*_*boK 412 c# asp.net iis-7 web-config
我有一个Web项目(C#Asp.Net,EF 4,MS SQL 2008和IIS 7),我需要在本地将它迁移到IIS 7(目前可以正常使用CASSINI).
在IIS的本地我Default Web Site有我的部署.我的部署和Default Web Site在池上的ASP.NET v4.0(查看设置图像)池目标框架4作为我的web项目.
访问该站点时,浏览器不会显示该页面,而是允许浏览器下载该页面.
我在本地IIS上运行其他项目,它们没有问题(但它们不使用实体框架).
使用事件记录器我看到如下错误:
Exception information:
Exception type: EntityException
Exception message: The underlying provider failed on Open.
at System.Data.EntityClient.EntityConnection.OpenStoreConnectionIf(Boolean openCondition, DbConnection storeConnectionToOpen, DbConnection originalConnection, String exceptionCode, String attemptedOperation, Boolean& closeStoreConnectionOnFailure)
Login failed for user 'IIS APPPOOL\ASP.NET v4.0'.
at System.Data.ProviderBase.DbConnectionPool.GetConnection(DbConnection owningObject)
at System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection)
at System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory)
at System.Data.SqlClient.SqlConnection.Open()
at System.Data.EntityClient.EntityConnection.OpenStoreConnectionIf(Boolean openCondition, DbConnection storeConnectionToOpen, DbConnection originalConnection, String exceptionCode, String attemptedOperation, Boolean& closeStoreConnectionOnFailure)
Run Code Online (Sandbox Code Playgroud)
更新:您可以在此问题的资源中读取必须在MS SQL 2008上手动授予权限,如他的答案中的arift解释.使用IIS 7.5和MS SQL 2008 R2,不需要手动设置权限.
Jef*_*ata 569
看起来它没有尝试打开与SQL Server的连接.
您需要为SQL Server添加登录名IIS APPPOOL\ASP.NET v4.0并为数据库授予权限.
在SSMS中,在服务器下,展开"安全性",然后右键单击"登录"并选择"新建登录...".
在"新建登录"对话框中,输入应用程序池作为登录名,然后单击"确定".

然后,您可以右键单击应用程序池的登录名,选择"属性",然后选择"用户映射".检查相应的数据库和相应的角色.我想你可以只选择db_datareader和db_datawriter,但我觉得你还是需要授予权限,如果你通过EF做到这一点,以执行存储过程.您可以在此处查看角色的详细信息.
The*_*hea 333
您可以从IIS7 - >应用程序池 - >高级设置更改ApplicationPoolIdentity.

在ApplicationPoolIdentity下,您将找到本地系统.这将使您的应用程序运行NT AUTHORITY\SYSTEM,默认情况下是数据库的现有登录.
编辑:在应用此建议之前,您应该注意并理解安全隐患.
JGi*_*tin 28
确保你有......
Trusted_Connection=false;
Run Code Online (Sandbox Code Playgroud)
在您的连接字符串中
Dev*_*evT 23
我使用sql解决了这个问题,如下图所示.
右键单击db-> properties - > permission - > View Server权限 - >,然后选择IIS APPPOOL\ASP.NET v4.0并授予权限.

Rol*_*n C 17
运行这个sql脚本
IF NOT EXISTS (SELECT name FROM sys.server_principals WHERE name = 'IIS APPPOOL\DefaultAppPool')
BEGIN
CREATE LOGIN [IIS APPPOOL\DefaultAppPool]
FROM WINDOWS WITH DEFAULT_DATABASE=[master],
DEFAULT_LANGUAGE=[us_english]
END
GO
CREATE USER [WebDatabaseUser]
FOR LOGIN [IIS APPPOOL\DefaultAppPool]
GO
EXEC sp_addrolemember 'db_owner', 'WebDatabaseUser'
GO
Run Code Online (Sandbox Code Playgroud)
spi*_*man 10
如果在您指定的连接字符串中:
User ID=xxx;Password=yyy
Run Code Online (Sandbox Code Playgroud)
但在连接字符串中有:
Trusted_Connection=true;
Run Code Online (Sandbox Code Playgroud)
SQL Server将使用Windows身份验证,因此将忽略和覆盖您的连接值(IIS将使用Identity用户配置文件中指定的Windows帐户). 更多信息在这里
如果在连接字符串中存在以下情况,则同样适用:
Integrated Security = true;
Run Code Online (Sandbox Code Playgroud)
要么
Integrated Security = SSPI;
Run Code Online (Sandbox Code Playgroud)
因为Windows身份验证将用于连接到数据库服务器. 更多信息在这里
zar*_*zar 10
我必须在 SQL Server 中创建一个用户“IIS APPPOOL\DefaultAppPool”,如下所示。安全 > 登录 > 右键单击并按“新登录”。您只需输入屏幕中红色显示的用户名。
然后进入新用户属性,检查该用户将访问的数据库(下面用蓝色标记)并选择db_owner。我必须选择,因为虽然连接正常,但如果未选择此选项,后续的 SELECT 查询将无法访问。
这两个人应该做。基本上,您正在为数据库创建新的用户所有者,以便它具有完全访问权限。
你不需要重新启动 SQL Server 或其他任何东西,应该可以工作。
我讨厌ApplicationPoolIdentity.我总是将Windows用户帐户设置为AppPools上的帐户.
正如adrift所说,它听起来像是一个数据库安全问题.因此,创建一个NT用户帐户,将其分配给ASP.NET v4.0 AppPool,然后将其权限授予网站文件夹和SQL中的相关表.
如果您使用的是Windows身份验证,并且未在连接字符串中提及任何用户名密码,则首先需要清除:
通过localhost运行代码时会发生什么:当您从localhost运行wcf测试客户端时,它将能够与本地调试模式应用程序通过您的帐户服务调用数据库进行通信.因此,它可以访问数据库,因为devenv.exe在您的用户帐户下运行.
但是当您在IIS中部署Web服务时.现在了解此服务是在不在您帐户下的IIS下运行的.因此,您需要为IIS服务分配访问权限以访问sql server以进行Windows身份验证.在这里,由于访问权限问题和用户______登录失败,您的Web服务将无法与SQL服务器通信(此处您的用户将来)
因此,如果您使用Windows身份验证连接数据库,则只需更改IIS应用程序池设置即可.您需要将IIS应用程序池的标识更改为本地系统.
以下是Windows身份验证WCF的步骤:•打开IIS(Windows + R(运行),然后键入inetmgr,然后单击"确定")•在"连接"下双击您的PC名称•单击"应用程序池"•选择您的应用程序池(DefaultAppPool)•然后在右键单击"高级设置"上的操作:•转到"流程模型"部分,然后单击"身份".•现在选择LocalSystem.
现在打开你的sql server管理工作室:打开run->然后键入ssms然后在ssms中按ok,使用你的windows身份验证帐户登录.打开安全选项卡展开登录选项卡,然后您就可以查看您的帐户.
现在打开您帐户的属性转到userMapping,然后选择要连接的数据库,然后检查要用于所选数据库的角色成员资格服务,单击确定.(对于网络服务,即Intranet用户,您还需要为NT AUTHORITY\SYSTEM用户配置上述设置)
添加Trusted_Connection = True; 连接字符串中的属性.保存并部署Web服务.重启应用池.
您现在可以连接数据库了.
小智 6
1_in SqlServer Security=>Login=>NT AUTHORITY\SYSTEM=>RightClick=>Property=>UserMaping=>Select YourDatabse=>Public&&Owner Select=>OK 2_In IIs Application Pools DefaultAppPool=>Advance Setting=>Identity=>LocalSystem=>Ok
| 归档时间: |
|
| 查看次数: |
383885 次 |
| 最近记录: |