Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Autorizzazione per eseguire query su dbo.sysobjects

Primo:dovresti usare sys.objects invece di dbo.sysobjects. dbo.sysobjects è un costrutto SQL 2000 presente solo in SQL 2008 per motivi di compatibilità con le versioni precedenti. sys.objects contiene una riga per ogni oggetto con ambito schema definito dall'utente creato all'interno di un database, quindi non dovresti filtrare affatto la tua query. sys.all_objects è un superset, che contiene oggetti sia di sistema che utente.

In secondo luogo, per quanto riguarda le autorizzazioni, in SQL Server 2005 e versioni successive, la visibilità dei metadati nelle visualizzazioni del catalogo è limitata ai dispositivi a protezione diretta di cui è proprietario un utente o per i quali all'utente è stata concessa un'autorizzazione. Quindi al tuo utente dovrà essere concessa un'autorizzazione sugli elementi che sta cercando. Concedere VIEW DEFINIZIONE all'utente sugli schemi nel database consentirebbe alla query di funzionare, senza concedere l'accesso a nessun dato.