SQL Server 数据库迁移孤立用户的解决方法

来源:互联网 发布:盐城大数据产业园详址 编辑:程序博客网 时间:2024/06/06 18:32

   如果用附加或者恢复备份的方法把数据库从一个电脑移动到另外一个电脑,数据库的用户和SQL的登录会冲突,登录没有办法和用户关联,造成孤立用户.
   为了解决这个问题,首先在目标SQL系统上建立与用户同名的登录,然后在数据库上执行下面指令把用户和登录关联


use 数据库
sp_change_users_login 'update_one', 'my_dbuser', 'my_sqllogin'
(数据库用户my_dbuser 和 "SQL Server登陆名"my_sqllogin 关联)


如果数据库预先设置了大量的用户权限,可以用这个方法方便的移动到新服务器上

 

更详细的用法,请看SQL的帮助:


将现有数据库用户映射到 SQL Server 登录名。

注意:
sp_change_users_login 不能用于 Windows 登录名。


Transact-SQL 语法约定

语法

sp_change_users_login [ @Action = ] 'action'
    [ , [ @UserNamePattern = ] 'user' ]
    [ , [ @LoginName = ] 'login' ]
        [ , [ @Password = ] 'password' ]


备注
注意:
sp_change_users_login 不能用于将数据库用户映射到 Windows 级主体、证书或非对称密钥。


使用 sp_change_users_login 将当前数据库中的数据库用户链接到 SQL Server 登录名。如果用户登录名已更改,则使用 sp_change_users_login 将用户链接到新的登录,而不会丢失用户的权限。新的 login 不能为 sa,而 user 不能为 dbo、guest 或 INFORMATION_SCHEMA 用户。

不能在用户定义的事务中执行 sp_change_users_login。

参数
[ @Action = ] 'action'
说明过程要执行的操作。action 的数据类型为 varchar(10)。action 可具有下列值之一。

值  说明
Auto_Fix
 将当前数据库的 sysusers 表中的用户条目链接到同名的 SQL Server 登录名。如果不存在同名的登录名,将会创建一个。检查 Auto_Fix 语句的结果,确认实际链接是否正确。在对安全性较为敏感的情况下,要避免使用 Auto_Fix。

如果使用 Auto_Fix 时登录名尚不存在,则必须指定 user 和 password,否则必须指定 user,但 password 将被忽略。login 必须为 NULL。user 必须是当前数据库中的有效用户。不能将另一个用户映射到该登录名。

Report
 列出当前数据库中未链接到任何登录名的用户以及相应的安全标识符 (SID)。user、login 和 password 必须为 NULL 或不指定。

Update_One
 将当前数据库中的指定 user 链接到现有 SQL Server login。必须指定 user 和 login。password 必须为 NULL 或不指定。


[ @UserNamePattern = ] 'user'
当前数据库中的用户名。user 的数据类型为 sysname,默认值为 NULL。

[ @LoginName = ] 'login'
SQL Server 登录的名称。login 的数据类型为 sysname,默认值为 NULL。

[ @Password = ] 'password'
通过指定 Auto_Fix 创建的新 SQL Server 登录名分配的密码。如果已存在匹配的登录名,则映射该用户名与登录名且忽略 password。如果不存在匹配的登录名,则 sp_change_users_login 创建新的 SQL Server 登录名并分配 password 作为新登录名的密码。password 的数据类型为 sysname,且不能为 NULL。

安全性 注意:
建议使用强密码。有关详细信息,请参阅强密码。

 

返回代码值
0(成功)或 1(失败)

结果集
列名  数据类型  说明
UserName
 sysname
 数据库用户名。

UserSID
 varbinary(85)
 用户的安全标识符。


权限
需要 db_owner 固定数据库角色的成员身份。只有 sysadmin 固定服务器角色的成员才能指定 Auto_Fix 选项。

示例
A. 显示登录映射的当前用户的报告
以下示例生成当前数据库中的用户及其安全标识符 (SID) 的报告。

 复制代码
EXEC sp_change_users_login 'Report';


B. 将数据库用户映射到新的 SQL Server 登录名
在以下示例中,数据库用户与新的 SQL Server 登录名关联。数据库用户 MB-Sales 首先映射到另一个登录名,然后重新映射到登录名 MaryB。

 复制代码
--Create the new login.
CREATE LOGIN MaryB WITH PASSWORD = '982734snfdHHkjj3';
GO
--Map database user MB-Sales to login MaryB.
USE AdventureWorks;
GO
EXEC sp_change_users_login 'Update_One', 'MB-Sales', 'MaryB';
GO


C. 自动将用户映射到登录名(必要时新建一个登录名)
以下示例显示如何使用 Auto_Fix 将现有用户映射到同名的登录名,以及如何在不存在登录名 Mary 的情况下,创建密码为 B3r12-3x$098f6 的 SQL Server 登录名 Mary。

 

 复制代码
USE AdventureWorks;
GO
EXEC sp_change_users_login 'Auto_Fix', 'Mary', NULL, 'B3r12-3x$098f6';
GO

 

 

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 上海小学借读一年级没有学籍怎么办 学历不高的我该怎么办 没学历的我该怎么办 物业达不到服务标准该怎么办 没有能力的人该怎么办 工作累了腰疼怎么办 机场来早了6小时怎么办 苏宁金融综合评分不足怎么办 苏宁金融秒拒怎么办 微盘账号忘记了怎么办 天府e税忘记密码怎么办 未成年在外面没地方住怎么办? 半框眼镜片掉了怎么办 选修差0.5个学分怎么办 脱产考博社保卡怎么办 幼儿上课不认真听讲怎么办 手机恢复的音频文件打不开怎么办 高考志愿填报不记得密码怎么办 经济纠纷案被告没有证据怎么办 管家婆管理员密码忘记了怎么办 人离职了公司扣发工资怎么办? 美国给我们断网怎么办 sci发表后发现错误怎么办 pos机按键是英文怎么办 蔚县县医院慢病本怎么办 知网下载的论文乱码怎么办 被期刊网骗了怎么办? 缝针缝到神经上怎么办 单位有个事特别多的领导怎么办 网上申请公司核名核不下来怎么办 老公把小三晒朋友圈老婆该怎么办 小三怀孕不愿意打掉怎么办 小三怀孕了引产怎么办 小三发现小四小三发现小四后怎么办 七十岁老人肺癌还有小三样怎么办 留学出国学历公认证怎么办 学历认证报告弄丢了怎么办 想读大专没考上怎么办 学信网身份证被注册了怎么办 学信网手机号换了密保忘了怎么办 学信网手机号改了密保忘了怎么办