Normalmente, cuando creo un procedimiento almacenado, uso lo siguiente como una plantilla de clasificación
Create procedure <procedurename>
<@param1 <type>, @param2 <type>, etc..>
as begin
<procedure>
end
¿Hay alguna manera de incluir otorgar permiso de ejecución solo en ese procedimiento almacenado mientras estoy en ello?
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 uno en el que pueda especificar permisos dentro del create procedure
script. 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 estaba buscando, no pensé en agrupar los comandos, que es lo que terminé haciendo, agrupar 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
fuente
Respuestas:
fuente
truncar tabla El permiso de configuración en objetos como procedimientos almacenados se puede lograr con:
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:
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):
NOTA: EL CREADOR O PROPIETARIO DE ESTE PROCEDIMIENTO REQUERIRÁ CREAR DERECHOS DE TABLA dentro de la base de datos de destino.
Con la
EXECUTE AS
cláusula, el procedimiento almacenado se ejecuta en el contexto del propietario del objeto. Este código crea con éxitodbo.MyTable
y las filas se insertan con éxito. En este ejemplo, el usuario noNoPrivUser
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.
fuente
seleccione inicio de sesión en la base de datos -> Vaya a Asegurable 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.
fuente