Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 CDC Error 916  [new]
Timid
Member

Откуда: Украина, Винница
Сообщений: 277
Добрый день.

Джоб очистки данных из CDC-таблиц cdc.DBname_cleanup падает с ошибкой

Message
Executed as user: MYDOMAIN\svcacc. The server principal "S-1-2-3-123456790." is not able to access the database "DBname" under the current security context. [SQLSTATE 08004] (Error 916).  NOTE: The step was retried the requested number of times (10) without succeeding.  The step failed.


Может кто-то сталкивался с подобной проблемой? Временно решаю так
DECLARE  @UserPrincipalName sysname = N'cdc'
		,@RolePrincipalName	sysname = N'db_owner'
;
IF NOT EXISTS 
			(		SELECT	1
					FROM	sys.database_role_members	AS db_r  WITH (NOLOCK)
			INNER	JOIN	sys.database_principals		AS db_pU WITH (NOLOCK)
							ON db_pU.principal_id = db_r.member_principal_id 
								   AND db_pU.name = @UserPrincipalName
								   AND db_pU.type = N'S'
			INNER	JOIN	sys.database_principals		AS db_pR WITH (NOLOCK)
							ON db_pR.principal_id = db_r.role_principal_id 
								   AND db_pR.name = @RolePrincipalName
    							   AND db_pR.type = N'R'
			)
	BEGIN
	 BEGIN TRY	
		EXEC		 sp_addrolemember @rolename	  =  @RolePrincipalName
									 ,@membername =  @UserPrincipalName
		PRINT 'DB_role [' + @RolePrincipalName + '] was assigned successfully to DB_user [' + @UserPrincipalName + ']' 
									 
	 END TRY
	 BEGIN CATCH
			SELECT   ErrorNum			=	ERROR_NUMBER()
					,ErrorSev			=	ERROR_SEVERITY()
					,ErrorSta			=	ERROR_STATE()
					,ErrorPro			=	ERROR_PROCEDURE()			
					,ErrorLin			=	ERROR_LINE()	
					,ErrorMes			=	ERROR_MESSAGE()	
	 END CATCH
	END
ELSE 			
	BEGIN
		PRINT	'DB_role [' + @RolePrincipalName + '] is already assigned to DB_user [' + @UserPrincipalName + ']' 
	END
;					



но со временем пользователь БД 'cdc' снова исчезает (???) из роли 'db_owner' и джоб начинает падать
24 май 11, 13:11    [10699619]     Ответить | Цитировать Сообщить модератору
 Re: CDC Error 916  [new]
Timid
Member

Откуда: Украина, Винница
Сообщений: 277
А по какой причине вообще может пропадать члентво в роли?
24 май 11, 17:51    [10701907]     Ответить | Цитировать Сообщить модератору
 Re: CDC Error 916  [new]
Timid
Member

Откуда: Украина, Винница
Сообщений: 277
Решения хватает на 24 часа максимум (

Что может выбрасывать пользователя из роли?
СтОит ли играться с трэйсом sys.database_role_members, чтоб узнать когда именно происходит выбрасывание?
26 май 11, 11:58    [10711918]     Ответить | Цитировать Сообщить модератору
 Re: CDC Error 916  [new]
Glory
Member

Откуда:
Сообщений: 104751
Timid

Что может выбрасывать пользователя из роли?

Команда удаления из роли
Команда удаления пользователя
26 май 11, 12:02    [10711947]     Ответить | Цитировать Сообщить модератору
 Re: CDC Error 916  [new]
Timid
Member

Откуда: Украина, Винница
Сообщений: 277
Glory
Timid
Что может выбрасывать пользователя из роли?

Команда удаления из роли
Команда удаления пользователя

Пользователь остаётся, значит запускается sp_droprolemember )
Но каким образом? К серверу никто кроме меня не имеет доступа, я эту процедуру сам не запускаю да и в коде у меня она нигде не встречается )
26 май 11, 12:17    [10712081]     Ответить | Цитировать Сообщить модератору
 Re: CDC Error 916  [new]
Glory
Member

Откуда:
Сообщений: 104751
Timid
Пользователь остаётся, значит запускается sp_droprolemember )

Остается - не значит, не пересоздается )
26 май 11, 12:18    [10712089]     Ответить | Цитировать Сообщить модератору
 Re: CDC Error 916  [new]
Timid
Member

Откуда: Украина, Винница
Сообщений: 277
Glory
Timid
Пользователь остаётся, значит запускается sp_droprolemember )

Остается - не значит, не пересоздается )

но этот пользователь владелец схемы, вряд ли его удастся просто так убить
26 май 11, 12:23    [10712129]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить