Vistas parametrizadas en función del usuario que se conecta desde ASP

26/02/2004 - 20:40 por isaac | Informe spam
No soy experto en SQL Server 2000 y necesito algo de ayuda.

Estoy diseñando una base de datos que me gustaría que fuera común para
multiples clientes que tengo. Ellos atacarán a la BD a través de un
backoffice montado en ASP. Cada cliente tiene sus datos personales y no
tiene que ver los de otros clientes. El backoffice programado en ASP es el
mismo para todos.

Necesito saber si es posible establecer algún filtro de tal modo que las
consultas que realice el ASP filtre determinadas filas en función del
usuario que ha establecido la conexión con la base de datos. De este modo
podría utilizar la misma base de datos y la misma programación ASP para cada
uno de mis clientes. Se que puedo realizar Vistas para restringir
determinadas filas. A esa vista pueden tener acceso determinados usuarios,
sin embargo creo que no me vale puesto que cada vista tendría un nombre
distinto y en la programación ASP tendría que cambiar todas las consultas
para cada cliente.

Lo ideal sería que la única diferencia en los ASP de cada cliente sea el
usuario que se conecta a la base de datos y en función del usuario que se
conecta para parámetros a una especie de vístas parametrizadas.

¿Qué posibles soluciones hay? Por favor, que alguien me de alguna pista para
ir leyendo en los Libros en Pantalla porque por más que busco no acabo de
dar con la mejor solución.

Gracias por vuestra atención.

Preguntas similare

Leer las respuestas

#6 isaac
27/02/2004 - 13:35 | Informe spam
Hola Javier,

la solución que planteas tiene muy buena pinta. Voy a estudiarla bien porque
todavía tengo muchas lagunas en la estructura de seguridad de SQL Server.

Por lo que veo esto se adapta perfectamente a lo que necesito puesto que los
programadores ASP utilizarían las vistas como si fueran las tablas reales y
las vistas filtran los resultados a partir del SYSTEM-USER, que supongo que
es el usuario con el que te conectas a la base de datos. Si lo he entendido
bien creo que solucionará mi problema.

Muchas gracias.


Isaac Marco Blancas
Deo Volente S.L. Multimedia Productions
www.deovolente.es
Tel: +34-91-5300732 Fax: +34-91-4680369

-
www.monumentalia.net ¡¡¡ EL MEJOR PORTAL DE MONUMENTOS !!!
"Javier Loria" escribió en el mensaje
news:e8KhFmM$
Hola:
Si asumimos que cada "instancia" de la aplicacion tiene diferentes
usuarios (o sea que cada cliente tiene su propio usuario de Windows o


SQL),
puedes:
a) Crear una Tabla que tenga los "usuarios"
=> CREATE TABLE Usuarios(
CodigoUsuario <Tipo>
NOT NULL UNIQUE
CuentaWindows VARCHAR(40) --Dominio(15)\ Usuario(21)
NOT NULL PRIMARY KEY
)
El Codigo de Usuario seria un codigo que asignas en tu aplicacion para
los usuarios, puede ser un numero entero, o puede ser un CHAR o VARCHAR


que
tenga sentido para tu aplicacion y que va a existir como columna en las
tablas de la aplicacion.
b) En todas las Tablas que tengan informacion de los usuarios agregas un
columna CodigoUsuario, que forma parte de la Llave Primaria y es la


primera
columna del Clustered Index. Estas columnas tiene un DEFAULT SYSTEM_USER
c) Creas Vistas (una para cada tabla que tenga informacion diferente para
cada usuario) con el siguiente patron:
=> CREATE VIEW MiVista
AS
SELECT <Columnas de la Tabla, SIN INCLUIR CodigoUsuario>
FROM Tabla
JOIN Usuarios
ON Tabla.CodigoUsuario=Usuarios.CodigoUsuario
WHERE Usuarios.CuentaWindows=SYSTEM_USER
WITH CHECK OPTION
=> d) Nunca usas las tabla solo las vistas.

Si cada aplicacion tiene multiples usuarios debes agregar una Tabla mas


para
las aplicaciones, relacionar Usuarios, con Aplicaciones con Tablas
funcionales.
Este patron tiene la ventaja de hacer transparente la seguridad para


la
parte funcional de la aplicacion.
Espero haberme explicado,


Javier Loria
Costa Rica
Se aprecia la inclusion de DDL (CREATE, INSERTS, etc.)
que pueda ser copiado y pegado al Query Analizer.
La version de SQL y Service Pack tambien ayuda.



isaac escribio:
> No soy experto en SQL Server 2000 y necesito algo de ayuda.
>
> Estoy diseñando una base de datos que me gustaría que fuera común para
> multiples clientes que tengo. Ellos atacarán a la BD a través de un
> backoffice montado en ASP. Cada cliente tiene sus datos personales y
> no tiene que ver los de otros clientes. El backoffice programado en
> ASP es el mismo para todos.
>
> Necesito saber si es posible establecer algún filtro de tal modo que
> las consultas que realice el ASP filtre determinadas filas en función
> del usuario que ha establecido la conexión con la base de datos. De
> este modo podría utilizar la misma base de datos y la misma
> programación ASP para cada uno de mis clientes. Se que puedo realizar
> Vistas para restringir determinadas filas. A esa vista pueden tener
> acceso determinados usuarios, sin embargo creo que no me vale puesto
> que cada vista tendría un nombre distinto y en la programación ASP
> tendría que cambiar todas las consultas para cada cliente.
>
> Lo ideal sería que la única diferencia en los ASP de cada cliente sea
> el usuario que se conecta a la base de datos y en función del usuario
> que se conecta para parámetros a una especie de vístas parametrizadas.
>
> ¿Qué posibles soluciones hay? Por favor, que alguien me de alguna
> pista para ir leyendo en los Libros en Pantalla porque por más que
> busco no acabo de dar con la mejor solución.
>
> Gracias por vuestra atención.


Respuesta Responder a este mensaje
#7 Javier Loria
27/02/2004 - 14:47 | Informe spam
Hola Isaac:
Me alegro te guste, y espero te sirva. SYSTEM_USER devuelve el usuario
de Windows en formato DOMINIO\Usuario o el usuario de SQL dependiendo de
como se ha autenciado el usuario en el SQL.
Saludos,


Javier Loria
Costa Rica
Se aprecia la inclusion de DDL (CREATE, INSERTS, etc.)
que pueda ser copiado y pegado al Query Analizer.
La version de SQL y Service Pack tambien ayuda.

isaac escribio:
Hola Javier,

la solución que planteas tiene muy buena pinta. Voy a estudiarla bien
porque todavía tengo muchas lagunas en la estructura de seguridad de
SQL Server.

Por lo que veo esto se adapta perfectamente a lo que necesito puesto
que los programadores ASP utilizarían las vistas como si fueran las
tablas reales y las vistas filtran los resultados a partir del
SYSTEM-USER, que supongo que es el usuario con el que te conectas a
la base de datos. Si lo he entendido bien creo que solucionará mi
problema.

Muchas gracias.


-
www.monumentalia.net ¡¡¡ EL MEJOR PORTAL DE MONUMENTOS !!!
"Javier Loria" escribió en el mensaje
news:e8KhFmM$
Hola:
Si asumimos que cada "instancia" de la aplicacion tiene
diferentes usuarios (o sea que cada cliente tiene su propio usuario
de Windows o SQL), puedes:
a) Crear una Tabla que tenga los "usuarios"
=>> CREATE TABLE Usuarios(
CodigoUsuario <Tipo>
NOT NULL UNIQUE
CuentaWindows VARCHAR(40) --Dominio(15)\ Usuario(21)
NOT NULL PRIMARY KEY
)
El Codigo de Usuario seria un codigo que asignas en tu
aplicacion para los usuarios, puede ser un numero entero, o puede
ser un CHAR o VARCHAR que tenga sentido para tu aplicacion y que va
a existir como columna en las tablas de la aplicacion.
b) En todas las Tablas que tengan informacion de los usuarios
agregas un columna CodigoUsuario, que forma parte de la Llave
Primaria y es la primera columna del Clustered Index. Estas columnas
tiene un DEFAULT SYSTEM_USER c) Creas Vistas (una para cada tabla
que tenga informacion diferente para cada usuario) con el siguiente
patron: =>> CREATE VIEW MiVista
AS
SELECT <Columnas de la Tabla, SIN INCLUIR CodigoUsuario>
FROM Tabla
JOIN Usuarios
ON Tabla.CodigoUsuario=Usuarios.CodigoUsuario
WHERE Usuarios.CuentaWindows=SYSTEM_USER
WITH CHECK OPTION
=>> d) Nunca usas las tabla solo las vistas.

Si cada aplicacion tiene multiples usuarios debes agregar una Tabla
mas para las aplicaciones, relacionar Usuarios, con Aplicaciones con
Tablas funcionales.
Este patron tiene la ventaja de hacer transparente la seguridad
para la parte funcional de la aplicacion.
Espero haberme explicado,


Javier Loria
Costa Rica
Se aprecia la inclusion de DDL (CREATE, INSERTS, etc.)
que pueda ser copiado y pegado al Query Analizer.
La version de SQL y Service Pack tambien ayuda.



isaac escribio:
No soy experto en SQL Server 2000 y necesito algo de ayuda.

Estoy diseñando una base de datos que me gustaría que fuera común
para multiples clientes que tengo. Ellos atacarán a la BD a través
de un backoffice montado en ASP. Cada cliente tiene sus datos
personales y
no tiene que ver los de otros clientes. El backoffice programado en
ASP es el mismo para todos.

Necesito saber si es posible establecer algún filtro de tal modo que
las consultas que realice el ASP filtre determinadas filas en
función del usuario que ha establecido la conexión con la base de
datos. De este modo podría utilizar la misma base de datos y la
misma programación ASP para cada uno de mis clientes. Se que puedo
realizar Vistas para restringir determinadas filas. A esa vista
pueden tener acceso determinados usuarios, sin embargo creo que no
me vale puesto que cada vista tendría un nombre distinto y en la
programación ASP tendría que cambiar todas las consultas para cada
cliente.

Lo ideal sería que la única diferencia en los ASP de cada cliente
sea el usuario que se conecta a la base de datos y en función del
usuario que se conecta para parámetros a una especie de vístas
parametrizadas.

¿Qué posibles soluciones hay? Por favor, que alguien me de alguna
pista para ir leyendo en los Libros en Pantalla porque por más que
busco no acabo de dar con la mejor solución.

Gracias por vuestra atención.
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida