是否有一种简便方法可以“自动修复” SQL Server 2008 R2数据库中的所有孤立用户?


16

使用以下方法将单个孤立的SQL用户固定为登录名是相当简单的:

EXEC sp_change_users_login'自动修复','用户'

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

Answers:



2

以下是可以完美完成工作的简单脚本-

USE DBNAME     ----- change db name for which you waant to fix orphan users issue

GO


declare @name varchar(150)

DECLARE cur CURSOR FOR
    select name from master..syslogins

Open cur

FETCH NEXT FROM cur into @name

WHILE @@FETCH_STATUS = 0
BEGIN

    EXEC sp_change_users_login 'AUTO_FIX', @name

    FETCH NEXT FROM cur into @name

END

CLOSE cur
DEALLOCATE cur

2

基于上述脚本,我们可以使用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

希望对你有帮助


好,我可以解释如下:1取在syslogins每个登录,2重新映射用户(范围是数据库级别)和登录(范围是例如电平)的每个数据库
PHU阮平阳

0

这对于使用dbatools命令Repair-DbaDbOrphanUser是一个很好的用例

首先,您可以识别孤立用户

Get-DbaDbOrphanUser -SqlInstance $sqlinstance

ComputerName : SQL01
InstanceName : MSSQLSERVER
SqlInstance  : SQL01
DatabaseName : SockFactoryApp
User         : SockFactoryApp_User

然后用解决

Repair-DbaDbOrphanUser -SqlInstance $sqlinstance

ComputerName : SQL01
InstanceName : MSSQLSERVER
SqlInstance  : SQL01
DatabaseName : SockFactoryApp
User         : SockFactoryApp_User
Status       : Success
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.