Normalmente quando creo una stored procedure utilizzo quanto segue come modello di ordinamento

Create procedure <procedurename> <@param1 <type>, @param2 <type>, etc..> as begin <procedure> end 

Esiste un modo per includere la concessione dellautorizzazione di esecuzione solo per quella stored procedure mentre ci sono?
Ad esempio come …

Grant execute [User_Execute] 

… ma solo per questa procedura memorizzata?

Ho visto altre domande simili ma sembrano riferirsi tutte a TUTTE le procedure memorizzate e non solo a una, né ho visto una in cui puoi specificare le autorizzazioni allinterno dello script create procedure. Anche le risposte su come posso impostare le autorizzazioni senza la GUI per procedure memorizzate specifiche sarebbero benvenute.

Modifica La risposta principale mi ha sicuramente indirizzato nella giusta direzione, questo è essenzialmente ciò stavo cercando, non ho pensato di raggruppare i comandi che è quello che ho finito per fare, raggruppando il comando insieme alla mia procedura memorizzata. Comunque, penso che sia abbastanza semplice.

Create procedure <procedurename> <@param1 <type>, @param2 <type>, etc..> as begin <procedure> end GO GRANT EXECUTE ON <procedurename> to <username> GO 

Commenti

  • Il codice fornito nel testo modificato è valido e la risposta corretta a questa domanda.

Risposta

GRANT EXECUTE ON dbo.procname TO username; 

Risposta

troncare la tabella Limpostazione dellautorizzazione su oggetti come le procedure memorizzate può essere eseguita con:

GRANT EXECUTE ON <schema>.<object> to <user>; 

Tuttavia, potresti anche voler concedere i diritti di sicurezza su sia il livello di accesso che quello utente. Dovrai determinare e concedere SOLO i diritti necessari per gli oggetti che richiedono laccesso (come lesecuzione). Considera luso della funzionalità EXECUTE AS che consente la rappresentazione di un altro utente per convalidare le autorizzazioni necessarie per eseguire il codice SENZA dover concedere tutti i diritti necessari a tutti gli oggetti sottostanti (ad es. tabelle). EXECUTE AS può essere aggiunto a stored procedure, funzioni, trigger, ecc.

Aggiungere al codice come segue direttamente nella stored procedure:

CREATE PROCEDURE dbo.MyProcedure WITH EXECUTE AS OWNER 

In questo caso stai impersonando il proprietario del modulo che viene chiamato. Puoi anche impersonare SELF, OPPURE lutente che crea o altera il modulo OPPURE … CALLER imperonato, che consentirà al modulo di assumere i permessi dellutente corrente, OPPURE … impersonare OWNER, che assumerà il permesso del proprietario della procedura che viene chiamata OPPURE … impersonare “nome_utente”, che impersonerà un utente specifico OPPURE … impersonare “nome_accesso” con impersonerà un accesso specifico.

La maggior parte delle volte, lo farai è sufficiente concedere EXECUTE i diritti ai processi archiviati e quindi i diritti vengono concessi a tutti gli oggetti a cui si fa riferimento allinterno del processo archiviato.

In questo modo, NON è necessario dare diritti impliciti (esempio: per aggiornare i dati o chiamare processi aggiuntivi). Il concatenamento della proprietà gestisce questo per te. Ciò è particolarmente utile per SQL dinamico o se è necessario creare attività di sicurezza elevate come CREATE TABLE. EXECUTE AS è uno strumento utile da prendere in considerazione per questi.

Questo esempio può aiutare a chiarire tutto questo:

Crea un utente chiamato NoPrivUser con accesso pubblico a un database (ad es. dbadb):

USE [master]; GO CREATE LOGIN [NoPrivUser] WITH PASSWORD=N"ABC5%", DEFAULT_DATABASE=[dbadb], CHECK_EXPIRATION=ON, CHECK_POLICY=ON; GO USE [DBAdb]; GO CREATE USER [NoPrivUser] FOR LOGIN [NoPrivUser]; GO 

NOTA: IL CREATORE O IL PROPRIETARIO DI QUESTA PROCEDURA RICHIEDERÀ I DIRITTI DI CREAZIONE DELLA TABELLA allinterno del database di destinazione.

use DBAdb go CREATE PROCEDURE dbo.MyProcedure WITH EXECUTE AS OWNER truncate table MyTable GO GRANT EXEC ON dbo.MyProcedure TO NoPrivUser; GO -- Now log into your database server as NoPrivUser and run the following. 

Con la clausola EXECUTE AS la stored procedure viene eseguita nel contesto del proprietario delloggetto. Questo codice crea dbo.MyTable e le righe vengono inserite correttamente. In questo esempio, lutente NoPrivUser non ha assolutamente alcun diritto concesso per modificare la tabella o leggere o modificare i dati in questa tabella.

Richiede solo sui diritti necessari per completare questa specifica attività codificata NEL contesto di questa procedura.

Questo metodo di creazione di stored procedure in grado di eseguire attività che richiedono diritti di sicurezza elevati senza assegnare permanentemente tali diritti è molto utile.

Commenti

Risposta

inserisci qui la descrizione dellimmagine

seleziona login database -> Vai a Proteggibile e fai clic sul pulsante Cerca come nellimmagine precedente. Facendo clic sul pulsante Cerca, troverai la seguente finestra per aggiungere il tipo di oggetto.

Fai clic sul pulsante Tipi di oggetto e otterrai la finestra “Seleziona tipi di oggetto” con vari oggetti. Ora, se vedi, la stored procedure è elencata nellarea dei tipi di oggetto. Ora selezioneremo la nostra specifica procedura memorizzata su cui vogliamo fornire lautorizzazione.

Commenti

  • Primo, la domanda aveva più di cinque anni quando hai risposto. Questo andrebbe bene, eccetto che lOP ha chiesto specificamente soluzioni che non ' utilizzino la GUI e possano essere incorporate in uno script. La tua risposta non affronta questo problema.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *