Home > FAQ > Come eliminare un utente di database che sia owner di uno schema

Come eliminare un utente di database che sia owner di uno schema

Cosa accade se tento di eliminare un utente di database che sia owner di uno schema? Semplicemente mi viene impedito. Occorre, infatti, che prima elimini lo schema. Per far ciò serve che esso sia "vuoto", cioè che ad esso non appartenga nessun oggetto (tabella, stored procedure, etc..). Nel caso non sia vuoto, devo cancellare i suoi oggetti o trasferirli in un altro schema con l’istruzione T-SQL

ALTER SCHEMA [nuovo schema] TRANSFER [schema da cancellare].[nome oggetto da trasferire]

E’ interessante notare il comportamento del Management Studio di SQL 2008 che, diversamente da SQL 2005, mostra una message-box che mi chiede se voglio prima eliminare gli schema dell’owner che sto cancellando. 

Ma perchè un utente dovrebbe essere owner di uno schema? Questa è una tipica situazione che si riscontra in database migrati da SQL 2000, dove troviamo per ogni utente di database uno schema con lo stesso nome utente, il cui owner è appunto l’utente.

Posso, inoltre, incorrere in questa situazione anche con database creati con SQL 2005 / 2008, se utilizzo la (vecchia) stored procedure di sistema "sp_grantdbaccess" per mappare una login a uno user di database. Ad esempio:

  sp_grantdbaccess ‘MicheleRossi’, ‘MicheleRossi’
  GO

In tal caso, posso usare la "sp_revokedbaccess" per eliminare l’utente, senza dovermi preoccupare dello schema (sempre che questo sia vuoto). Ad esempio:

  sp_revokedbaccess ‘MicheleRossi’
  GO

Ricordo che con SQL 2005 sono state introdotte le istruzione T-SQL CREATE / DROP USER che sostituiscono rispettivamente sp_grantdbaccess / sp_revokedbaccess. Inoltre, la CREATE USER non implica la creazione di uno schema con lo stesso nome dell’utente, come invece avviene con la sp_grantdbaccess.

CREATE USER MicheleRossi
    FOR LOGIN MicheleRossi
GO
DROP USER MicheleRossi
GO

 

Chi è Davide Mauri

Microsoft Data Platform MVP dal 2007, Davide Mauri si occupa di Data Architecture e Big Data nel mondo dell'IoT. Attualmente ricopre il ruolo di "Director Software Development & Cloud Infrastructure" in Sensoria, societa specializzata nella creazione di Wearables e sensori per l'IoT applicati a tessuti ed oggetti sportivi.

Leggi Anche

Usare json su SQLServer 2005, 2008, 2012 e 2014 .. è possibile!

Vedere il supporto nativo di JSON su SQLServer 2016 (e anche su Azure SQLDatabase) mi …

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

one + three =

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.