Po pierwsze - powinieneś używać sys.objects zamiast dbo.sysobjects. dbo.sysobjects to konstrukcja SQL 2000 dostępna tylko w SQL 2008 ze względu na zgodność wsteczną. sys.objects zawiera wiersz dla każdego zdefiniowanego przez użytkownika obiektu o zakresie schematu, który jest tworzony w bazie danych, dzięki czemu nie trzeba w ogóle filtrować zapytania. sys.all_objects to nadzbiór, który zawiera zarówno obiekty systemowe, jak i użytkownika.
Po drugie — po stronie uprawnień — w programie SQL Server 2005 i nowszych wersjach widoczność metadanych w widokach wykazu jest ograniczona do elementów zabezpieczanych, które użytkownik posiada lub do których przyznano użytkownikowi pewne uprawnienia. Więc twój użytkownik będzie musiał otrzymać pewne uprawnienia do przedmiotów, których szuka. Przyznanie użytkownikowi funkcji VIEW DEFINITION na schemacie(ach) w bazie danych umożliwiłoby działanie zapytania bez udzielania dostępu do jakichkolwiek danych.