在把远程服务器上的数据库备份还原到本地机后, 给一个"登录"关联一个"用户"时,发生错误:
“错误15023:当前数据库中已存在用户或角色”
原因及解决办法如下:
在迁移测试平台数据库的过程中发现,在两台服务器上运行的sql server 服务器之间迁移数据库的之后,会出现一个在源服务器上可以正常的用户在目的服务器上无法登录的情况。几经排常找到了原因与解决方法,因为这个问题与解决方法均比较复杂,所以把这个过程中的一些经验纪录下来与大家分享,希望能对大家以后的类似操作有所帮助。
首先介绍一下
sql server中“登录”与“用户”的区别,“登录”(Login)用于用户身份验证,存在于master库的syslogins表中,不随用户数据库的备份而备份,所以当换了机器或重装了系统就丢失了登录:Login而成了孤立用户。而数据库“用户”(User)帐户存在于用户数据库中,可跟随用户库的备份和还原。登录通过安全识别符 (SID) 与用户关联。将数据库恢复到其他服务器时,数据库中包含一组用户和权限,但可能没有相应的登录或者登录所关联的用户可能不是相同的用户。这种情况被称为存在“孤立用户”。 此时是不能通过新建登录或者是对同名登录授予对应数据库的“用户”权限来解决登录问题,因为SQL Server会报出“错误15023:当前数据库中已存在用户或角色”,为了解决这个问题,需要调用系统存储过程sp_change_users_login,具体用法如下:
Use Northwind
go
sp_change_users_login 'update_one', 'test', 'test'
其中Northwind为存在孤立用户的数据库,update_one是存储过程的参数,表示只处理一个用户,前一个test是“用户”,后一个test是“登录”,以上这个SQL表示将服务器登录“test”与 Northwind 数据库用户“test”重新连接起来。这样就可以正常使用数据库了。
PS:比如数据库中已经有了一个库:GJJ并且已经为了他建立了一个登录名并将其与GJJ库关联映射,重新恢复GJJ库之后,登录名GJJ不能访问。使用上述方法:在管理工作室中创建一个查询并执行如下语句:
USE GJJ;
GO
SP_CHANGE_USERS_LOGIN 'UPDATE_ONE','GJJ','GJJ'
或
sp_change_users_login 'Auto_Fix', 'gjj', null, 'gjj'
sp_change_user_login存储过程的作用是:Maps an existing database user to a SQL Server login,既然只是修改用户登录表,所以也可以直接使用标准SQL语句:ALTER USER来完成数据库用户到SQL SERVER登录的映射(微软鼓励后者)。
分享到:
相关推荐
《SQL Server 2008商业智能完美解决方案》介绍如何使用Microsoft SQL Server 2008开发商业智能(BI)解决方案。《SQL Server 2008商业智能完美解决方案》共分为4部分。第一部分阐述了商业智能基础、可视化商业智能结果...
"SQLSERVER 2008错误15023:当前数据库中已存在用户或角色错误的处理方法" SQL SERVER 2008 错误 15023 是一个常见的错误,发生在数据库恢复或迁移到其他服务器时,错误信息提示“用户、组或角色 '*' 在当前数据库...
本书全面深入地介绍了Microsoft SQL Server 2008中高级T-SQL查询、性能优化等方面的内容,以及SQL Server 2008新增加的一些特性。主要内容包括SQL的基础理论、查询优化、查询算法及复杂度,以及在使用子查询、表...
SQL Server 2008 商业智能完美解决方案(3/4) 资源共享、一律免费
在IT领域,尤其是在数据库操作与框架集成中,遇到异常错误是常见的挑战之一。本文将深入探讨标题和描述中提到的“com.microsoft.sqlserver.jdbc.SQLServerException: 只进结果集不支持请求的操作”这一异常,以及...
SQL Server 2008 登录问题解决方法 SQL Server 2008 是一个功能强大且广泛使用的关系数据库管理系统,但是在实际应用中,用户可能会遇到各种登录问题,例如错误 233 和 18456。这两种错误都可能会导致用户无法正常...
### SQL Server 2812错误处理 #### 一、问题背景 在SQL Server数据库管理过程中,用户可能会遇到“错误2812:未能找到存储过程'master.dbo.xp_fileexist'”的问题。该问题通常发生在尝试还原数据库时,其原因是系统...
SQL Server驱动包`sqljdbc4.jar`是微软官方提供的Java数据库连接器(JDBC),用于在Java应用程序中与Microsoft SQL Server进行通信。JDBC是Java编程语言中的一个标准API,它使得开发人员能够以标准化的方式访问各种...
在进行Windows 7系统上的SQL Server 2008安装过程中,用户可能会遇到一个特定的错误消息:“调用或 BeginInvoke 之前不能调用控件上已创建窗口句柄”。这一错误通常发生在通过图形用户界面(Graphical User Interface...
SQLserver代理已经启动了,服务里的SQLServerAgent响应服务也已经开启了 但是启动作业的时候还是提示“错误22022:SQLServerAgent当前未运行,因此,无法就本操作对其进行提示。” 有高人遇到过这个问题吗? 怎么...
"sql server 2008数据库转sql server 2005数据库" 本文将详细介绍四种将 SQL Server 2008 数据库转换为 SQL Server 2005 数据库的方法。这些方法都是通过实践和总结得出的,旨在帮助读者快速、可靠地将 SQL Server ...
当尝试连接到SQL Server 2008时,有时会遇到以下错误信息:“在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误。未找到或无法访问服务器。请验证实例名称是否正确并且SQL Server已配置为允许远程连接...
### 安装 SQL Server 2005 时提示 “SQL Server 服务无法启动”的解决方案 在安装 SQL Server 2005 的过程中遇到“SQL Server 服务无法启动”的问题时,可以采取以下几种方法来解决: #### 一、确保安装文件完整 ...
《SQL Server 2008商业智能完美解决方案》介绍如何使用Microsoft SQL Server 2008开发商业智能(BI)解决方案。《SQL Server 2008商业智能完美解决方案》共分为4部分。第一部分阐述了商业智能基础、可视化商业智能结果...
SQL Server 2008 微软 数据 平台 升级 方案
因此,"SQL Server 2008, 一键卸载工具"应运而生,旨在简化这一过程,提供自动化、便捷的卸载解决方案。 一键卸载工具通常包含了针对SQL Server 2008的所有卸载步骤,包括但不限于以下方面: 1. **识别安装实例**...
总之,SQL Server 2008是一个强大且功能丰富的数据库管理系统,提供了高效的数据存储、处理和分析能力,以及多种高可用性解决方案。无论是初学者还是经验丰富的数据库管理员,都能从中受益。在安装和使用过程中,...
Sql Server 2005 打开 Sql Server 2008 mdf 文件数据库转换是指将 Sql Server 2008 中的数据库文件(mdf 文件)转换为 Sql Server 2005 可以识别的格式,以便在 Sql Server 2005 中使用。这种转换过程需要使用 Sql ...