执行exec sp_change_users_login 'REPORT' 列出当前数据库的孤立用户
结果:...
050801 0xABFAC315ECB8F34F8C4FECE3E8E36F72
051025 0xF108CF3A9E9BB44CB9D23617BDBB5407
051161 0xE5CAB2935CF19541835B0E07CB4B4A8C
060101 0xD3DA6B3497EDAA4CB21F4EE823B516DA
060227 0xE7FA28BF6BC89C4C8B7BBB0EF68DC610
060303 0xD8227FFE86C2A04F97E053B1779FC603
060314 0x84012AB2BF93BC499C7598D919CB2F5E
060316 0x884B2C31FACA8E489A72DB5F7DF5B050
...第二个语句:
exec sp_change_users_login 'AUTO_FIX','060303' 可以自动将用户名所对应的同名登录添加到syslogins中
报错:
消息 15600,级别 15,状态 1,过程 sp_change_users_login,第 207 行
为过程 'sys.sp_change_users_login' 指定的参数或选项无效。
第三个语句:将用户名映射为指定的登录名
使用Use navision_gulf
go
sp_change_users_login 'update_one', '060303', '060303'
或exec sp_change_users_login 'UPDATE_ONE','060303','060303'报错:
[color=#FF0000]消息 15291,级别 16,状态 1,过程 sp_change_users_login,第 131 行
正在终止此过程。缺少 Login 名称 '060303' 或该名称无效。[/color]
结果:...
050801 0xABFAC315ECB8F34F8C4FECE3E8E36F72
051025 0xF108CF3A9E9BB44CB9D23617BDBB5407
051161 0xE5CAB2935CF19541835B0E07CB4B4A8C
060101 0xD3DA6B3497EDAA4CB21F4EE823B516DA
060227 0xE7FA28BF6BC89C4C8B7BBB0EF68DC610
060303 0xD8227FFE86C2A04F97E053B1779FC603
060314 0x84012AB2BF93BC499C7598D919CB2F5E
060316 0x884B2C31FACA8E489A72DB5F7DF5B050
...第二个语句:
exec sp_change_users_login 'AUTO_FIX','060303' 可以自动将用户名所对应的同名登录添加到syslogins中
报错:
消息 15600,级别 15,状态 1,过程 sp_change_users_login,第 207 行
为过程 'sys.sp_change_users_login' 指定的参数或选项无效。
第三个语句:将用户名映射为指定的登录名
使用Use navision_gulf
go
sp_change_users_login 'update_one', '060303', '060303'
或exec sp_change_users_login 'UPDATE_ONE','060303','060303'报错:
[color=#FF0000]消息 15291,级别 16,状态 1,过程 sp_change_users_login,第 131 行
正在终止此过程。缺少 Login 名称 '060303' 或该名称无效。[/color]
----提示很明确,try
将数据库用户映射到新的 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
0)关于User和Login
use Test_Shen
go
create table #temp1(idx int identity,UserName sysname,UserSid varbinary(85),flag int default(0))
insert #temp1(UserName,UserSid) exec sp_change_users_login 'report'
-- produces a report of the users in the current database and their security identifiers (SIDs).
declare @i int
declare @j int
declare @UserName sysname
declare @s varchar(8000)
select @i=min(idx),@j=max(idx) from #temp1
while @i<=@j
begin
select @UserName=UserName from #temp1 where idx=@i
if exists (select * from master.sys.syslogins where name=@UserName)
begin
update #temp1 set flag=1 where idx=@i
set @s='sp_change_users_login ''Update_One'','''+@UserName+''','''+@UserName+''''
print (@s)
exec (@s)
end
set @i=@i+1
end
select * from #temp1
drop table #temp1
-- AUTO_FIX 需要指定密码
exec sp_change_users_login 'AUTO_FIX','060303',null,'password';-- UPDATE_ONE 需要登陆帐户事先存在
create login [060303] with password='password';
go
exec sp_change_users_login 'UPDATE_ONE','060303','060303';
go
成功步骤:
一.
create login [060303] with password='password02';设定密码
二.
-- AUTO_FIX 需要指定密码
exec sp_change_users_login 'AUTO_FIX','060303',null,'password';
将修复用户 '060303' 的行,方法是将其登录名链接更新为某个已经存在的登录名。
通过更新用户,共修复了 1 个孤立用户。
通过添加新的登录名并更新用户,共修复了 0 个孤立用户。三.
exec sp_change_users_login 'UPDATE_ONE','080581','080581';
go
不过密码被换成了password2
要是可以延用以前的密码就好了
EXEC sp_change_users_login 'REPORT' --列出当前数据库的孤立用户1)--生成和User同名的Login并初始化密码
EXEC sp_change_users_login 'Auto_Fix', 'liang', NULL ,'2wsx3edc@$24';
GO2)--执行删除loginname
DROP LOGIN liang
GO3)--欲重用之前密码,可执行2) 再执行1)即可
EXEC sp_change_users_login 'Report'显示登录映射的当前用户的报告EXEC sp_addlogin 'NewMary'
goEXEC sp_change_users_login 'Update_One', 'Mary', 'NewMary'我的问题是换了电脑,缺少了login名,只有user名。呃 这样添加login,就等于重新加了个,原数据库的登陆密码就没有了。
看来只能这样了。
谢谢各位!