Versión corta: ¿Puedo otorgar acceso a bases de datos externas a un rol?Otorgando acceso a un db a usuarios/roles de otro
Versión larga:
estoy trabajando en informes utilizando Crystal que está recuperando datos de una aplicaciones instancia de SQL Server (database1
).
La aplicación está ejecutando los informes y sobrescribiendo la conexión en el informe, no tengo acceso al código de las aplicaciones.
He agregado una nueva base de datos al servidor (database2
) que está recopilando información de una central telefónica y deseo unir parte de esta información a los datos de la aplicación (database1
).
Puedo unir los datos y los informes funcionan cuando se ejecutan dentro del diseñador (inicia sesión como SA) pero cuando los informes se ejecutan externamente a través de la aplicación fallan con un error bastante genérico (Error al recuperar datos).
Supongo que el error está causado por los nuevos permisos DB, como si iniciara sesión en la aplicación como SA el error desaparece.
La aplicación tiene un rol de base de datos especial para los usuarios que ejecutan informes al agregar una tabla/vista/sp a la aplicación db (database1
). Simplemente puedo otorgar seleccionar/ejecutar esta función para permitir que los informes accedan al objeto .
Ahora tengo el objeto en un db diferente, pero no se puede acceder fácilmente al rol.
¿Hay alguna manera de que pueda hacer referencia al segundo db (database2
) a través del rol existente?
por ejemplo:
USE [database1]
GRANT EXECUTE ON [database2].[dbo].[CUSTOM_PROCEDURE] TO [applicationrole1]
OR
USE [database2]
GRANT EXECUTE ON [dbo].[CUSTOM_PROCEDURE] TO [database1].[dbo].[applicationrole1]
Lo ideal sería que quieren ser capaces de vincular a la Función de alguna manera en lugar de volver a crear un nuevo papel como el papel se actualiza mediante la aplicación regularmente cuando se añaden/configuran nuevos usuarios.
(No etiquetados con Crystal-Reports ya que esto no está relacionado con el problema)
Editar:
¿Hay alguna manera de hacer algo como:
INSERT INTO Database2.sys.database_principals
SELECT * FROM Database1.sys.database_principals
WHERE [type] = 'S'
¿Para copiar a los usuarios (no inicios de sesión) y luego agregar los miembros de la función?
¿Hay alguna forma de que esto se pueda hacer para los usuarios nuevos que se agregan a 'database1'? – bendataclear
Para cualquier usuario adicional que necesite agregar, solo use las partes 'CREATE USER [nombre de usuario] FOR LOGIN [nombre de usuario]' y 'exec sp_addrolemember ...' en cada base de datos (Puede omitir la parte CREATE USER si ya creado los usuarios en cada base de datos, por ejemplo, a través de un estudio de administración). – HackedByChinese
Se agregan nuevos usuarios muy regularmente y tener que ejecutar estos scripts cada vez puede ser difícil. ¿Hay alguna forma de reflejar los inicios de sesión? – bendataclear