none
Restringir acceso a un valor de celda para un cubo en SSAS 2005. RRS feed

  • Pregunta

  • Hola a todos antes que nada!

    Estoy usando un Windos Server 2003 y SQL Server 2005.

    Paso a comentar, he estado investigando como filtrar información para un cubo, sin tener exito.

    Tengo una dimension en el cubo llamada Departamentos, donde para cada usuario/grupo necesito que vea solo la informacion al departamento del cual el es miembro.

    Intento agregar las restricciones con expresiones MDX mediante un rol definido para el cubo. Pero cuando lo pruebo el resultado no es el deseado. Ademas me confunde un poco las dos pestañas, Dimension Data y Cell Data, no me queda claro donde debo hacer la restriccion.

    Bueno gracias por su tiempo y si me pueden dar una mano, tanto en la sintaxis que deberia usar en la expresion MDX, asi como en donde debe estar dicha restriccion.

    Salud2

     

    martes, 15 de febrero de 2011 18:43

Respuestas

  • Hola Pablo, meter seguridad a nivel de cell data en tu caso no es necesario en absoluto.

    Puedes optar por dos tipos de seguridad, estática o dinámica.

    si usas estática, en la pestaña de dimension data, especifica que departamentos puede ver cada rol y añade a los usuarios a ese rol. En mi caso siempre hago grupos de windows, mejor que usuarios para evitar que cuando alguien abandona la organización me afecte de alguna forma con SID huérfanos.

    Si usas dinámica solo necesitas un rol, yh puedes usar esa forma, Exists, pero endimension data. Ese es tu conjunto "allowed" es decir  la clausula allowed set necesita un conjunto de elementos perfmitidos, en tu caso, aquellso cuyo Username sea el loginj id en la dimensio´n empleado. y el exist se refiere, supongo a un mesaure group específico.

    Para mi esta segunda opción, si bien es mas "flexible" porque manejas desde TSQL esa pertenencia, también es más costosa, al ser dinámica las caches etc... se verán penalizadas.

    En resumen, si puedes, cambia tu estrategia a estática, y si no, ese Exists has de ponerlo en el allowed memberset en la dimensión zona de ventas para el grupo de medidas "filtroSeguridad"

    Espero que se entienda.


    Comparte lo que sepas, aprende lo que no sepas (FGG)
    lunes, 21 de febrero de 2011 21:44
    Moderador

Todas las respuestas

  • Hola.

    Es posible hacerlo, pero es mucho más sencillo que lleves esa lógica a la capa de aplicación, de tal forma que, en tiempo de ejecución filtres en función del usuario conectado (ojo, no serían permisos), añadiendo el filtro en el where de la sentencia MDX.

    Lo contrario implica contar con una relación entre el usuario que se conecta y el punto en la dimensión en el que uno se encuentra. 

    Si no lo logras de esa otra forma que te propongo, nos dices.


    Alberto López Grande
    SQL Server MVP
    Visita mi blog en http://qwalgrande.blogspot.es/

    martes, 15 de febrero de 2011 22:23
    Moderador
  • Gracias por la respuesta ya que me ha orientado un poco.

    De todas maneras aun no he podido hacer funcionar un ejemplo que estoy usando.

     

    Tengo tres Tablas: Empleados, Zonas de Ventas y un tercer tabla de relacion llamada (seguridad_fac). 

    La tabla de seguridad me indica que empleados pueden mirar ciertas zonas de vta.

    Esta tabla de relacion solo tiene las claves de ambas tablas (EmpleadosId,ZonasVtasID)

    Ahora bien, me defini un rol para el cubo en el BIDS donde en el tab "Cell Data" le pongo la siguiente expresion:

    Exists([ZonasVentas].[NombreZona].MEMBERS, StrToMember("[Empleados].[Login ID].&[" + Username + "]"),"FiltroSeguridad")

    Donde FiltroSeguridad es una medida que hace referencia a la tabla de relacion seguridad_fac.

    Bueno espero que se entienda el ejemplo, creo que el problema esta en la sentencia... bueno si pueden darme una mano se agradece.

     

     

     

     


    Pablo H. Rodriguez Sosa
    miércoles, 16 de febrero de 2011 18:53
  • Hola Pablo, meter seguridad a nivel de cell data en tu caso no es necesario en absoluto.

    Puedes optar por dos tipos de seguridad, estática o dinámica.

    si usas estática, en la pestaña de dimension data, especifica que departamentos puede ver cada rol y añade a los usuarios a ese rol. En mi caso siempre hago grupos de windows, mejor que usuarios para evitar que cuando alguien abandona la organización me afecte de alguna forma con SID huérfanos.

    Si usas dinámica solo necesitas un rol, yh puedes usar esa forma, Exists, pero endimension data. Ese es tu conjunto "allowed" es decir  la clausula allowed set necesita un conjunto de elementos perfmitidos, en tu caso, aquellso cuyo Username sea el loginj id en la dimensio´n empleado. y el exist se refiere, supongo a un mesaure group específico.

    Para mi esta segunda opción, si bien es mas "flexible" porque manejas desde TSQL esa pertenencia, también es más costosa, al ser dinámica las caches etc... se verán penalizadas.

    En resumen, si puedes, cambia tu estrategia a estática, y si no, ese Exists has de ponerlo en el allowed memberset en la dimensión zona de ventas para el grupo de medidas "filtroSeguridad"

    Espero que se entienda.


    Comparte lo que sepas, aprende lo que no sepas (FGG)
    lunes, 21 de febrero de 2011 21:44
    Moderador
  • Muchas gracias Miguel, lo probe y funcion barbaro un abrazo!
    Pablo H. Rodriguez Sosa
    miércoles, 23 de febrero de 2011 12:15