분리 된 단일 SQL 사용자를 로그인을 사용하여 다음과 같이 수정하는 것이 매우 간단합니다.
EXEC sp_change_users_login 'Auto_Fix', 'user'
나는 이것을 스크립트 할 수는 있지만 주어진 데이터베이스에서 모든 고아 사용자를 자동으로 수정하려고 시도하는 기존 저장 프로 시저가 있습니까?
분리 된 단일 SQL 사용자를 로그인을 사용하여 다음과 같이 수정하는 것이 매우 간단합니다.
EXEC sp_change_users_login 'Auto_Fix', 'user'
나는 이것을 스크립트 할 수는 있지만 주어진 데이터베이스에서 모든 고아 사용자를 자동으로 수정하려고 시도하는 기존 저장 프로 시저가 있습니까?
답변:
테드 크루거 ( Twitt Krueger) ( @ onpnt on twitter)는이 작업을 수행하는 훌륭한 스크립트를 작성했습니다. 로그인하지 않고 모든 사용자의 로그인을 추가하고 auto_fix를 실행합니다. 그는 Windows 로그인 수정을 포함하여 하나를 작성했습니다.
http://blogs.lessthandot.com/index.php/DataMgmt/DBAdmin/fixing- 분리 된-데이터베이스-사용자
물론 먼저 테스트하거나 감사를 수행하려는 경우 작업 줄을 주석 처리 EXEC하고 결과를 인쇄하면됩니다.
다음은 작업을 완벽하게 수행하는 간단한 스크립트입니다.
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
위 스크립트를 기반으로 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
그것이 도움이되기를 바랍니다.
이것은 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