Saltar al contenido

Suplantación de ejecución de SQL Server

Hacemos una revisión completa cada enunciado en nuestro sitio web con el objetivo de enseñarte siempre información certera y actualizada.

Solución:

execute as login proporciona suplantación de identidad a todo el servidor, ya que los inicios de sesión se realizan a nivel de servidor. Dado que los usuarios se definen por base de datos, execute as user la suplantación se aplica solo a una base de datos específica, por lo que ve el error cuando cruza las bases de datos.

El EJECUTAR COMO se puede agregar a procesos almacenados, funciones, disparadores, etc.

Ejemplo para ejecutar como:

CREATE PROCEDURE dbo.MyProcedure
      WITH EXECUTE AS OWNER

En este caso, se está haciendo pasar por el dueño del módulo que se llama.

También puedes hacerse pasar por UNO MISMO, O la USUARIO crear o alterar el módulo O … suplantar LLAMADOR , que permitirá al módulo asumir los permisos del usuario actual, O … suplantar DUEÑO, que tomará el permiso del propietario del procedimiento que se llama O … suplantar 'user_name', que se hará pasar por un usuario específico O … se hará pasar por 'login_name' con se hará pasar por un inicio de sesión específico.

La configuración de permisos en objetos como procedimientos almacenados se puede lograr con

GRANT EXECUTE ON . to ; 

Sin embargo, es posible que también desee otorgar derechos de seguridad tanto a nivel de usuario como de inicio de sesión.

Querrás determinar y otorgar SOLO los derechos necesarios para los objetos que requieren acceso (como la ejecución). Considere el uso de "EXECUTE AS" capacidad que permite interpretación de otro usuario para validar los permisos necesarios para ejecutar el código SIN QUE tener que otorgar todos los derechos necesarios a todos los objetos subyacentes (por ejemplo, tablas).

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

De esta manera, no es necesario otorgar derechos implícitos (ejemplo: para actualizar datos o llamar procesos adicionales). Encadenamiento de propiedad maneja esto por ti. 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:

--Create a user called NoPrivUser with public access to a database (e.g. 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 EL 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
AS
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].MyTable') AND type in (N'U')) 
CREATE TABLE MyTable (PKid int, column1 char(10)) 
INSERT INTO MyTable
VALUES (1,'ABCDEF')

GO

GRANT EXEC ON dbo.MyProcedure TO NoPrivUser;
GO

– Ahora inicie sesión en su servidor de base de datos como NoPrivUser y ejecute lo siguiente.

use dbadb
go

EXEC dbo.MyProcedure

--(1 row(s) affected)

Ahora intente seleccionar de la nueva tabla mientras está conectado como NoPrivuser.

Obtendrá lo siguiente:

select * from MyTable
go

Msg 229, nivel 14, estado 5, línea 1 Se denegó el permiso SELECT en el objeto ‘MyTable’, base de datos ‘DBAdb’, esquema ‘dbo’.

Eso es lo esperado ya que solo ejecutó el procedimiento bajo el contexto de seguridad de Owner mientras estaba conectado como NoPrivUser.
NoPrivUser ya que no tiene derechos para leer la tabla, solo para ejecutar el procedimiento que crea e inserta las filas.

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

El alcance de inicio de sesión está en el nivel del servidor, mientras que el alcance del usuario está en el nivel de la base de datos actual

http://msdn.microsoft.com/en-us/library/ms181362.aspx

Te mostramos las reseñas y valoraciones de los lectores

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

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