SQL创建用户对象失败,该怎么解决

SQL创建用户对象失败,该怎么解决,第1张

原因:

sql server中“登录”与“用户”的区别,“登录”用于用户身份验证,而数据库“用户”帐户用于数据库访问和权限验证。登录通过安全识别符 (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”重新连接起来。这样就可以正常使用数据库了。

产生错误的原因是:在您向目标服务器传输登录帐户和密码后,您的用户可能还无法访问数据库。登录帐户与用户是靠安全识别符 (SID) 关联在一起的;在您移动数据库后,如果 SID 不一致,SQL Server 可能会拒绝用户访问数据库。此问题称为孤立用户。如果您使用 SQL Server 2000 DTS 传输登录功能来传输登录帐户和密码,就可能会产生孤立用户。此外,被允许访问与源服务器处于不同域中的目标服务器的集成登录帐户,也会导致出现孤立用户。以下是解决办法:1.查找孤立用户。在目标服务器上打开查询分析器,然后在您移动的用户数据库中运行以下代码: exec sp_change_users_login 'Report',查找到后执行Uselk96160gosp_change_users_login'update_one','lk96160','lk96160'一般问题就会解决。MicrosoftSQL-DMO(ODBCSQLState:42000)Error15023:Userorrole'%s'alreadyexistsinthecurrentdatabase.或是登陆名对应该的用户改成了dbo,则在sa下执行一下以下代码:execsp_changedbowner'sa'然后再执行:Uselk96160go


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/sjk/9938801.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-03
下一篇 2023-05-03

发表评论

登录后才能评论

评论列表(0条)

保存