Как администратор БД, я постоянно сталкиваюсь с этой проблемой.И графический интерфейс не очень помогает.У вашего SQL-сервера есть нужные вам учетные записи, в базе данных есть нужные учетные записи, но они не подключаются автоматически при восстановлении.
РЕАЛЬНЫЙ способ исправить это - STOP-USING-INDIVIDUAL-ACCOUNTS.Предоставлять доступ к БД можно только на основании того, что они являются членом группы активных каталогов.Тогда вы можете дать вопросы доступа к AD-группе.Кстати, хотя отдельные учетные записи не воссоединяются автоматически при восстановлении, групповой доступ делает.
Вот некоторый код, который я использую для решения той же проблемы.
create procedure [dbo].[proc_FarSyncLogins] @TargetDB nvarchar(128)= '' as
begin
SET NOCOUNT ON
declare @cmd varchar(1000)
begin try
drop table master.dbo.NeededUsers
end try
begin catch
print 'could not: drop table master.dbo.NeededUsers'
end catch
set @cmd='select name collate Latin1_General_CI_AS as name,is_disabled
into master.dbo.NeededUsers
from ['+@TargetDB+'].sys.sql_logins'
--print @cmd
exec(@cmd)
print 'logins that need to be enabled'
select * from master.dbo.NeededUsers
declare @UserName nvarchar(128)
declare SyncUsers1 cursor fast_forward for SELECT Name FROM master.dbo.NeededUsers
OPEN SyncUsers1
FETCH NEXT FROM SyncUsers1 INTO @UserName
WHILE @@FETCH_STATUS = 0
BEGIN
set @cmd = ''
if @TargetDB <> ''
begin
set @cmd=@cmd+'Use ['+@TargetDB+']; '+char(10)
end
begin try
SET @cmd = @cmd+'ALTER LOGIN ['+@UserName+'] ENABLE; '+char(10)
SET @cmd = @cmd+'exec sp_change_users_login @Action=''Auto_Fix'', @UserNamePattern ='''+@UserName+'''; '+char(10)
PRINT @cmd
EXEC(@cmd)
end try
begin catch
Print 'Failed :'+@cmd
end catch
FETCH NEXT FROM SyncUsers1 INTO @UserName
END
CLOSE SyncUsers1
DEALLOCATE SyncUsers1
end
Тогда просто
exec master.dbo.proc_FarSyncLogins '<yourDBName>';
Это определенно ХАКИ, вам нужно внимательно прочитать вывод, чтобы убедиться, что вы намеревались выполнить все эти действия.Но большую часть времени вы просто хотите восстановить все, что у вас было раньше.