Acceso de Usuarios en App Windows

07/10/2005 - 13:00 por solusoft | Informe spam
Hola a todos,

A ver si consigo explicarme,

Cuando desarrollo aplicaciones web que acceden a BBDD SQL SERVER, defino en
el web.config la cadena de conexión a la misma con un usuario (de la base de
datos, como por ejemplo dbo o sa) y contraseña.

En aplicaciones Windows, cliente-servidor, tenía algo parecido, en el
app.config, definía la cadena de conexión con el usuario y contraseña. Es
decir, si la aplicación se instalaba en una red de 5 equipos (usuarios), en
el app.config de los 5 PC's de los usuarios, aparecería la misma cadena de
conexión, usuario y contraseña.

Las aplicaciones Windows que suelo desarrollar se basan en acceso
-validación- de usuarios, donde en la base de datos SQL SERVER existe una
tabla Usuarios (que almacena ID de usuario y su contraseña, y otros datos).
Quiero destacar la diferencia entre usuario de la base de datos, y usuario
de la aplicación. El usuario de la aplicación se correspondería con un
registro -un usuario- de la tabla Usuarios.

Entonces, tengo un usuario de base de datos -Un usuario de la bbdd SQL
SERVER-, y muchos usuarios de la aplicación Windows (tabla Usuarios).


Ahora se pretende dar otro enfoque, hacer corresponder el usuario de base de
datos con el usuario de la aplicación. Es decir, si hay 5 usuarios de la
aplicación Windows (o sea, 5 registros en la tabla Usuarios), tendría que
existir 5 usuarios de la bbdd SQL SERVER.

Con esto se pretende que cada usuario de la aplicación sea independiente,
tenga su propio log de transacciones, etc. Otra cuestión sería el tema de la
concurrencia a los datos por parte de varios usuarios.

Este nuevo enfoque implica que inicialmente habría un usuario administrador,
tanto en la tabla Usuarios, como un usuario de BBDD SQL SERVER.
Este usuario administrador podría acceder a la aplicación Windows y crear
nuevos usuarios, por tanto, insertar registros en la tabla Usuarios. La
cuestión sería que desde la aplicacións e puedan crear usuarios en la BBDD
SQL SERVER 2000.

Lo mismo pasaría ala hora de modificar por ejemplo la contraseña de un
usuario; se cambiaría el valor en la tabla de Usuarios, pero habría que
hacerlo también en la bbdd SQL SERVER.


Quisiera saber si desde C#, podría de alguna forma, crear usuarios en una
BBDD SQL SERVER 2000, con sus permisos, etc, y también poder modificar la
contraseña de los mismos ?.

Y otra pregunta, es saber si este nuevo enfoque que quiero aplicar para
aplicaciones Windows es el adecuado o si existe otra fórmula mejor.

Muchas gracias a ustedes.
 

Leer las respuestas

#1 A.Poblacion
07/10/2005 - 17:41 | Informe spam
"solusoft" wrote in message
news:
[...]
Ahora se pretende dar otro enfoque, hacer corresponder el usuario de base


de
datos con el usuario de la aplicación. Es decir, si hay 5 usuarios de la
aplicación Windows (o sea, 5 registros en la tabla Usuarios), tendría que
existir 5 usuarios de la bbdd SQL SERVER.

Con esto se pretende que cada usuario de la aplicación sea independiente,
tenga su propio log de transacciones, etc. Otra cuestión sería el tema de


la
concurrencia a los datos por parte de varios usuarios.



Te va a dar exactamente igual. El log de transacciones es único por cada
base de datos, con independencia de cuántos usuarios utilices. Y la
concurrencia también te va a dar igual, el servidor controla los bloqueos
con el ID de la conexión (SPID), que es un número que se asigna cada vez que
se abre una conexión, con independencia de que todas las abra el mismo
usuario o que sean distintos usuarios.

[...]
Quisiera saber si desde C#, podría de alguna forma, crear usuarios en una
BBDD SQL SERVER 2000, con sus permisos, etc, y también poder modificar la
contraseña de los mismos ?.



Desde C# se utiliza un SqlCommand para ejecutar con el ExecuteNonQuery
una llamada a un procedimiento almacenado. Para crear un usuario se usa
sp_adduser (búscalo en el manual de Sql Server para ver qué parámetros hay
que darle), y similarmente hay otros procedimientos que empiezan por sp_
para concederle permisos sobre una base de datos, borrar el usuario, etc.

Y otra pregunta, es saber si este nuevo enfoque que quiero aplicar para
aplicaciones Windows es el adecuado o si existe otra fórmula mejor.



Hay una fórmula mejor, que consiste en configurar la cadena de conexión
para que utilice autenticación integrada. El usuario de la aplicación
coincide con el usuario que ha hecho login en Windows; la aplicación se lo
pasa al SqlServer, y el servidor lo reconoce directamente si pertenece al
mismo dominio en el que han hecho login los usuarios de los PCs. De esta
forma te olvidas por completo de tener que manejar tablas de usuarios, y
además es el método más seguro porque no grabas nunca en ningún sitio una
password.

Preguntas similares