2010-10-26 32 views
5

Estamos utilizando CR XI en Oralce. Estamos aplicando RLS (Row Level Security) en DB. El RLS se basará en la información que establezcamos en la sesión (llamando a trans_pkg.set_username ('abc')) para decidir qué filas de datos pueden aparecer en el conjunto de datos. Pero CR parece tener su propia conexión con Oracle. No tenemos forma de ejecutar un paquete como: trans_pkg.set_username ('abc') antes de los datos de la consulta CR. Ahora es el gran riesgo de seguridad para nuestro sistema. Si tiene alguna solución, por favor, ayúdenme.Crystal Report y ODP.Net

+1

¿Qué hay de llamar 'trans_pkg.set_username ('abc')' dentro del procedimiento almacenado de Oracle utilizado para alimentar el Crystal Report? –

+0

¿Quiere decir agregar un comando en CR como seleccionar trans_pkg.set_username ('abc') desde dual? Si tenemos muchas consultas en CR, ¿cada consulta usará la misma sesión de Oracle o creará por sí misma? – QuangND

+0

Hola, OMG Ponies, su solución es correcta si la consulta selecciona trans_pkg.set_username ('abc') desde la ejecución dual primero en todas las consultas. Pero, ¿cómo asegurarse de que esta consulta siempre se ejecute primero? – QuangND

Respuesta

0

No he usado crystal contra oráculo, solo servidor sql, pero la respuesta debería ser la misma. Cuando configura la información de conexión para el informe, debe especificar el nombre de usuario y la contraseña. La base de datos debe usar esta información para identificar al usuario y asignarle permisos de acceso correctos.

+0

Gracias por responder, nuestro sistema es de 3 niveles, la base de datos del usuario es la misma para todas las sesiones. La única forma es ejecutar algún procedimiento antes de consultar datos. ¿Cualquier sugerencia? – QuangND

+0

¿quiere decir ejecutar un 'procedimiento almacenado' en la base de datos, o un procedimiento en su nivel de acceso a datos, o qué? en cualquier caso, ¿qué hace el procedimiento? – Ray

+0

ejecutar el procedimiento almacenado. tenemos un paquete trans_pkg. En este paquete, tenemos una variable global g_nombre de usuario. trans_pkg.set_username (p_nombre de usuario varchar2) simplemente configure g_username: = p_nombre de usuario; y en el contexto RLS filtramos solo las filas a las que este nombre de usuario puede acceder. – QuangND

0

Dado que está utilizando el visor de informes de cristal en lugar de un servidor BO sólo puede utilizar conjuntos de datos como en this answer

Si se utiliza un servidor BO que había necesidad de crear otro procedimiento que establece el primer llamadas nombre de usuario y luego ejecute el procedimiento fuente del informe o la consulta.

+0

En nuestro sistema, el usuario puede crear nuevos archivos rpt y subirlos al servidor de informes y otros pueden ver esos informes. En un archivo rpt, hay varias consultas. Creo que podemos usar ese enfoque en este caso. – QuangND

+0

:) lo siento, soy nuevo en este foro. Encontraré la manera de hacerlo :) – QuangND

Cuestiones relacionadas