Blog > Février 2014
Modifier le propriétaire des objets d'une base


Dans le cadre d'un projet, j'ai eu besoin de modifier le propriétaire de plusieurs objets (tables, procédures et fonctions) sur une base de données. La procédure stockée sp_changeobjectowner permet de changer le propriétaire d'un objet en particulier :

EXEC sp_changeobjectowner 'object_name', 'new_owner'

Si vous êtes dans mon cas et que vous devez faire cette manipulation sur une multitude d'objets, il vaut mieux créer un script pour répéter cette action à votre place :

--BEGIN ----------------------------------------------
DECLARE @currentObject nvarchar(517)
DECLARE @qualifiedObject nvarchar(517)
DECLARE @currentOwner varchar(100)
DECLARE @newOwner varchar(100)

SET @currentOwner = 'CURRENT_USER'
SET @newOwner = 'TARGET_USER'

DECLARE alterOwnerCursor CURSOR FOR
SELECT sysobjects.name FROM dbo.sysobjects INNER JOIN sysusers ON sysobjects.uid = sysusers.uid WHERE sysusers.name = @currentOwner
OPEN alterOwnerCursor
FETCH NEXT FROM alterOwnerCursor INTO @currentObject
WHILE @@FETCH_STATUS = 0
BEGIN
     SET @qualifiedObject = @currentOwner + '.' + @currentObject
     EXEC sp_changeobjectowner @qualifiedObject, @newOwner
     FETCH NEXT FROM alterOwnerCursor INTO @currentObject
END
CLOSE alterOwnerCursor
DEALLOCATE alterOwnerCursor
--END ----------------------------------------------