查找SQLserver登录错误的来源

时间:2015-03-13 12:54:51

标签: sql-server error-handling asp-classic

我们有SQLserver2008,错误日志填满了这些行:

Login failed for user 'user1'. Reason: Failed to open the explicitly specified database. [CLIENT: xxx.xxx.xx.xxx]

我们在许多网络应用程序(经典asp)上使用user1很多地方。某处必须有一些错误的密码。所有的应用程序似乎都运行良好。我们每天都会收到数百条消息。

我们知道ip-of源计算机,但有数以千计的经典asp脚本。如何追踪导致登录错误的那个?

2 个答案:

答案 0 :(得分:1)

您的错误表示密码错误。它改为表示SQL登录指定了应该打开登录的数据库,或者连接字符串指定要打开的数据库。

但是,您尝试打开的数据库不存在,或者登录没有访问数据库的权限。

建议的诊断程序

您可以通过右键单击并查看其属性在管理工作室中打开“user1”吗?如果是这样,请在“常规”页面上查看是否指定了默认数据库。然后在“用户映射”页面上,确保登录具有对所述数据库的权限。

如果是,则连接字符串指定要打开的数据库,并且User1没有权限或数据库不存在。

要测试数据库是否存在而不检查每个数据库,您可以逐个通过数据库并给予user1 db_datareader权限,直到错误停止。 不要简单地为user1分配一个sysadmin角色来测试它,因为这是一个真正的安全危险。

如果通过向其他用户数据库提供db_datareader权限而无法使错误消失,则连接字符串将尝试打开不存在的数据库。

<强>预防

我鼓励您尽快消除此User1登录,并将其替换为精心设计的集成安全性。可以为IIS应用程序池分配域用户,并且可以为这些用户提供具有定制权限的SQL登录。

如果您不能这样做,请为每个具有定制权限的Web应用程序设置SQL登录,并逐个更改这些连接字符串。该项目可能很费力,但user1登录是一个严重的安全漏洞,特别是因为您此时无法控制其使用。

同时,应将经典ASP应用程序中的连接字符串移动到global.asa并在那里进行管理,以便每个应用程序都有一个连接字符串(或一组连接字符串),而不是单个ASP脚本包含1,000个冗余字符串(这听起来对我来说)。

不要试图说教,但这是一个问题,我看到所有时间。

答案 1 :(得分:0)

我看不出除了搜索所有使用user1的地方的所有文件之外还有其他任何方式比较线条(个人如果我有数千条,我会写一个程序来搜索文件夹和子文件夹并返回找到匹配项的整个字符串。由于它处于连接点,因此很难缩小到哪个脚本和使用同一用户的所有脚本都会产生相同的错误。

编辑:实际上,正如你知道密码应该是什么,你可以查看该行,如果它不包含正确的密码,那么它就会出错。

此致

利安