Bir kaç günden beri müşteriler habire SQL server loginlerini değiştiriyorlar.. Bizim kontrol panelimizde user’ı açarken tabloların ownerlarını ilk açılan kullanıcı yapıyor ve eski login değiştirilmek için silinmeye kalkınca “The selected user cannot be dropped because the user owns objects.” hatası alıyor kullanıcı.
Hemen enterprise manager’ı açıp user’ı sileyim haklarını ayarlayım dedim ama sağ olsun enterprise managerda bunu yapabileceğim bir menü yok varsa bile fonksiyon disable.Böyle olunca iş başa düştü ve aşağıdaki Prosedür bulundu :
DECLARE @currentObject nvarchar(517) DECLARE @qualifiedObject nvarchar(517) DECLARE @currentOwner varchar(50) DECLARE @newOwner varchar(50) SET @currentOwner = 'ESKIUSER' SET @newOwner = 'YENIUSER' DECLARE alterOwnerCursor CURSOR FOR SELECT [name] FROM dbo.sysobjects WHERE xtype = 'U' or xtype = 'P' AND LEFT([name], 2) <> 'dt' OPEN alterOwnerCursor FETCH NEXT FROM alterOwnerCursor INTO @currentObject WHILE @@FETCH_STATUS = 0 BEGIN SET @qualifiedObject = CAST(@currentOwner as varchar) + '.' + CAST(@currentObject as varchar) EXEC sp_changeobjectowner @qualifiedObject, @newOwner FETCH NEXT FROM alterOwnerCursor INTO @currentObject END CLOSE alterOwnerCursor DEALLOCATE alterOwnerCursor
Tüm veritabanı toblolarının sahibini değiştirir.