无法打开用户默认数据库。登录失败。 SQL 2005

时间:2008-10-07 00:59:36

标签: sql-server-2005 sql-server-2000

我已经带了一份数据库回家的副本,所以我可以做一些测试。但是,当我尝试运行存储过程时,我得到无法打开用户默认数据库。登录失败..

我已经检查并检查并检查了我可以在数据库中打开表登录到sql management studio并访问默认以及其他数据库的任何想法吗?

可能是一个腐败的用户,它是从工作中的sql 2000到家里的2005年

9 个答案:

答案 0 :(得分:3)

编辑:我的是从2005年到2005年。不确定这是否适用于您的情况......

我有类似的问题。对我来说,当我分离或创建备份然后重新创建数据库时,它将失去与用户的连接。我一直在使用的用户仍然在Login下,但它无法登录。

就我而言,我可以通过删除数据库下的用户登录 - >安全 - >用户,而不是root sql server用户列表中的用户。

然后转到root用户列表并重新分配数据库映射或创建用户(如果不存在)。

希望这有帮助。

答案 1 :(得分:2)

这是在黑暗中拍摄的,所以请原谅我,如果它只是浪费你的时间。

另一张海报提到给定用户拥有系统的id和任何给定数据库的id。这可以通过比较master.sys.syslogins和dbname.sys.users之间的sid来证明相同的登录/用户名。如果从具有自己的主数据库副本的另一个sql server恢复备份,则sids将不匹配。

Sql Server 2005不允许直接编辑系统表而不会有太多痛苦。为了帮助解决这些不匹配问题,他们添加了一个存储过程来帮助您解决这些问题:

USE dbName GO

sp_change_users_login @ Action ='Report'

这将显示用户具有dbName.sys.users条目的内容,但没有master.sys.syslogins条目 - 或两者中存在名称的位置,但不同于sids。

如果它显示您的用户不同步,则该过程还具有更改链接的模式:

USE dbName 走 sp_change_users_login'Update_One','userNameInDbUsers','UserNameInLogins'

如果sid不匹配不是你的问题,我也看到了Sql Server 2005的非常棘手的东西.gui特别错误。要修复这样的问题,我必须实际删除syslogins条目(通过gui或DROP LOGIN命令)

sp_change_users_login:http://msdn.microsoft.com/en-us/library/ms174378(SQL.90).aspx

删除登录语法:http://msdn.microsoft.com/en-us/library/ms188012(SQL.90).aspx

答案 2 :(得分:2)

我遇到了同样的问题,我用以下方法解决了这个问题:

C:\> sqlcmd -E -d master
1> ALTER LOGIN ***** WITH DEFAULT_DATABASE=master
2> GO

*****是您的用户名。

(如果您使用的是域名用户名:[*****]

修改

*****可能是:

  • username如果用户是本地的
  • [username]如果用户属于实际域
  • [domain\username]如果用户属于另一个域(未测试)

答案 3 :(得分:1)

我将8个数据库从SQL Server 2000移动到SQL Server 2005并移动到整个不同的计算机上。我通常想知道存储过程正在做什么,所以我挖了一点,发现实际的命令是 ALTER USER

这是其他人一直在说的。在SQL Server 2005中分离和重新附加数据库时,用户会被取消关联。我发现这种行为最令人讨厌,因为我在SQL Server 2000中没有看到这种行为。

解决此问题的T-SQL如下所示:

USE AdventureWorks;
ALTER USER Mary5 WITH NAME = Mary51;
GO

这篇MSDN文章更多地讨论了这个问题:

http://msdn.microsoft.com/en-us/library/ms176060.aspx

答案 4 :(得分:1)

我刚刚解决了这个问题。我的默认数据库是AdventureWorks2008,因此作为管理员,我最终从服务器上删除了我的登录信息。然后运行以下命令重新创建我的用户

CREATE LOGIN [NT\mylogin] FROM WINDOWS WITH DEFAULT_DATABASE=[Master], DEFAULT_LANGUAGE=[us_english]
GO

答案 5 :(得分:0)

我的理解是登录存储在服务器中,而用户是指向数据库的登录(如果我错了,请纠正我)。

因此,您无法通过分离/附加数据库来移动登录,解决方案是创建数据库用户将(有效)登录连接到复制的数据库。

答案 6 :(得分:0)

如前所述,在移动过程中,到该用户帐户的登录映射可能已取消关联。或者,您移动它而不创建它期望的凭据,在这种情况下,您需要首先创建登录...

如果它是备份集并且您正在恢复它,则无法(我知道)通过管理UI将登录重新关联到用户。相反,你必须使用:

exec sp_change_users_login update_one, 'user', 'login'

让它恢复链接。

答案 7 :(得分:0)

ALTER LOGIN仅适用于SQL 2005及更高版本。

要在2000年更改用户的默认数据库,请使用

EXEC master.dbo.sp_defaultdb @loginname = N'BuiltIn\Administrators', @defdb = N'master'

当我将builtin \ administrators帐户设置为默认为应用程序数据库并且它以某种方式脱机并且我无法再登录时,我发现了这一点。使用Management Studio,您可以设置登录到master的选项,但必须先运行上述命令才能使其他操作正常工作,少了您的默认数据库不可用错误。

答案 8 :(得分:0)