[sql server 2005] restore da file bak problema con utenza

martedì 01 marzo 2011 - 14.35

luchett Profilo | Newbie

Ciao ragazzi,
ho un database hostato da un provvider di cui non farò il nome per non fare pubblicità.
Dovendo ricreare una copia di quel database su un altro server, mi è stato fornito un file bak.

Facendo un restore, sono riuscito a creare una copia del database riscontrando i seguenti problemi:
Conl'utente sql che ha importato insieme al database non riesco ad entrare come se non fosse autorizzato.
Se creo un nuovo utente, gli assegno i permessi, riesco ad entrare, ma ho un altro problema:
le tabelle figurano come nomeutente(importato).nometabella e i riferimenti nelle tabelle vanno
fatti in questo modo altrimenti non le riconosce.

Avete qualche suggerimento per me?

Grazie mille per l'aiuto

lbenaglia Profilo | Guru

>Avete qualche suggerimento per me?

Ciao,

E' il classico problema degli utenti orfani.
Dato che esegui il restore su una nuova istanza, devi creare una nuova login (a livello di istanza) e mapparla allo user account (a livello di database) mediante il comando:
ALTER USER <user name> WITH LOGIN = <loginName>;

>Grazie mille per l'aiuto
Prego.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/

luchett Profilo | Newbie

Ciao Lorenzo,
su sql server 2008, ho risolto con la tua soluzione,
mentre nella 2005 sp2 la sintassi non funziona, mi sono documentato e ho letto
che va usata questa stored:

EXEC sp_change_users_login 'update_one', 'username_old', 'username_new''

che di fatto risolve il problema degli utenti orfani assegnando la nuova login,
però il problema del default schema persiste e i riferimenti agli oggetti
vanno sempre fatti col vecchio schema!!!

lbenaglia Profilo | Guru

>Ciao Lorenzo,
>su sql server 2008, ho risolto con la tua soluzione,
>mentre nella 2005 sp2 la sintassi non funziona, mi sono documentato
>e ho letto
>che va usata questa stored:
>
>EXEC sp_change_users_login 'update_one', 'username_old', 'username_new''

Sicuro che non funzioni con SQL 2005?
Il comando ALTER USER è stato introdotto proprio con quella versione.
Ad ogni modo per compatibilità con le versioni precedenti puoi ancora usare la stored procedure di sistema sp_change_users_login, ma occhio che in futuro potrebbe essere dismessa.

>però il problema del default schema persiste e i riferimenti
>agli oggetti
>vanno sempre fatti col vecchio schema!!!
>
Non ho capito, non puoi specificare lo schema che preferisci sempre con il comando

ALTER USER <utente> WITH DEFAULT_SCHEMA = <schema>;

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/

luchett Profilo | Newbie

La versione è la seguente:
Microsoft SQL Server 2005 - 9.00.2047.00 (Intel X86) Apr 14 2006 01:12:25 Copyright (c) 1988-2005 Microsoft Corporation Express Edition on Windows NT 5.2 (Build 3790: Service Pack 2)

e sembra non funzionare

La stored l'ho usata e di fatto rimappa lo user con il nuovo login name,
ma le tabelle continuano a dover essere richiamate con il vecchio login anteposto,
io vorrei che invece possano essere richiamate con il solo riferimento all'oggetto.

luchett Profilo | Newbie

Allora ragazzi, cambiare solo la login legata all'user non risolveva il problema su sql2005
(mentre lo risolveva a pieno sul 2008)
ho risolto cambiando lo schema di tutti gli oggetti del database creando le query in questo modo:

SELECT 'ALTER SCHEMA dbo TRANSFER ' + SCHEMA_NAME(schema_id) + '.' + name
FROM sys.tables
WHERE schema_id != SCHEMA_ID('dbo');

SELECT 'ALTER SCHEMA dbo TRANSFER ' + SCHEMA_NAME(schema_id) + '.' + name
FROM sys.views
WHERE schema_id != SCHEMA_ID('dbo');

SELECT 'ALTER SCHEMA dbo TRANSFER ' + SCHEMA_NAME(schema_id) + '.' + name
FROM sys.procedures
WHERE schema_id != SCHEMA_ID('dbo');

lanciare l'output in una nuova query e il gioco è fatto.
Grazie a tutti
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5