Modifier le propriétaire des objets d'une base
2014-02-04 16:04:06.000
2014-02-04 16:04:06.000
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 :
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 :
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 ----------------------------------------------
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 ----------------------------------------------