如何解决在运行 SQL Server 的服务器之间移动数据库时的权限问题

概要

本文描述如何映射标准登录和集成登录来解决在运行 SQL Server 的服务器之间移动数据库时的权限问题。

更多信息

当您将数据库从一个运行 SQL Server 的服务器移到另一个运行 SQL Server 的服务器时,master 数据库中登录的安全标识号 (SID) 与用户数据库中用户的 SID 可能不匹配。默认情况下,SQL Server 7.0、SQL Server 2000 和 SQL Server 2005 会提供 sp_change_users_login 系统存储过程来映射这些不匹配的用户。但是,sp_change_users_login 存储过程仅能用于映射标准的 SQL Server 登录,而且需要一次对一个用户执行这些映射。有关 sp_change_users_login 存储过程的更多信息,请参阅 SQL Server 7.0、SQL Server 2000 和 SQL Server 2005 联机丛书中的“sp_change_users_login”主题。
在 SQL Server 7.0 或更高版本中,您可以使用 SID 来维护 master 数据库中的登录和用户数据库中的用户之间的映射。此映射是维护用户数据库中登录的正确权限所必需的。如果丢失此映射,登录将发生权限问题,其中包括但不限于以下问题:

•如果新服务器上不存在 SQL Server 登录,而用户尝试登录,该用户可能会收到以下错误消息:

Server:Msg 18456, Level 16, State 1
Login failed for user '%ls'.

•如果新服务器上存在 SQL Server 登录,但 master 数据库中的 SID 与用户数据库中的 SID 不相同,则用户可以成功登录到 SQL Server;但是,当用户尝试访问该数据库时,可能会收到以下错误消息:

Server:Msg 916, Level 14, State 1, Line1
Server user '%.*ls' is not a valid user in database '%.*ls'.

注意:在 SQL Server 2005 中,用户可能会收到以下错误消息:

服务器用户“%s”不是数据库“%s”中的有效用户。请先将该用户帐户添加到数据库中。

有关 SQL Server 7.0 安全模型的更多信息,请参阅“Microsoft SQL Server 7.0 Security”(Microsoft SQL Server 7.0 安全性)白皮书。要查看此白皮书,请访问下面的 Microsoft 网站:

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnsql7/html/sql7security.asp

(http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnsql7/html/sql7security.asp)

有关 SQL Server 2000 安全模型的更多信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:

322712 (http://support.microsoft.com/kb/322712/) Microsoft SQL Server 2000 S322712 安全功能和最佳做法

要下载 Mapsids.exe 文件,请使用下面的下载链接:

Mapsids.exe
http://download.microsoft.com/download/sqlsvr2000/utility/5.0/win98me/en-us/Mapsids.exe

(http://download.microsoft.com/download/sqlsvr2000/utility/5.0/win98me/en-us/mapsids.exe)

限制

•如果 sysusers 表中有用户没有以计算机名或拥有对象的域名作为前缀,而应用程序中使用包含两个部分的名称 username.objectname 引用了这些对象,则应用程序可能会中断,因为当 sp_sidmap 存储过程在 sysxlogins 表中出现时,它会以计算机名或域名作为前缀重命名这些用户。要解决此问题,请在 sp_sidmap 存储过程完成后,将 sysusers 表中受影响的用户重命名为它们原来的名称,或者与您的主要支持提供商联系。

•本文未涉及别名。您必须手动管理别名。

•如果新的 SQL Server 服务器上不存在标准的 SQL Server 登录,则会添加密码为空的登录。因此,您可能需要更改这些登录的密码。

•如果用户是在用户数据库中创建的,而且该用户的名称不同于 sysxlogins 表中显示的名称,则无法知道该用户的相应登录。因此,在执行 sp_sidmap 存储过程之前:

1.将该用户拥有的所有对象转移到一个临时数据库。

2.删除该用户,添加具有正确名称的用户,然后再移回该用户的所有对象。

•如果用户不具有对应的登录,而且也没有以本地计算机名或域名作为前缀,您将收到有关该用户的一则消息。该消息指出,需要首先在 Windows 级别添加该用户,再将其作为登录添加到 SQL Server;然后,您必须要再次执行 sp_sidmap 存储过程。

•如果用户以域名或本地 Windows 服务器名作为前缀,但 sysxlogins 表中不存在相应的登录,该存储过程会尝试将其作为新登录添加到 SQL Server。如果该 Windows 用户不存在,则将在结果窗口中生成一条输出消息,然后在它首次添加该 Windows 用户后手动创建登录。

•如果 sysusers 表中的某一用户有多个登录,您将在结果文件中看到一则输出消息,它会列出具有相同用户名的所有登录。此时,您必须手动干预,以确保该用户仅对应于一个登录。
示例:如果 sysusers 表中有一个名称为“johndoe”的用户,而 sysxlogins 表中有名为诸如“Test\johndoe”和“Test2\johndoe”的登录,则当运行存储过程时,您将收到一条消息,指出其中一个用户具有多个登录,系统管理员必须从中选择一个。只有在这种情况下,您才必须运行本文提供的第二个存储过程 sp_prefix_sysusersname。另外,Readme.txt 文件中也详细介绍了这种情况。

映射标准登录和集成登录

当您将数据库从一个运行 SQL Server 的服务器移到另一个运行 SQL Server 的服务器后,请按照下列步骤操作,以尽量减少用户干预:

1.确保对于数据库的 sysusers 表中的每一个用户,master 数据库的 sysxlogins 表中都有一个登录。
注意:要添加标准 SQL Server 登录,请参阅 SQL Server 联机丛书中的“sp_addlogin”主题。要添加集成的 SQL Server 登录,请参阅 SQL Server 联机丛书中的“sp_grantlogin”主题。

2.下载 MapSids.exe 文件,然后解压缩 Sp_sidmap.sql 和 Readme.txt 文件。

3.以系统管理员身份登录到运行 SQL Server 的服务器,然后在用户数据库中运行 Sp_sidmap.sql 文件。运行 Sp_sidmap.sql 文件会创建两个存储过程:sp_sidmapsp_prefix_sysusersname

4.确保除了运行这些存储过程的用户之外,没有其他任何用户访问该数据库。

5.确保“查询分析器”窗口以文本格式(而不是网格格式)显示结果。为此,请按 Ctrl^T 键,或者单击查询,然后单击“文本显示结果”。这是非常重要的,它使您可以在一个窗口中查看结果和信息性消息,并将输出保存到文本文件中。稍后可能需要使用该文件来解析某些映射。

6.由于您无法验证参数是否已正确传递,因此请确保将参数正确地传递到 sp_sidmap 存储过程:

EXEC sp_SidMap @old_domain = old_domain_name,
@new_domain = new_domain_name,
@old_server = old_server_name,
@new_server = new_server_name

适当地替换新旧域名和服务器名的值。

7.将结果保存在一个文件中,然后按照 Readme.txt 文件中提供的指导操作。
注意:当您运行这些存储过程时,数据库中唯一变化的表是 sysusers 表。如果您需要返回到开始时的状态,请从备份中还原数据库或者重新附加数据库。

参考

有关更多信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:

274188 (http://support.microsoft.com/kb/274188/) PRB:联机丛书中的“孤立用户疑难解答”主题不完整

246133 (http://support.microsoft.com/kb/246133/) 如何在 SQL Server 实例之间传输登录和密码

168001 (http://support.microsoft.com/kb/168001/) 还原数据库后数据库上的用户登录和权限可能不正确

298897 (http://support.microsoft.com/kb/298897/) 示例:Mapsids.exe 有助于在移动数据库时在用户数据库和 master 数据库之间映射 SID

from: http://support.microsoft.com/kb/240872/

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


本篇内容主要讲解“sqlalchemy的常用数据类型怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“sqlalche...
今天小编给大家分享一下sqlServer实现分页查询的方式有哪些的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家
这篇文章主要介绍“sqlmap之osshell怎么使用”,在日常操作中,相信很多人在sqlmap之osshell怎么使用问题上存在疑惑,小编查阅了各式资料,整理出
本篇内容介绍了“SQL注入的知识点有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧...
1. mssql权限sa权限:数据库操作,文件管理,命令执行,注册表读取等system。是mssql的最高权限db权限:文件管理,数据库操作等 users-administratorspublic权限:数据库操作 guest-users2、sql server注入执行命令查
sql执行计划如何查看?在SPL庞大的数据中我们不知道如何查看实际数据库中发生了什么事情,有必要定期进行查询优化和索引否则会影响我们后期的SQL的查询速度。那么针对这样的问题我们必须要知道SQL执行的计划,在本文中winwin7小编给大家分享下SQL执
SQL Server 是Microsoft 公司推出的关系型数据库管理系统。具有使用方便可伸缩性好与相关软件集成程度高等优点应用非常广泛。不过在使用中,我们会遇到非常多的错误,面对这么庞大的数据库环境,当然会有精确的错误代码的对照季,下面小编分享的
SQL Server本地账户无法登陆出现错误提示:error:40-Could not open a connenction to SQL Server的问题很常见,对于初学者来说可能不知道如何解决,一起来看看下面的解决方案。解决步骤如下:1、这种情况需要开启 SQL Server service
微软推出的SQL2008是一款非常好用的数据库软件,它稳定、功能强大,为众多企业提供了最佳的数据库解决方案,那么我们如何在Windows中安装它呢,一些朋友对SQL Server 2008的安装过程还不是很熟悉,下面就一起来看看SQL Server 2008详细安装图解...
本页概要如果您使用的是 SQL Server 2005备份和还原Sp_detach_db 和 Sp_attach_db 存储过程关于排序规则的说明导入和导出数据(在 SQL Server 数据库之间复
DBCC CHECKIDENT 检查指定表的当前标识值,如有必要,还对标识值进行更正。 语法 DBCC CHECKIDENT ( 'table_name' [ , { NORESEED
这里对 SQL Server 字符串函数进行分门别类地列出,便于查阅和记忆,相信大家都在其它方面有高深的编程基础,从字面上来说大家都知道这些函数的意义,就不对这些函数作过多的解释了,主要谈些经验,具体
查询及删除重复记录的方法 1、查找表(people)中多余的重复记录,重复记录是根据单个字段(peopleId)来判断select*frompeoplewherepeopleIdin(selectpe
微软发SQL Server 2008第二个CTP预览版from: http://news.csdn.net/n/20070807/107158.html8月7日消息,微软公司本周发布了SQL Serv
症状当您将数据库备份恢复到另一台服务器时,可能会遇到孤立用户的问题。SQL Server 联机丛书中的孤立用户疑难解答主题中没有讲述解决此问题的具体步骤。本文介绍了如何解决孤立用户问题。更多信息虽然术
当登录SQL Server 2005时可能碰到错误: 'No Process is on the Other End of the Pipe'。解决方法:(1)Open up SQL
概要本文描述如何映射标准登录和集成登录来解决在运行 SQL Server 的服务器之间移动数据库时的权限问题。更多信息当您将数据库从一个运行 SQL Server 的服务器移到另一个运行 SQL Se
----------------------------------------问题:该用户与可信的SQL SERVER 连接无关联使用sa用户或自建用户使用“SQL SERVER 身份认证”连接数据
更新日期: 2007 年 5 月 20 日 使用下表可以确定各种版本的 Microsoft SQL Server 2005 支持哪些功能。有关 SQL Server 2005 Enterprise E
当从Excel导入数据到Sql Sever中,可能会出现以下问题:
对于指定的缓冲区大小而言,源列的数据太大