2015-03-27 8 views
5

Ho un utente proxy che sto tentando di aggiungere a un ruolo in grado di eseguire tutte le stored procedure. L'uso di altri post StackOverflow, sono stato in grado di mettere insieme questo scriptConcessione del ruolo per l'esecuzione di stored procedure

USE abc 

Create ROLE db_exec 
go 

GRANT EXECUTE TO db_exec 
go 

EXEC sp_addrolemember 'db_exec', 'abc_user' 
go 

Quando si tenta di eseguire i miei stored procedure, però, sto ancora ricevendo questo errore, per la mia gestione degli errori.

L'autorizzazione EXECUTE è stata negata sull'oggetto "sp_OACreate", il database "mssqlsystemresource", lo schema "sys".

Cosa posso fare per consentire a abc_user eseguire sp_OACreate?

+2

* sp_OACreate: Richiede l'appartenenza al ruolo predefinito del server sysadmin * –

+0

@AlexK.. Ho aggiunto l'utente a sysadmin e verificato con 'select is_srvrolemember ('sysadmin', 'abc_user')' restituisce '1' ma sto ancora ricevendo lo stesso errore, qualche idea? – user3267755

+0

Richiede anche che l'automazione ole sia abilitata, è possibile ottenere questo errore anche in quell'istanza. Finalmente ..... cerca di evitare l'automazione ole in SQL Server. È un server DB, non un server APP. – RThomas

risposta

5

Oltre ad essere in ruolo sysadmin, è inoltre necessario concedere autorizzazioni di esecuzione sul database master in cui tali procedure in realtà risiedono

use master 
go 

grant exec on sp_OACreate to abc_user 
GO 

Dopo aver eseguito che è possibile verificare con la seguente che avete il permesso di eseguire la procedura

SELECT * 
FROM master.sys.database_permissions [dp] 
JOIN master.sys.system_objects [so] ON dp.major_id = so.object_id 
JOIN master.sys.sysusers [usr] ON 
    usr.uid = dp.grantee_principal_id AND usr.name = 'abc_user' 
WHERE permission_name = 'EXECUTE' AND so.name = 'sp_OACreate' 
+0

Questo ha funzionato perfettamente, grazie! – user3267755

0

la risposta data opere, tuttavia, in genere cerchiamo di non dare il permesso all'amministratore di sistema di qualsiasi utente quando possibile. In questo caso ho trovato di eseguire sp_OACreate in realtà non è necessario il ruolo sysadmin.

Ho eseguito il seguente:

use master 
grant exec on sp_OACreate to yourSecObject 
grant exec on sp_OADestroy to yourSecObject --Optional 
grant exec on sp_OAMethod to yourSecObject 

Per i miei scopi ho richiesto una sottofase di cancellazione in modo che l'utente sia necessario creare e distruggere.

Spero che questo aiuti chiunque voglia dare la possibilità di eseguire queste procedure ma non vuole che l'utente abbia accesso completo a DB a tutti gli altri database sul server.

-Scott