Versione breve: Posso concedere l'accesso a database esterni a un ruolo?Concessione dell'accesso a un db agli utenti/ruoli di un altro
Versione lunga:
Sto lavorando su report utilizzando Crystal, che sta recuperando dati da un'istanza di SQL Server applicazioni (database1
).
L'applicazione sta eseguendo i report e sovrascrive la connessione nel report, non ho accesso al codice delle applicazioni.
Ho aggiunto un nuovo DB al server (database2
) che raccoglie informazioni da una centrale telefonica e desidero unire alcune di queste informazioni ai dati delle applicazioni (database1
).
È possibile unire i dati e i report funzionano quando vengono eseguiti all'interno del progettista (con accesso come SA) ma quando i report vengono eseguiti esternamente attraverso l'applicazione, falliscono con un errore abbastanza generico (Impossibile recuperare i dati).
Suppongo che l'errore sia causato dalle nuove autorizzazioni DB come se eseguissi il login nell'applicazione come SA l'errore scompare.
L'applicazione dispone di un ruolo DB speciale per gli utenti che eseguono rapporti, quando si aggiunge una tabella/vista/sp all'applicazione db (database1
) Posso semplicemente assegnare select/execute a questo ruolo per consentire ai report di accedere all'oggetto .
Ora ho un oggetto in un diverso db, tuttavia il ruolo non è facilmente accessibile.
Esiste un modo per fare riferimento al secondo db (database2
) tramite il ruolo esistente?
esempio:
USE [database1]
GRANT EXECUTE ON [database2].[dbo].[CUSTOM_PROCEDURE] TO [applicationrole1]
OR
USE [database2]
GRANT EXECUTE ON [dbo].[CUSTOM_PROCEDURE] TO [database1].[dbo].[applicationrole1]
Idealmente Voglio essere in grado di collegare al ruolo in qualche modo piuttosto che ri-creazione di un nuovo ruolo come il ruolo viene aggiornato con l'applicazione regolarmente quando vengono aggiunti nuovi utenti/configurati.
(non registrata con Crystal Reports-in quanto questo non è correlato al problema)
Edit:
Esiste un modo per fare qualcosa di simile:
INSERT INTO Database2.sys.database_principals
SELECT * FROM Database1.sys.database_principals
WHERE [type] = 'S'
Per copiare gli utenti (non i login) e quindi aggiungere i membri del ruolo?
C'è un modo che questo possa essere fatto per i nuovi utenti aggiunti a 'database1'? – bendataclear
Per ogni utente aggiuntivo che devi aggiungere, usa le parti 'CREATE USER [nome utente] FOR LOGIN [nome login]' e 'exec sp_addrolemember ...' su ogni database (puoi omettere la parte CREATE USER se già creato gli utenti in ogni database, ad esempio, tramite lo studio di gestione). – HackedByChinese
I nuovi utenti vengono aggiunti molto regolarmente e dover eseguire questi script ogni volta potrebbe essere difficile. C'è un modo per rispecchiare gli accessi? – bendataclear