2008-10-07 73 views
1

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

我已检查并检查和检查我可以在数据库登录到sql管理工作室打开表和访问默认以及其他数据库的任何想法?

可能是一个腐败的用户是从SQL 2000的工作,2005年在国内

回答

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

3

编辑:我的是从2005年到2005年。不知道这是否会为你的情况下工作...

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

在我的情况下,我能够通过删除用户在数据库 - >安全 - >用户,而不是用户这在根sql服务器用户列表中。

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

希望这会有所帮助。

+0

好的答案将适用于2000> 2005以及。 – Turnkey 2008-10-07 01:08:11

+0

甚至2000 - > 2000,所有用户都会在master数据库中获得与其关联的ID,您可能会看到一个用户连接到数据库,但是如果用户在主数据库中没有匹配的ID,则该帐户将失败登录。从数据库中删除用户,然后从服务器安全工作重新附加。 – Adam 2008-10-07 01:34:39

0

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

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

+0

你能再细说一下吗?我并不完全听从最后一句话。我认为你的解决方案可能会节省额外的步骤,我不得不重新映射用户。谢谢! – 2008-10-07 01:13:11

2

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

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

Sql Server 2005不允许直接编辑系统表而不用很痛苦。为了帮助了这些错误匹配,他们增加了一个存储过程来帮助你解决这些问题:

USE数据库名 GO

的sp_change_users_login @行动=“报告”

,会告诉你什么样的用户有一个dbName.sys.users条目,但不包含master.sys.syslogins一个 - 或者两者都存在名称,但sid不同。

如果它显示你的用户是不同步的,程序也有一个模式,以改变链接:

USE数据库名 GO 的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

0

正如前,提到登录映射到该用户帐户可能在移动过程中被解除关联。或者,您移动它时未创建预期的凭据,在这种情况下,您需要首先创建登录名...

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

exec sp_change_users_login update_one, 'user', 'login' 

让它恢复链接。

0

ALTER LOGIN工程于2005年的SQL。

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

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

我发现这个硬盘的方式,当我设置的内置\管理员帐户默认应用程序数据库和它在某种程度上已脱机和我无法再登录。使用Management Studio,您可以将选项设置为登录到主服务器,但您必须在任何其他操作都能正常工作之前运行上述命令,而获得默认数据库不可用错误的次数就会减少。

1

我只是解决了这个问题。我的默认数据库是AdventureWorks2008,所以作为管理员,我最终从服务器上删除了我的登录名。然后运行以下重建我的用户

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

我有同样的问题,我有固定它:

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

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

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

编辑:

*****可能是:

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