AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 394025
Accepted
Ropstah
Ropstah
Asked: 2012-05-31 08:05:01 +0800 CST2012-05-31 08:05:01 +0800 CST 2012-05-31 08:05:01 +0800 CST

将数据库移动到新服务器

  • 772

我正在将生产数据库的备份恢复到新服务器。新服务器还托管使用数据库的应用程序。因此,我想使用相同的用户/密码组合来连接到数据库。用户也包含在数据库备份中,所以我认为这应该可行。但是,该用户在新服务器上并不作为(数据库)用户存在。所以我创建了一个新的服务器用户,并试图将这个凭证映射到新恢复的数据库。但是,这失败了,因为user already exists在数据库中。

是否有可能(如果可以,请告诉我如何)将用户从数据库(独立于服务器)移动/复制到(数据库)服务器登录列表?

sql-server-2008 security credentials database-backup
  • 2 2 个回答
  • 91 Views

2 个回答

  • Voted
  1. Best Answer
    Peter Hahndorf
    2012-05-31T08:12:21+08:002012-05-31T08:12:21+08:00

    在 SQL-Server 2008 中,还原数据库的数据库用户和服务器登录名可能不同步,因为内部 ID 不匹配。要修复此运行:

    EXEC sp_change_users_login @Action=''Update_One'', @UserNamePattern='databaseusername', @LoginName = 'logonname';

    针对您恢复的数据库和每个用户/登录。

    在 SQL-Server 2012 中,有一个新选项可以独立于服务器登录使用数据库用户。

    • 2
  2. Darin Strait
    2012-05-31T09:23:01+08:002012-05-31T09:23:01+08:00

    我知道我迟到了,但这可能会对其他人有所帮助。

    登录在服务器级别。用户处于数据库级别。有一个 ID 值(称为 SID)将两者连接在一起。当您在新服务器上创建 SQL 登录时,SQL 会选择一个新的 SID 值。SID 选择算法的本质是您不会在两个不同的服务器上获得相同的值。当您从旧服务器还原数据库时,数据库中的 SID 值与服务器上的 SID 值不匹配。

    此时,您想使用 sp_change_users_login。

    但是,在你到达那个点之前,你可以避免很多麻烦,特别是如果你有一个登录日志要从旧服务器迁移到新服务器。查看 sp_help_revlogin。这是 Microsoft 支持的 proc。过程和文档位于此处和此处。(不同版本的 SQL Server 有不同版本的过程。还有一个名为“sp_hexadecimal”的辅助函数。)基本上,您需要在旧服务器上创建这些过程,然后运行它们。知识库文章有详细信息。

    sp_help_revlogin 的一大优势在于它生成了用户创建 DDL,该 DDL 保留了 SQL 登录的 ID 值和密码。这样,您只需运行 sp_help_revlogin,查看生成的 DDL 以找到您需要的用户,在新服务器上运行该代码,然后恢复数据库。那时,SID 值应该匹配,您将不需要 sp_change_users_login。

    另一种解决方法是使用集成(也称为“域”或“Windows”)安全性。使用 AD 登录时,SID 值是在您创建登录时从域中提取的。当您为该登录创建数据库用户时,该 SID 值将被放入数据库中。由于 SID 值只有一个来源,因此不会发生不匹配。当然,使用集成安全并不总是可行的。

    • 1

相关问题

  • 在 SQL Server 2008 上为 ASP.NET 应用程序设置登录名

  • SQL Server 2008 跟踪标志 4135

  • 远程连接到 LAN 内的 SQL 服务器

  • 远程连接 sql server 不工作,但如果防火墙禁用它呢?

  • 无法从 SQL Server 2008 备份数据库

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve