Editando DTS Legacy en SQL Server 2005

¿Quien no se ha encontrado con este mensaje alguna vez?

Only the owner of DTS Package [NombreDelPaquete] or a 
member of sysadmin role may create new versions of it

Esto se debe a que los procedimientos del sistema que se encargar de administrar los paquetes tienen una validación donde solo se aceptan a los miembros de sysadmin. Ahora bien, como no existe un rol adecuado, podemos crear uno y modificar los procedimientos para que admitan un nuevo rol sin que esto sea una brecha de seguridad.

Vale la pena aclarar, que esto NO ESTA SOPORTADO POR MICROSOFT y que realizar este procedimiento no implica ninguna responsabilidad por parte del autor de esta nota.

1. Lo primero que necesitamos es un ROL:

USE [msdb]
GO
CREATE ROLE [DTSLegacyAdmin]
GO

2. Le asignamos permisos sobre la tabla de los DTSs:

 grant select on msdb.dbo.sysdtspackages to [DTSLegacyAdmin]
GO
grant delete on msdb.dbo.sysdtspackages to [DTSLegacyAdmin]
GO
grant update on msdb.dbo.sysdtspackages to [DTSLegacyAdmin]
GO

3. Modificamos los procedimientos sp_add_dtspackage y sp_drop_dtspackage de la siguiente manera:

Buscamos la línea de comprobación

IF (@owner_sid <> SUSER_SID() AND (ISNULL(IS_SRVROLEMEMBER(N'sysadmin'), 0) <> 1))

y la remplazamos con:

 --IF (@owner_sid <> SUSER_SID() AND (ISNULL(IS_SRVROLEMEMBER(N'sysadmin'), 0) <> 1))
IF (@owner_sid <> SUSER_SID() AND (ISNULL(IS_MEMBER (N'DTSLegacyAdmin'), 0) <> 1))

Para sp_drop_dtspackage buscamos:

IF (ISNULL(IS_SRVROLEMEMBER(N'sysadmin'), 0) <> 1)

y lo reemplazamos con:

-- IF (ISNULL(IS_SRVROLEMEMBER(N'sysadmin'), 0) <> 1)
  IF (ISNULL(IS_MEMBER (N'DTSLegacyAdmin'), 0) <> 1)

4. Agregamos usuarios al grupo

 USE [msdb]
GO
EXEC sp_addrolemember N'DTSLegacyAdmin', N'prueba'
GO
USE [msdb]
GO
EXEC sp_addrolemember N'DTSLegacyAdmin', N'prueba2'
GO

5. A probar!

Basado en la nota de sqlteam.com