¿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