Błąd TF246021 […] SQL Server Error: 50000 w Team Foundation Server

Ponieważ to był cięższy przypadek niż na początku myślałem, robię ten zapisek na przyszłość dla samego siebie. Ale może komuś też się przyda kiedyś. Szukając w Google rozwiązania, nie znalazłem podobnego przypadku.

Zaczęło się niewinnie. Koledze zrobili nowe konto w AD. Ale z tym samym loginem, z tymi samymi danymi. Poprzednie konto zmieniło nazwę. Zmienił się oczywiście SID. Kolega utracił dostępy w wielu miejscach, również w TFS. W zasadzie normalka – wywaliłem go z grup, dodałem ponownie, odzyskał dostęp – widział wszystkie zakamarki które miał widzieć.

Niestety, próbując dodać cokolwiek do TFS (nowy Bug czy PBI) dostawał niezmiennie komunikat:

TF246021: An error occurred while processing your request. Technical information (for administrator): SQL Server Error: 50000

Dodatkowo, kiedy próbowałem go wskazać jako właściciela jakiegoś elementu w TFS (np. Zadania), dostawałem:

The field 'Changed By’ contains the value 'Imię Nazwisko’ that is not in the list of supported values

Najlepsze jest to, że uprawnienia działały normalnie – kolega mógł otwierać te obszary TFS, do których miał dostęp.

Finalnie skończyło się na 2h szukania po tabelkach bazy danych i w końcu za pomocą SQL Server Profilera dotarłem w to niepozorne miejsce:

Po zajrzeniu w ciału tej procedury i wykonaniu kilku testów na „dobrym” i „złym” użytkowniku problem okazał się prosty – błędny SID i UID użytkownika TFS w tabeli [dbo].[Constants]. Można to sprawdzić znając UID użytkownika TFS (ten poprawny, z tabeli [dbo].[ADObjects]) i wykonując procedurę [dbo].[GetConstantRecords]. Albo w dowolny inny sposób (np. porównując wartości kolumn przechowujących SID i TeamFoundationId w obu w/w tabelach.

Ręczna poprawka SID i TeamFoundationId w tabeli [dbo].[Constants] powinna rozwiązać problem.

Przykładowe odpalenie procedury GetConstantRecords niżej:


declare @p2 dbo.typ_WitOrderedStringTable
insert into @p2 values(N'tutaj podajemy tfs id',0)

DECLARE	@return_value int

EXEC	@return_value = [dbo].[GetConstantRecords]
		@partitionId = 1,
		@values = @p2,
		@searchFactor = 4,
		@returnInactiveIdentities = 0

SELECT	'Return Value' = @return_value

GO

Będzie mi bardzo miło...

...jeśli zapiszesz się na powiadomienia. Zero reklam i nie przegapisz żadnego nowego wpisu!

klikając "Zapisz mnie" potwierdzasz zapoznanie się z polityką prywatności tego bloga. Po zapisaniu się możesz zmienić obserwowane kategorie.

Będzie mi bardzo miło...

...jeśli zapiszesz się na powiadomienia. Zero reklam i nie przegapisz żadnego nowego wpisu!

klikając "Zapisz mnie" potwierdzasz zapoznanie się z polityką prywatności tego bloga. Po zapisaniu się możesz zmienić obserwowane kategorie.

Podobne wpisy

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *