2014-05-15 5 views
6

Sto utilizzando SQL Server 2008 R2 e ho creato un TVP che desidero utilizzare come parametro per un processo memorizzato, ma ricevo un messaggio che dice che non può essere trovato o che non ho il permesso.Quale autorizzazione è necessaria per utilizzare un parametro con valori di tabella di SQL Server (TVP) come parametro di processo memorizzato?

Posso usare il TVP in uno script o nel corpo del processo memorizzato, ma quando provo ad usarlo come parametro ottengo l'errore.

Qualche idea?

Edit: Per chiarimenti, l'errore che sto ricevendo è sulla creazione del proc memorizzato

risposta

7

Al fine di un chiamante per l'uso di un PROC con un parametro con valori di tabella, è necessario (unintuitively) grant execute permissions del tipo TVP a quelli chiamando il PROC cioè

GRANT EXECUTE ON TYPE::[schema].[MyTVP] to [SomeRole] 

Modifica

Credo di essere stato in grado di replicare il problema, vale a dire lavorare su un set minimo di autorizzazioni concesse a un utente. Il passo fondamentale è per il DBO o lo Schema proprietario del tuo TVP per concederti il ​​seguente accesso ad esso, per poterlo usare in un PROC (senza questo accesso, sono stato in grado di dichiarare una variabile libera del tipo TVP , ma non usarlo in un PROC).

GRANT REFERENCES ON TYPE::[schema].[MyTVP] to YOURROLE -- Or User. 

Grant Reference here (Ovviamente avrete anche bisogno CREATE PROCEDURE permesso, oltre a un accesso pertinente alle eventuali oggetti utilizzati nella PROC)

I consumatori della PROC dovrà avere anche la GRANT EXECUTE autorizzazione sul Proc e sul Tipo come per la risposta iniziale.

+0

Ci abbiamo provato, ma ho ancora lo stesso errore –

+0

Se posso usare la TVP nel corpo della stored procedure, non vuol dire che ho già ESEGUIRE? –

+0

Secondo il tuo collegamento sembra che io abbia già il permesso di esecuzione: 'Per dichiarare una variabile di tabella che usa un tipo di tabella definito dall'utente, è necessario il permesso EXECUTE su quel tipo di tabella definito dall'utente. –

0

Fare clic con il pulsante destro del mouse sul valore di riferimento della funzione a cui si desidera concedere l'accesso. Prendi le proprietà dal menu di scelta rapida.

1) Fare clic sulla scheda "Autorizzazioni" sulla destra.

2) Individuare il nome utente (SQL o Windows).

3) Selezionare quell'utente.

4) Nella sezione Autorizzazioni esplicite in basso selezionare Concedi autorizzazioni di controllo fare clic su OK.

5) fare clic su OK

enter image description here