truncar tabla El permiso de configuración en objetos como procedimientos almacenados se puede lograr con:
GRANT EXECUTE ON <schema>.<object> to <user>;
Sin embargo, es posible que también desee otorgar derechos de seguridad tanto a nivel de inicio de sesión como de usuario. Deberá determinar y otorgar SOLO los derechos necesarios para los objetos que requieren acceso (como la ejecución). Considere el uso de la EXECUTE AS
capacidad que permite la suplantación de otro usuario para validar los permisos necesarios para ejecutar el código SIN tener que otorgar todos los derechos necesarios a todos los objetos subyacentes (por ejemplo, tablas). EXECUTE AS
se puede agregar a procedimientos almacenados, funciones, disparadores, etc.
Agregue al código de la siguiente manera dentro del Procedimiento almacenado:
CREATE PROCEDURE dbo.MyProcedure WITH EXECUTE AS OWNER
En este caso, se hace pasar por el propietario del módulo al que se llama. También puede suplantarse a sí mismo, o al usuario que crea o altera el módulo, O ... llama a la persona que llama, que permitirá que el módulo tome los permisos del usuario actual, o ... suplante al PROPIETARIO, que tendrá el permiso del propietario del procedimiento que se llama OR ... suplanta 'user_name', que suplantará a un usuario específico OR ... suplanta 'login_name' con suplantará un inicio de sesión específico.
La mayoría de las veces, solo necesitará otorgar EXECUTE
derechos a los procesos almacenados y luego se otorgarán derechos a todos los objetos a los que se hace referencia dentro del proceso almacenado.
De esta manera, NO necesita otorgar derechos implícitos (ejemplo: para actualizar datos o llamar a procesos adicionales). El encadenamiento de propiedad maneja esto por usted. Esto es especialmente útil para SQL dinámico o si necesita crear tareas de seguridad elevadas como CREATE TABLE
. EXECUTE AS
Es una herramienta útil a tener en cuenta para estos.
Este ejemplo puede ayudar a aclarar todo esto:
Cree un usuario llamado NoPrivUser con acceso público a una base de datos (por ejemplo, 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: EL CREADOR O PROPIETARIO DE ESTE PROCEDIMIENTO REQUERIRÁ CREAR DERECHOS DE TABLA dentro de la base de datos de destino.
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
cláusula, el procedimiento almacenado se ejecuta en el contexto del propietario del objeto. Este código crea con éxito dbo.MyTable
y las filas se insertan con éxito. En este ejemplo, el usuario no NoPrivUser
tiene absolutamente ningún derecho otorgado para modificar la tabla, o leer o modificar cualquiera de los datos en esta tabla.
Solo adquiere los derechos necesarios para completar esta tarea específica codificada DENTRO del contexto de este procedimiento.
Este método de crear procedimientos almacenados que pueden realizar tareas que requieren derechos de seguridad elevados sin asignar permanentemente esos derechos puede ser muy útil.