我尝试将我的其他数据库映射到用户,方法是转到
安全性>登录>右键单击someuser>属性>用户映射>选择数据库>设置为db_owner然后确定,但我继续收到错误说
用户,组或角色'someuser'已存在于当前数据库中.(Microsoft SQL Server,错误:15023)
导致错误的原因是什么,以及如何将该用户映射到数据库?
CR2*_*241 56
要修复用户和登录映射,您需要在SQL Server Management Studio中打开查询窗口.输入以下两行,并使用正确的用户名将myDB替换为数据库名称和myUser:
USE myDB
EXEC sp_change_users_login 'Auto_Fix', 'myUser'
Run Code Online (Sandbox Code Playgroud)
如果成功运行,您应该获得如下输出:
The row for user '****' will be fixed by updating its login link to a login already in existence.
The number of orphaned users fixed by updating users was 1.
The number of orphaned users fixed by adding new logins and then updating users was 0.**
Run Code Online (Sandbox Code Playgroud)
现在应该正确映射您的用户.
编辑:
解决/修复孤立用户的新方法:
在master数据库中,使用带有SID选项的CREATE LOGIN语句重新创建缺少的登录名,从而提供数据库用户的SID.
CREATE LOGIN <login_name>
WITH PASSWORD = '<use_a_strong_password_here>',
SID = <SID>;
Run Code Online (Sandbox Code Playgroud)
要将孤立用户映射到master中已存在的登录名,请在用户数据库中执行ALTER USER语句,并指定登录名.
ALTER USER <user_name> WITH Login = <login_name>;
Run Code Online (Sandbox Code Playgroud)
重新创建缺少的登录时,用户可以使用提供的密码访问数据库.然后,用户可以使用ALTER LOGIN语句更改登录帐户的密码.
ALTER LOGIN <login_name> WITH PASSWORD = '<enterStrongPasswordHere>';
Run Code Online (Sandbox Code Playgroud)
小智 5
如果您为数据库用户分配权限而不先将其映射到数据库,则会抛出您提到的错误.
您应该能够删除用户,将其映射到数据库,然后将用户分配给db_owner角色.
如果只有一个或两个用户,那么最简单的方法是从已还原的数据库中删除数据库用户,然后使用SSMS将数据库用户重新映射到服务器登录名。如果服务器登录名不存在,则只需创建它,即可映射用户。
选项2:如果要迁移大量用户,请使用sp_help_revlogin。sp_help_revlogin是Microsoft提供的存储过程,它将帮助将登录名从一台服务器迁移到另一台服务器,包括密码和SID。这是一篇关于SP_HELP_REVLOGIN的好文章:http ://www.databasejournal.com/features/mssql/article.php/2228611/Migrating-Logins-from-One-SQL-Server-to-Another.htm
代码补丁以帮助使用它:在查询分析器中运行以下T-SQL查询。这将在结果窗格中返回数据库中的所有现有用户。
USE YourDB
GO
EXEC sp_change_users_login 'Report'
GO
Run Code Online (Sandbox Code Playgroud)
在查询分析器中运行以下T-SQL查询,以将登录名与用户名相关联。如果Auto_Fix属性不存在,它将在SQL Server实例中创建用户。在以下示例中,“ ColdFusion”是用户名,“ cf”是密码。自动修复将当前数据库中sysusers表中的用户条目链接到sysxlogins中具有相同名称的登录名。
USE YourDB
GO
EXEC sp_change_users_login 'Auto_Fix', 'ColdFusion', NULL, 'cf'
GO
Run Code Online (Sandbox Code Playgroud)
在查询分析器中运行以下T-SQL查询,以将登录名与用户名相关联。'Update_One'链接当前数据库中的指定用户以登录。登录名必须已经存在。必须指定用户和登录名。密码必须为NULL或未指定
USE YourDB
GO
EXEC sp_change_users_login 'update_one', 'ColdFusion', 'ColdFusion'
GO
Run Code Online (Sandbox Code Playgroud)
2)如果登录帐户有权删除其他用户,请在查询分析器中按照T-SQL运行。这将删除用户。
USE YourDB
GO
EXEC sp_dropuser 'ColdFusion'
GO
Run Code Online (Sandbox Code Playgroud)
再次在数据库中创建相同的用户,没有任何错误。
| 归档时间: |
|
| 查看次数: |
47402 次 |
| 最近记录: |