1

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

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

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

4

9 回答 9

3

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

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

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

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

希望这可以帮助。

于 2008-10-07T01:05:26.680 回答
2

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

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

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

使用 dbName 去

sp_change_users_login @Action='报告'

这将向您显示哪些用户有 dbName.sys.users 条目,但没有 master.sys.syslogins 条目 - 或者名称在两者中都存在,但因 sids 而异。

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

使用 dbName 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

于 2008-10-07T01:26:22.957 回答
2

我有同样的问题,我用以下方法解决了它:

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

你的用户名在哪里*****

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

编辑:

*****可能在哪里:

  • username如果用户是本地用户
  • [username]如果用户属于实际域
  • [domain\username]如果用户属于另一个域(未测试)
于 2011-08-02T11:13:28.950 回答
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

于 2008-10-07T02:41:16.457 回答
1

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

CREATE LOGIN [NT\mylogin] FROM WINDOWS WITH DEFAULT_DATABASE=[Master], DEFAULT_LANGUAGE=[us_english]
GO
于 2011-04-12T17:57:09.013 回答
0

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

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

于 2008-10-07T01:09:10.620 回答
0

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

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

exec sp_change_users_login update_one, 'user', 'login'

让它恢复链接。

于 2008-10-07T01:48:01.040 回答
0

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

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

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

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

于 2009-01-08T22:15:12.897 回答