Normalmente, cuando creo un procedimiento almacenado, uso lo siguiente como plantilla de clasificación

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

¿Hay alguna manera de incluir la concesión de permisos de ejecución solo en ese procedimiento almacenado mientras estoy en él?
Por ejemplo, como …

Grant execute [User_Execute] 

… pero solo para este procedimiento almacenado?

He visto algunas otras preguntas similares pero parecen referirse a TODOS los procedimientos almacenados y no solo a uno, ni he visto ninguno donde puede especificar permisos dentro del script create procedure. Incluso las respuestas sobre cómo puedo establecer permisos sin la GUI para procedimientos almacenados específicos serían bienvenidas.

Editar La respuesta principal ciertamente me señaló en la dirección correcta, esto es esencialmente lo que que estaba buscando, no pensé en agrupar los comandos, que es lo que terminé haciendo, agrupando el comando junto con mi procedimiento almacenado. De todos modos, creo que es bastante hábil.

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

Comentarios

  • El código proporcionado en el texto editado es válido y la respuesta correcta a esta pregunta.

Respuesta

GRANT EXECUTE ON dbo.procname TO username; 

Respuesta

tabla truncada La configuración de permisos 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 en tanto el inicio de sesión como el nivel de usuario. Querrá determinar y otorgar SOLO los derechos necesarios para los objetos que requieren acceso (como la ejecución). Considere el uso de la capacidad EXECUTE AS 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 (p. Ej. mesas). 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 que se llama. También puede hacerse pasar por SÍ MISMO, O el usuario que crea o alterar el módulo O … ignorar a CALLER, lo que permitirá al módulo asumir los permisos del usuario actual, O … hacerse pasar por PROPIETARIO, que tendrá el permiso del propietario del procedimiento que se llama O … suplantar «user_name», que se hará pasar por un usuario específico O … suplantar «login_name» con suplantará un inicio de sesión específico.

LA MAYORÍA de las veces, lo hará solo es necesario otorgar EXECUTE derechos a los procesos almacenados y luego se otorgan derechos a todos los objetos referenciados dentro del proceso almacenado.

De esta manera, NO es necesario otorgar derechos implícitos (ejemplo: actualizar datos o llamar procesos adicionales). El encadenamiento de propiedad se encarga de 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 considerar 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 cláusula EXECUTE AS, el procedimiento almacenado se ejecuta en el contexto del propietario del objeto. Este código crea correctamente dbo.MyTable y las filas se insertan correctamente. En este ejemplo, el usuario NoPrivUser no tiene absolutamente ningún derecho concedido para modificar la tabla, o leer o modificar cualquiera de los datos en esta tabla.

Solo necesita sobre 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 esos derechos de forma permanente resulta muy útil.

Comentarios

Respuesta

ingrese la descripción de la imagen aquí

seleccione el inicio de sesión de la base de datos -> Vaya a Securable y haga clic en el botón Buscar como en la imagen anterior. Al hacer clic en el botón Buscar, encontrará la siguiente ventana para agregar el tipo de objeto.

Haga clic en el botón Tipos de objeto y obtendrá la ventana «Seleccionar tipos de objeto» con varios objetos. Ahora, si ve, el procedimiento almacenado se enumera en el área de tipos de objeto. Ahora seleccionaremos nuestro procedimiento almacenado específico en el que queremos otorgar permiso.

Comentarios

  • Primero, la pregunta tenía más de cinco años cuando la respondiste. Eso estaría bien, excepto que el OP pidió específicamente soluciones que no ' t usen la GUI y se puedan incrustar en un script. Su respuesta no aborda eso.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *