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 / 问题 / 115299
Accepted
sontek
sontek
Asked: 2010-02-22 23:36:17 +0800 CST2010-02-22 23:36:17 +0800 CST 2010-02-22 23:36:17 +0800 CST

将数据库用户还原到 SQL Server 2008 上的服务器登录

  • 772

我们有一个数据库备份,我们需要在没有数据库登录名的服务器上恢复...虽然所有用户都在数据库中,所以我们希望我们可以通过这种方式恢复它?

我玩过 sp_change_users_login 但它只适用于创建新用户或将孤立的数据库用户链接到现有服务器用户(SID 不匹配但用户名相同)。

我需要从存储在数据库中的用户信息创建服务器登录。

sql-server sql-server-2008 tsql
  • 6 6 个回答
  • 10216 Views

6 个回答

  • Voted
  1. Best Answer
    Jason Cumberland
    2010-02-23T07:32:19+08:002010-02-23T07:32:19+08:00

    如果您的目标是使用相同的密码重新创建登录名,那么您就是 SOL,这仅存储在主数据库的表/视图中。如果旧实例仍然存在,Brian 的建议将起作用,但如果没有,那么您将需要执行以下选项之一。

    • 重新创建登录
    • 使用 sp_change_users_login 将数据库用户映射到新登录名

    或者

    • 创建新的登录
    • 在恢复的数据库中为该登录分配权限

    请注意,这仅适用于 SQL 登录,如果您使用的是 Active Directory 登录,那么您只需将它们添加回服务器,它们将自动在恢复的数据库中拥有权限,因为密码和 SID 存储在 AD 中而不是在实例的主数据库中。

    • 5
  2. Brian Knight
    2010-02-23T05:39:17+08:002010-02-23T05:39:17+08:00

    我认为您没有足够的有关数据库中用户的信息来创建登录名。登录特定信息驻留在主数据库中,而数据库用户信息(包括映射)驻留在各个数据库中。

    如果原始服务器可用,则有一个名为 sp_rev_login 的系统存储过程,您可以从这篇Microsoft 支持文章中创建该过程,该过程将编写登录信息,包括正确的 SID。然后,您可以协调用户的登录。

    • 3
  3. Alex
    2011-12-01T07:26:47+08:002011-12-01T07:26:47+08:00

    我有一个不错的脚本,可用于从数据库用户创建登录,该脚本使用存储过程,您可以在以下 URL 中找到: How to script logins from user database in SQL Server 2005

    USE MyDatabaseName
    
    DECLARE @login nvarchar(50)
    
    DECLARE logins_cursor CURSOR FOR
    SELECT
        l.name
    FROM
        sys.database_principals u INNER  JOIN
        sys.server_principals l ON u.sid=l.sid
    
    OPEN logins_cursor
    FETCH NEXT FROM logins_cursor INTO @login
    
    WHILE @@FETCH_STATUS = 0
     BEGIN
        EXEC sp_help_revlogin  @login
        FETCH NEXT FROM logins_cursor INTO @login
     END
    
    CLOSE logins_cursor
    DEALLOCATE logins_cursor
    GO
    
    • 1
  4. Ashish
    2012-08-18T03:55:16+08:002012-08-18T03:55:16+08:00

    尝试

    EXEC sp_change_users_login 'Report'
    EXEC sp_change_users_login 'AUTO_FIX', '<user name>', NULL, '<password>'
    

    您从第一次查询中找到的一个用户名在哪里,并且是您要分配给用户的新密码。

    我无耻地重新发布了我刚刚在 - http://tim-stanley.com/post/how-to-restore-a-sql-user-after-a-sql-database-restore/上找到的信息,认为这会很有用为他人。

    • 1
  5. Ali
    2013-03-11T20:28:06+08:002013-03-11T20:28:06+08:00

    这个脚本在我的数据库中工作

    DECLARE @login nvarchar(50)
    
    DECLARE logins_cursor CURSOR FOR
    
    select master..syslogins.name as login_name
    
    from master..syslogins 
    WHERE master..syslogins.name<>'BUILTIN\Administrators'
    
    OPEN logins_cursor
    FETCH NEXT FROM logins_cursor INTO @login
    
    WHILE @@FETCH_STATUS = 0
     BEGIN
        EXEC dbo.sp_change_users_login 'Auto_Fix' ,  @login
        FETCH NEXT FROM logins_cursor INTO @login
     END
    
    CLOSE logins_cursor
    DEALLOCATE logins_cursor
    GO
    
    
    select master..syslogins.name as login_name,
      sysusers.name as user_name
    from master..syslogins LEFT OUTER JOIN sysusers
      on master..syslogins.suid = sysusers.suid
    

    --注意:在sql2000中使用-> master..syslogins.sid = sysusers.sid

    • 0
  6. Scotty.NET
    2013-12-22T17:54:07+08:002013-12-22T17:54:07+08:00

    创建登录名,然后使用:

    ALTER USER usr1 WITH LOGIN = login1;
    
    • 0

相关问题

  • sql server 连接字符串上的网络数据包大小以提高吞吐量

  • 基于 Microsoft 的服务器(IIS、MSSQL 等)上的病毒扫描应排除哪些内容?

  • SQL 洗衣清单

  • OPENROWSET、二进制文件、varchars 和 varbinaries

  • 聚集索引与非聚集索引?

Sidebar

Stats

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

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

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    从 IP 地址解析主机名

    • 8 个回答
  • Marko Smith

    如何按大小对 du -h 输出进行排序

    • 30 个回答
  • Marko Smith

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

    • 9 个回答
  • Marko Smith

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

    • 3 个回答
  • Marko Smith

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

    • 15 个回答
  • Martin Hope
    MikeN 在 Nginx 中,如何在维护子域的同时将所有 http 请求重写为 https? 2009-09-22 06:04:43 +0800 CST
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    0x89 bash中的双方括号和单方括号有什么区别? 2009-08-10 13:11:51 +0800 CST
  • Martin Hope
    Kyle Brandt IPv4 子网如何工作? 2009-08-05 06:05:31 +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