格力 發表於 2025-3-22 00:00:00

SQLServer恢复到其他服务器错误:15023(创建对于用户失败)

<p>背景: 最近在迁移SQLServer数据库2019时,新建用户成功后,做用户映射失败。 SQLServer 报错:用户、组或角色&#39;XXX&#39; 在当前数据库中已存在. 错误:15023.</p>
<p style="text-align:center"><img alt="" height="252" src="https://img.jbzj.com/file_images/article/202503/20253890032259.png" width="673" /></p>
<p>下面讲一下解决的方法。</p>
<blockquote><p>分析:&nbsp;&nbsp;&nbsp;</p>
<p>SQL Server中&ldquo;登录&rdquo;与&ldquo;用户&rdquo;的区别,&ldquo;登录&rdquo;用于用户身份验证,而数据库&ldquo;用户&rdquo;帐户用于数据库访问和权限验证。登录通过安全识别符 (SID) 与用户关联。</p>
<p>将数据库恢复到其他服务器时,数据库中包含一组用户和权限,但可能没有相应的登录或者登录所关联的用户可能不是相同的用户。这种情况被称为存在&ldquo;孤立用户&rdquo;。</p>
<p>此时是不能通过新建登录或者是对同名登录授予对应数据库的&ldquo;用户&rdquo;权限来解决登录问题,因为SQL Server会报出&ldquo;错误15023:当前数据库中已存在用户或角色&rdquo;</p></blockquote>
<p></p>
<p>简单理解:</p>
<p>数据库备份文件中已经包含了用户test,现在还原了数据库,然后发现现有数据库中没有test这个用户,想要新建一个test用户,作为该数据库的owner,便会出现这个问题。</p>
<p>可以理解为登录名和用户是两个不同的概念,虽然名称相同。在新建登录名的时候,如果不添加该数据库映射则不会报错。添加数据库映射相当于给该数据库添加一个同名用户。</p>
<p>但是已经存在了test这个用户了,所以此时会报错。</p>
<p>解决方法:</p>
<p>可以通过以下方法解决该问题。</p>
<p>1.新建一个test登录名,但是不要添加数据库映射。</p>
<p>2.使用脚本,将孤立用户test关联到登录名test上:</p>
<div class="jb51code"><pre>Use Northwind
Go
sp_change_users_login &#39;update_one&#39;, &#39;test&#39;, &#39;test&#39;</pre></div>
<p>其中Northwind为存在孤立用户的数据库,update_one是存储过程的参数,表示只处理一个用户,前一个test是&ldquo;用户&rdquo;,后一个test是&ldquo;登录&rdquo;,</p>
<p>以上这个SQL表示将服务器登录&ldquo;test&rdquo;与 Northwind 数据库用户&ldquo;test&rdquo;重新连接起来。这样就可以正常使用数据库了。<br />&nbsp;</p>
<p></p>
<p>到此这篇关于SQLServer错误:15023(创建对于用户失败)_数据库恢复到其他服务器的文章就介绍到这了,更多相关SQLServer用户&ldquo;xx&rdquo;的创建失败(Microsoft.SqlServer.Smo)内容请搜索琼殿技术社区以前的文章或继续浏览下面的相关文章希望大家以后多多支持琼殿技术社区!</p>
頁: [1]
查看完整版本: SQLServer恢复到其他服务器错误:15023(创建对于用户失败)