无法打开用户默认数据库
-
08-07-2019 - |
题
我拉了一个 ASPNETDB.MDF
使用 Forms 身份验证从 ASP 站点的服务器向我的本地计算机提交文件。我使用 ASP.NET 网站配置工具向数据库文件添加了一个新用户。我将 MDF 文件上传回服务器,现在每当我尝试以任何用户身份登录时都会出现以下异常:
Cannot open user default database. Login failed.
Login failed for user 'NT AUTHORITY\NETWORK SERVICE'
我一直在谷歌搜索并阅读了这个问题的所有其他解决方案,但没有找到任何有效的解决方案。
服务器上装有 SQL Server 2008,这就是我在本地计算机上使用 VS 2008 Professional 的情况。
我的连接字符串是(为了易读而添加换行符):
<add name="ASPNETDBConnectionString1"
connectionString="Data Source=.\SQLEXPRESS;
AttachDbFilename=|DataDirectory|\ASPNETDB.MDF;
Integrated Security=True;User Instance=True"
providerName="System.Data.SqlClient"
/>
我是 SQL Server 新手,所以我很确定我在某个地方搞砸了一些事情。
任何帮助是极大的赞赏。
解决方案
关于配置的所有关于谁或什么或为什么的问题......
可以从连接字符串推断出您的问题。这将在本地针对 sql express 工作,但不适用于服务器上的 sql 本身。
第一个线索是只有 SqlExpress 启用用户实例。在 Sql 上,您必须附加 mdf。
如果该连接字符串在 VS 2008 中可以在您的计算机上运行,则您已经安装了 SQL EXPRESS。如果该连接字符串在服务器上有效,则该服务器已安装 SQL EXPRESS。
如果服务器没有安装 Sql Express 并将其配置为允许用户实例(我希望它没有),则该连接字符串将导致您遇到登录失败异常。
我还想知道你的来/自副本。通常,即使是复制,活动 mdf 的访问也会被拒绝。
请确认客户端和服务器端的 Sql 版本,并尝试查找两个 web.config 文件的先前副本以比较连接字符串。
其他提示
我认为您的问题是您没有跟踪数据库登录和数据库用户之间的区别。登录可以访问SQL Server(一般来说)。数据库用户是已被授予对特定数据库的访问权限的登录名。当您完成后来回复制文件时,您可以使登录帐户(尤其是Windows帐户)的基础标识符无效。
我建议您使用SQL帐户登录SQL服务器(而不是Windows帐户)并将凭据放在web.config文件中。我发现这比Windows帐户登录更容易配置,使用和更改。设置登录后,只需确保它还具有用户对您要使用的服务器上的数据库的访问权限。你可能仍然会遇到传输问题(虽然它们不太可能),但修复它们要容易得多。
重要提示:其他人不同意 - 认为Windows帐户更安全 - 因此您可能希望自己了解这个问题!
您对问题的描述不完整或与错误不一致。您需要提供更多信息以获得更好的答案,但这是我的初步答案。
该错误表示您的应用程序正在使用SQL的集成身份验证。因此,查看连接字符串会有所帮助。它可能在某个地方说'SSPI'。这意味着应用程序容器正在运行的用户(NETWORK SERVICE)正在尝试连接到数据库,但它不能,因为它没有这样做的权限。
所以你要么改变连接字符串作为你所做的一部分,要么NETWORK SERVICE以前是数据库用户(我认为不是一个好主意)。
您的web.config中可能还有其他与安全相关的设置。您的应用似乎使用表单身份验证如果IIS设置为允许匿名访问,并且您的web.config设置为进行模拟,那么这也可能导致NETWORK SERVICE尝试连接到SQL。
应用程序应该如何连接?您是否有一个服务帐户(单个用户帐户),通过表单身份验证进行身份验证的所有用户都应该进行数据库操作?如果是这样,那么您需要更改数据库连接字符串以包含用户和密码。
要解决此问题,您需要检查连接字符串,web.config中的任何与form-auth相关的设置以及IIS中的安全设置。我认为这些与您添加用户的事实无关。
编辑: 所以你正在使用集成安全性,就像我怀疑的那样。这不适用于Forms Auth,因为当用户使用其用户ID对您的应用进行身份验证时,您的应用会使用集成的身份验证(即NETWORK SERVICE)对数据库进行身份验证。您需要一个数据库服务帐户imo,如果您没有更改连接字符串,我不知道它之前是如何工作的。
你能尝试改变这个吗? 应用程序池 - >高级设置 - &gt;过程模型 - &gt;身分 ?
我通过更改流程模型得到了同样的错误并修复了。