troncare la tabella L'impostazione dell'autorizzazione su oggetti come le stored procedure può essere effettuata con:
GRANT EXECUTE ON <schema>.<object> to <user>;
Tuttavia, potresti anche voler concedere diritti di sicurezza sia a livello di accesso che a livello di utente. Dovrai determinare e concedere SOLO i diritti necessari per gli oggetti che richiedono l'accesso (come l'esecuzione). Considerare l'uso della EXECUTE AS
funzionalità 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 esempio tabelle). EXECUTE AS
può essere aggiunto a stored procedure, funzioni, trigger, ecc.
Aggiungi 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 chiamato. Puoi anche impersonare SELF, O l'utente che crea o modifica il modulo OR ... imperonate CALLER, che consentirà al modulo di assumere le autorizzazioni dell'utente corrente, oppure ... impersonare PROPRIETARIO, che assumerà l'autorizzazione del il proprietario della procedura chiamata OR ... impersonifica 'user_name', che impersonerà un utente specifico OR ... impersonifica 'login_name' con impersonificherà un login specifico.
Nella maggior parte dei casi, sarà necessario concedere solo i EXECUTE
diritti ai proc memorizzati e quindi i diritti sono concessi a tutti gli oggetti a cui si fa riferimento all'interno del proc memorizzato.
In questo modo, NON è NECESSARIO assegnare diritti impliciti (esempio: per aggiornare i dati o chiamare procs aggiuntivi). Il concatenamento di 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 considerare per questi.
Questo esempio può aiutare a chiarire tutto ciò:
Creare un utente chiamato NoPrivUser con accesso pubblico a un database (ad esempio 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À CREARE I DIRITTI DI TABELLA all'interno 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 EXECUTE AS
clausola la procedura memorizzata viene eseguita nel contesto del proprietario dell'oggetto. Questo codice viene creato correttamente dbo.MyTable
e le righe vengono inserite correttamente. In questo esempio, l'utente non NoPrivUser
ha assolutamente alcun diritto concesso per modificare la tabella o leggere o modificare i dati in questa tabella.
Assume solo i diritti necessari per completare questa specifica attività codificata ENTRO il 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 risulta molto utile.