Traspasar usuarios de SQL Server

19/03/2005 - 19:57 por Juan Pedro Gonzalez | Informe spam
Hola,

Tengo un problemilla entre manos y me gustaria saber vuestra opinion, ideas
o soluciones.

Basicamente tengo dos servidores SQL Server. Los servidores son
independientes; es decir, no estan 'enlazados' (Vamos que no son "linked
servers")... y no pueden serlo por motivos internos. Tengo una serie de
aplicaciones donde una aplicacion se conecta unicamente a un servidor, otra
se conecta a el otro servidor y el resto se conecta a ambos servidores.
Todos los logins son de SQL Server. Bien, en principio uno de estos
programas asigna los logins de los usuarios con sus respectivas
reestricciones. El caso es que algunos de estos logins deben residir
unicamente en un servidor, pero algunos logins deben residir en ambos
servidores.

Tengo una tabla adicional que extiende un poco los campos de sysusers dentro
de la tabla, y que se "relaciona" (Aunque no hay una relacion establecida)
son sysusers atraves del campo "uid". Se me habia ocurrido crear un paquete
DTS que pase la tabla sysusers de la base de datos al otro servidor, la pega
es que supongo que deberia hacer lo mismo con los usuarios de la base de
datos "master" con el fin de tener login en el sistema, y no estoy seguro de
que pasaria si el uid ya esta en uso. El hecho de tener un usuario que debe
accecder a las dos bases de datos y que solo puedea acceder a una me daría
problemas Por motivos de seguridad no podria traspasar todos los
usuarios de una base de datos a la otra (como ya he dicho, solo me interesa
que algunos usuarios esten en las dos bases de datos) Por lo que se
tampoco puedo emplear un procedimiento almacenado ya que no son servidores
ligados, y por lo tanto un servidor no "ve" al otro y viceversa... y me
pareceria interesante poder contar con una transaccion para evitar que un
servidor agregue un uduario en una base de datos y no en la otra cuando
fuese necesario.

Por otro lado, me gustaria saber en el caso de que decidiese permitir el
acceso de todos los usuarios a las dos bases de datos, ¿Me bastaria con un
DTS que pasase todos los datos de sysusers de la base de datos a la que
quiero darles acceso y de la base de datos "master"?

Un saludo y gracias de antemano.

Preguntas similare

Leer las respuestas

#6 Juan Pedro Gonzalez
25/03/2005 - 12:01 | Informe spam
Hola de nuevo Miguel...

Veamos, he seguido los pasos del articulo que publicaste paso a paso... El
problema es el siguiente:

Para empezar tengo los logins de usuario en master.dbo.sysxlogins. Hasta
aqui no hay problema, me creo un paquete DTS con la tarea de importar
Logins, y selecciono los usuarios de mi base de datos... La verdad es que no
se si estara machacando los logins existentes, pero bueno tampoco me
importaria demasiado. Con esto logro tener los logins en el otro servidor
SQL.

Los problemas surgen a partir de aqui... En primer lugar tengo una tabla
"usuarios" dentro de mi base de datos. Esta tabla contiene informacion
extendida de los usuarios, por ejemplo el departamento al que pertenecen,
horarios de trabajo, etc. La tabla contiene un campo uid que coincidiria con
el uid de la tabla "sysusers". Por otro lado esta tabla tiene una relacion
con otras tablas de la base de datos. Cuando trato de copiar la base de
datos empleando la tarea de copiar objetos en el DTS me da errores al tratar
de eliminar la tabla y volverla a crear debido a la relacion que existe
entre tablas... Si lo trato de importar sin eliminar la tabla con
anterioridad me da problemas al haber claves duplicadas. ¿Se te ocurre
alguna solucion a para este problema?

El segundo problema es que los logins parecen pasar con la base de datos por
defecto, sin embargo los usuarios no aparecen en la lista de usuarios de la
base de datos. Me interesaria que todos los logins que pasan con el DTS se
incluyesen en su base de datos y a poder ser con el uid que tenian en la
base de datos original (Mas que nada por la relacion que existe con la tabla
"usuarios" que te he comentado)... Otro dato importante es que los usuarios
que pertenecen al departamento de Administracion (Dato disponible en la
tabla "usuarios") deben pertenecer al rol (o Funcion de usuario)
mydb_Administradores... y los otros usuarios deben pertenecer a db_denywrite
y db_debywrite (Funcionan por funciones o roles de aplicacion).

¿Se te ocurre como lograr esta meta?

Gracias de antemano
Respuesta Responder a este mensaje
#7 Miguel Egea
25/03/2005 - 21:10 | Informe spam
En linea.
"Juan Pedro Gonzalez" escribió en el mensaje
news:eJMq$
Hola de nuevo Miguel...

Veamos, he seguido los pasos del articulo que publicaste paso a paso... El
problema es el siguiente:

Para empezar tengo los logins de usuario en master.dbo.sysxlogins. Hasta
aqui no hay problema, me creo un paquete DTS con la tarea de importar
Logins, y selecciono los usuarios de mi base de datos... La verdad es que
no
se si estara machacando los logins existentes, pero bueno tampoco me
importaria demasiado. Con esto logro tener los logins en el otro servidor
SQL.

Los problemas surgen a partir de aqui... En primer lugar tengo una tabla
"usuarios" dentro de mi base de datos. Esta tabla contiene informacion
extendida de los usuarios, por ejemplo el departamento al que pertenecen,
horarios de trabajo, etc. La tabla contiene un campo uid que coincidiria
con
el uid de la tabla "sysusers". Por otro lado esta tabla tiene una relacion
con otras tablas de la base de datos. Cuando trato de copiar la base de
datos empleando la tarea de copiar objetos en el DTS me da errores al
tratar
de eliminar la tabla y volverla a crear debido a la relacion que existe
entre tablas... Si lo trato de importar sin eliminar la tabla con
anterioridad me da problemas al haber claves duplicadas. ¿Se te ocurre
alguna solucion a para este problema?



Copiate la tabla sysusers a una bbdd en access e importala a sql on otro
nombre.
Después inserta los usuarios que no existan. Añadele después a los nuevos
usuarios el perfil que necesites.

El segundo problema es que los logins parecen pasar con la base de datos
por
defecto, sin embargo los usuarios no aparecen en la lista de usuarios de
la
base de datos. Me interesaria que todos los logins que pasan con el DTS se
incluyesen en su base de datos y a poder ser con el uid que tenian en la
base de datos original (Mas que nada por la relacion que existe con la
tabla
"usuarios" que te he comentado)... Otro dato importante es que los
usuarios
que pertenecen al departamento de Administracion (Dato disponible en la
tabla "usuarios") deben pertenecer al rol (o Funcion de usuario)
mydb_Administradores... y los otros usuarios deben pertenecer a
db_denywrite
y db_debywrite (Funcionan por funciones o roles de aplicacion).



Esto si es un problema tal y como comentaba en el artículo en la tabla
sysxlogins hay un dbid que es la bbdd por defecto, pero claro la bbdd en el
otro server tiene otro id, tendrás que usar sp_defaultdb después del
aimportación.


¿Se te ocurre como lograr esta meta?

Gracias de antemano



Comentame si necesitas algo más, ahora tengo que irme (salgo en un desfile
procesional en mi pueblo, pero si no ves del todo la función puedo intentar
hacer un ejemplo).

Saludos
-
Miguel Egea Gómez
Microsoft SQL-Server MVP, MCSD, MCAD,MCT
Webmaster de PortalSql.Com
¿Te interesa participar en las reuniones
del grupo de Usuarios de SQL-Server y .NET
Se harán en levante de España, (Alicante o Murcia)?




email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida