I am not sure why you get the error but you can modify the following and I think it helps.USE <database name>GO-- Do this for users who are DB ownerexec sp_dropuser '<Login1>'exec sp_grantdbaccess '<Login1>','<Login1>'exec sp_addrolemember 'db_owner','<Login1>'-- Do this for users who have data read and write rights (repeate it for any users you have)exec sp_dropuser '<Login2>'exec sp_grantdbaccess '<Login2>','<Login2>'exec sp_addrolemember 'db_datawriter','<Login2>'exec sp_addrolemember 'db_datareader','<Login2>'-- This part grants EXE rights to a specific login (repeate it for any users you have)declare @objname varchar(100)declare namelist insensitive cursor forselect namefrom sysobjectswhere xtype in('p','fn')and category=0open namelistfetch next from namelist into @objnamewhile @@fetch_status=0begin print @objname exec('grant execute on [dbo].[' + @objname + '] to [Login2]') fetch next from namelist into @objnameendclose namelistdeallocate namelistGoCanada DBA