SQL Server 2008 R2 数据库中是否有“Auto_Fix”所有孤立用户的速记方法?

Dan*_*ars 17 sql-server-2008-r2

使用以下方法将单个孤立的 SQL 用户修复为登录是相当直接的:

EXEC sp_change_users_login 'Auto_Fix', '用户'

我可以编写这个脚本,但是是否有一个现有的存储过程可以自动尝试修复给定数据库中的每个孤立用户?

Aar*_*and 15

Ted Krueger(推特上的@onpnt)写了一个很棒的脚本来完成这个任务。它为没有登录名的任何用户添加登录名并运行 auto_fix。他甚至写了一篇包括修复 Windows 登录的文章:

http://blogs.lessthandot.com/index.php/DataMgmt/DBAdmin/fixing-orphaned-database-users

当然,如果您想先对其进行测试(或仅执行审核),您可以注释掉操作行 ( EXEC) 并打印出结果。


小智 6

基于上面的脚本,我们可以像这样使用 sp_MSForeachdb 修复一个实例中的所有用户

declare @name varchar(150)
declare @query nvarchar (500)

DECLARE cur CURSOR FOR
    select name from master..syslogins

Open cur

FETCH NEXT FROM cur into @name

WHILE @@FETCH_STATUS = 0
BEGIN

set @query='USE [?]
IF ''?'' <> ''master'' AND ''?'' <> ''model'' AND ''?'' <> ''msdb'' AND ''?'' <> ''tempdb''
BEGIN   
exec sp_change_users_login ''Auto_Fix'', '''+ @name +'''
END'

EXEC master..sp_MSForeachdb @query

    FETCH NEXT FROM cur into @name

END

CLOSE cur
DEALLOCATE cur
Run Code Online (Sandbox Code Playgroud)

希望它会有所帮助