0

我有一个连接到数据库的应用程序,从用户表中检索用户名并将其与检索到的用户名匹配System.Security.Principal.WindowsIdentity.GetCurrent.Name

在我的本地主机上,一切正常。数据库存在于开发服务器上,但应用程序位于我的本地主机上。我所有的授权和身份验证技术都运行顺利。

但是,当我将应用程序发布到开发服务器时,我遇到了以下错误。

Cannot open database requested in login 'databaseName'. Login fails.
Login failed for user 'DevelopmentServerName\ASPNET'. 

我无法确定会导致这种情况的原因。任何帮助将不胜感激。

谢谢!

编辑:这是连接字符串!

  <add name="connectionStringName" connectionString="Initial Catalog=myDatabase;Data Source=DevelopmentServerName;Integrated Security=True"
     providerName="System.Data.SqlClient" />

另外,为了上下文。此身份验证需要获取用户的 Windows 用户名并将其与数据库中的用户名进行匹配。用户将具有内置到数据库中的 Computername\Myname 用户名(如果他们被授权使用程序的所需部分,即)。

再次感谢 :)

4

4 回答 4

3

您的应用程序似乎正在尝试连接到 ASPNET 帐户下的数据库,该帐户在开发服务器上的权限可能有限,而不是您自己登录(您的本地计算机实际上可能正在使用您的 Windows 身份)。我可以看到两个潜在的解决方案。

  1. 确保添加到 web.config 文件的 system.web 部分。

  2. 请与系统管理员和 SQL 管理员联系,确保 ASPNET 帐户具有连接数据库的适当权限,如果您的环境确实允许此帐户连接。

在您的问题中添加一些额外的代码,例如您的连接字符串也可能会有所帮助。

编辑:好的,您确实在使用 IntegratedSecurity,因此通常使用这种设置(使用模拟),您需要确保系统提示您添加用户名和密码以进行身份​​验证。

我们有类似的设置,为此,我们必须转到虚拟目录的 IIS 设置,选择目录安全选项卡,然后单击匿名访问和身份验证控制下的编辑按钮。

确保未选中匿名访问,您很可能需要为您的环境启用正确的身份验证。不幸的是,我们在这里仍然使用基本身份验证(明文),但集成的 Windows 身份验证也可能对您有用。这取决于您的环境。

我将此评论添加到主要帖子中,因为这似乎已经成功了......

我刚刚发现这篇文章可以帮助您获得正确的配置设置,以根据您的 IIS 环境处理您需要的内容。

于 2009-06-11T16:45:29.373 回答
0

看来您想要做的是冒充网页的调用者。您需要在 web.config 中添加一行来执行此操作:

<identity impersonate="true" />

请参阅这篇文章以获得解释。

于 2009-06-11T16:51:00.750 回答
0

答案可能在于您的连接字符串。我的猜测是您正在使用集成身份验证登录数据库。当它是您的机器时,这可以正常工作,因为应用程序正在使用您的凭据。当您发布到开发服务器时,您将使用 aspNet 用户并且没有正确的凭据来登录。我要么将此用户添加到您的数据库服务器,要么更改您的连接字符串以使用 SQL 身份验证。

于 2009-06-11T16:45:34.583 回答
0

它可能是阻止您的服务器看到您的数据库的防火墙设置。

它也可能与您的连接字符串有关。如果您在 web.config 文件中使用除了用户名/密码组合之外的任何内容,您可能需要额外的配置来说服数据库服务器让您连接。

于 2009-06-11T16:46:41.710 回答