Först - du bör använda sys.objects istället för dbo.sysobjects. dbo.sysobjects är en SQL 2000-konstruktion som endast finns i SQL 2008 av bakåtkompatibilitetsskäl. sys.objects innehåller en rad för varje användardefinierat objekt med schemaomfattning som skapas i en databas, så du behöver inte filtrera din fråga alls. sys.all_objects är en superset som innehåller både system- och användarobjekt.
För det andra - på behörighetssidan - i SQL Server 2005 och senare versioner, är synligheten för metadata i katalogvyer begränsad till säkerhetsobjekt som en användare antingen äger eller som användaren har fått viss behörighet för. Så din användare måste beviljas viss behörighet för objekten den letar efter. Om du beviljar VIEW DEFINITION till användaren på schemat/schemana i databasen skulle frågan fungera, utan att ge åtkomst till några data.