0

我有一个与WCF/Entity Framework 类似的问题,当部署到 IIS 时,外部 SQL Server DB 不起作用,除了这是在 Windows 8 上并且数据库服务器不是远程的。它在同一台机器上,并且没有域。脚本的第一部分有效,但没有用户 IIS APPPOOL\ASP.NET 4.0 帐户。Windows 8 上有像 .NET 4.5 这样的应用程序池,它似乎很喜欢,但这仍然不起作用。我知道这是某种权限问题。任何人都可以帮助编写脚本或答案,这样可以吗?我必须能够使用 EF 创建 WCF 服务。谢谢。

我尝试了第一个主题的修改脚本:

USE [master]
GO
CREATE LOGIN [sgentile-hp\sgentile] FROM WINDOWS WITH DEFAULT_DATABASE=[master]
GO
USE [AdventureWorks2012]
GO
CREATE USER [sgentile-hp\sgentile] FOR LOGIN [sgentile-hp\sgentile]
GO
USE [AdventureWorks2012]
GO
EXEC sp_addrolemember N'db_datareader', N'sgentile-hp\sgentile'
GO
USE [AdventureWorks2012]
GO
EXEC sp_addrolemember N'db_datawriter', N'sgentile-hp\sgentile'
GO

这产生了:

Msg 15025, Level 16, State 2, Line 1
The server principal 'sgentile-hp\sgentile' already exists.
Msg 15063, Level 16, State 1, Line 1
The login already has an account under a different user name.
Msg 15410, Level 11, State 1, Procedure sp_addrolemember, Line 35
User or role 'sgentile-hp\sgentile' does not exist in this database.
Msg 15410, Level 11, State 1, Procedure sp_addrolemember, Line 35
User or role 'sgentile-hp\sgentile' does not exist in this database.

我还尝试创建一个经过 SQL 身份验证的用户并在连接字符串中使用其名称和密码,但仍然无法正常工作。必须有一种与用户一起运行应用程序池的方法。

4

2 回答 2

0

我会采取一些小步骤。首先,您应该在服务器登录名下找到登录名 [sgentile-hp\sgentile](为了清楚起见,在 Management Studio 中进入 Security/Logins 下,您应该在这里找到您的用户)。如果您找到它,“创建登录”语句运行良好。然后在 Management Studio 对象资源管理器中的 AdventureWorks2012 数据库下,进入 Security/Users 下,您应该在其中找到数据库用户[sgentile-hp\sgentile];删除它并运行语句:

USE [AdventureWorks2012]
GO
CREATE USER [sgentile-hp\sgentile] FOR LOGIN [sgentile-hp\sgentile]
GO

再次。这应该正确地将服务器登录名映射到数据库中的相应用户。然后,您可以为该用户分配 db_datareader 和 db_datawriter 数据库角色。在 IIS 端,使windows 用户[sgentile-hp\sgentile] 成为 IIS_IUSRS 本地组的成员,然后配置您的 IIS 应用程序池以便在该用户的上下文中启动;指定

Integrated Security=SSPI 

在您的服务的连接字符串中:现在在此应用程序池下运行的 WCF 服务应该能够正确连接到您的数据库。

希望这可以帮助

于 2013-03-29T16:26:41.607 回答
0

我通过添加 SQL Authenticated User 并将该名称和密码放入 web.config 来修复它。错误日志显示“用户 'Indigo' 登录失败。原因:必须更改帐户密码。” 我一改,就成功了!

于 2013-03-29T16:09:17.970 回答