2012-04-06 27 views
8

¿Cuál es la diffrence entre ...SQL Server Ejecutar suplantación

execute as user = 'testuser' 

Y

execute as login = 'testuser' 

Estoy ejecutando un procedimiento de bases de datos cruzadas bajo estas conexiones y funciona con el exececute como login pero no la ejecución como usuario. Se dice que el servidor principal "usuario de prueba" no puede acceder a la base de datos "xxx" en el contexto de seguridad.

Cuando i SELECT SYSTEM_USER después de que ambos comandos que veo que se establece en 'testuser'

Respuesta

11

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

3

Ejemplo para ejecutar Como:

CREATE PROCEDURE dbo.MyProcedure CON EXECUTE como propietario

En este caso, se hace pasar por el propietario del módulo al que se llama. También puede suplantar a SELF, O al usuario que crea o altera el módulo O ... impermeabilizar CALLER, que habilitará al módulo para asumir los permisos del usuario actual O ... suplantar PROPIETARIO, que asumirá el permiso del propietario del procedimiento que se llama OR ... 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.

Configuración de permisos en objetos como procedimientos almacenados se puede lograr con "GRANT EXECUTE ON a;.
Sin embargo, también es posible que desee conceder derechos de seguridad, tanto a nivel de usuario y de usuario que tendrá que determinar y concede SOLAMENTE. los derechos necesarios para los objetos que requieren acceso (como la ejecución). Considere el uso de la función "EJECUTAR COMO" que permite la suplantación de otro usuario para validar los permisos necesarios para ejecutar el código SIN tener que otorgar todo el derechos a todos los objetos subyacentes (p. ej., tablas). El EXECUTE AS se puede agregar a los procesos, funciones, activadores almacenados, etc.

LA MAYORÍA DE LAS VECES, SOLO NECESITARÁ OTORGAR LOS DERECHOS DE EJECUCIÓN a los procesos almacenados y, a continuación, se otorgan derechos a todos los objetos a los que se hace referencia dentro del proceso almacenado. De esta manera, no necesita otorgar derechos implícitos (por ejemplo, para actualizar datos o llamar a procesos adicionales). La cadena de propiedad se encarga de esto. 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:

Crear un usuario llamado NoPrivUser con acceso público a una base de datos (por ejemplo,dbadb)

USO [maestro] GO CREATE LOGIN [NoPrivUser] CON PASSWORD = N'ABC5%', DEFAULT_DATABASE = [dbadb], CHECK_EXPIRATION = ON, CHECK_POLICY = ON GO USO [DBAdb] IR CREAR USUARIO [NoPrivUser] para iniciar la sesión [NoPrivUser] IR

NOTA: CREADOR O PROPIETARIO DE ESTE procedimiento requerirá crear derechos tabla dentro de la base de datos destino.

uso DBAdb ir CREATE PROCEDURE dbo.MyProcedure CON EXECUTE como propietario AS SI NO EXISTE (SELECT * FROM sys.objects DONDE object_id = OBJECT_ID (N '[dbo] .MyTable') y el tipo de (Núñez ')) CREATE TABLE MyTable (PKID int, column1 char (10)) INSERT INTO MyTable VALORES (1,' ABCDEF ')

GO

EXEC GRANT EN dbo.MyProcedure A NoPrivUser ; GO

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

uso dbadb ir

EXEC dbo.MyProcedure

(1 row (s) affected)

Ahora trata de elegir entre la nueva tabla mientras está conectado como NoPrivuser.

Usted recibirá el siguiente:

seleccionar * de MiTabla ir

Msg 229, nivel 14, estado 5, línea 1 El permiso SELECT fue denegado en el objeto 'MiTabla', base de datos ' DBAdb ', esquema' dbo '.

Esto es esperado ya que solo ejecutó el procedimiento en el contexto de seguridad del Propietario mientras estaba conectado como NoPrivUser.
NoPrivUser como ningún derecho para leer realmente 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 con éxito dbo.MyTable y las filas se insertan correctamente. En este ejemplo, el usuario "NoPrivUser" no tiene derechos otorgados para modificar la tabla, o leer o modificar cualquiera de los datos en esta tabla.
Solo toma 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.

Cuestiones relacionadas