domingo, 23 de agosto de 2009

FilteredViews y autenticación de SQL Server.

Como todos saben, la información de MSCRM está almacenada en una base de datos en SQL Server.
La forma soportada y documentada en la SDK de Microsoft CRM 4.0 de acceder a la información directamente en el SQL Server, es a través de unas vistas que son llamadas "FilteredViews".
Las FilteredViews, son vistas en SQL Server cuyo nombre contiene el mismo nombre de la entidad, con el texto "Filtered" por delante. Por ejemplo "FilteredAccount" para la entidad de "Cuentas".

Al SQL Server uno se puede conectar de dos formas, y con cada una de las mismas, las FilteredViews se comportará de forma diferente:

1) Autenticación integrada de Windows:
Al conectarse de esta forma, y al realizar una consulta, automáticamente resolverá con el usuario conectado, los roles de seguridad, idioma, desplazamientos horarios, etc.
Así, por ejemplo podríamos de esta forma hacer la siguiente consulta:

SELECT * FROM FilteredAccount

Las FilteredViews detectan el usuario del directorio activo conectado al SQL Server, y lo relacionan con el usuario correspondiente de CRM.
Esto lo realiza con una función en SQL Server que podemos probar de la siguiente forma:

SELECT dbo.fn_FindUserGuid

2) Autenticación de SQL Server:
Al acceder mediante autenticación de SQL Server, las FilteredViews no pueden reconocer al usuario conectado, y si ejecutamos la consulta anterior, simplemente no devuelve nada, como si no se tuviese permisos para ver ningún registro.
Si nos conectamos de esta forma, y queremos hacer una consulta a las "FilteredViews" solo lo podemos haces "Impersonalizando" la consulta, es decir, ejecutando la misma como si fuesemos otro usuario.
Esto se puede lograr con la cláusula "EXECUTE AS USER=..." de la siguiente forma:
SELECT * FROM FilteredAccount EXECUTE AS USER='contoso\admin'

De esta forma, la consulta se realizará con los roles de seguridad y perfil del usuario que se determine.

No hay comentarios:

Publicar un comentario