Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

626
Vistas
Cómo obtener información confidencial en el componente de secuencia de comandos de SSIS en un flujo de datos

Tengo un flujo de datos SSIS que contiene un componente de secuencia de comandos como fuente. Me gustaría generar los datos de origen ejecutando un script en una base de datos de SQL Server. La cadena de conexión que se usará para conectarse a la base de datos está configurada para ser sensible. ¿Cómo puedo leer este parámetro sensible dentro del componente del script usando C#?

En una Tarea de Script, normalmente se lee por ejemplo como sigue:

 string mySecretPassword = Dts.Variables["$Project::MySecretPassword"].GetSensitiveValue().ToString

La clase Variable en una Tarea de secuencia de comandos tiene un método GetSensitiveValue . Sin embargo, Script Component Variable implementa la interfaz Microsoft.SqlServer.Dts.Runtime.Wrapper.Variable que no tiene definido el método GetSensitiveValue.

Supongamos que la cadena de conexión es un parámetro del proyecto por ahora.

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

A pesar de la falta de un método GetSensitiveValue existente en el Script Component, pude acceder al valor sin problemas.

Lo que me molestó fue mi nivel de protección de paquetes y cómo interactúa con los parámetros del proyecto que están marcados como confidenciales.

Definí un parámetro de proyecto llamado MySecretPassword y lo rellené con SO_71308161 y lo marqué como sensible.

Fuente del guión

Definí una salida de una sola columna y mi intención era simplemente insertar la contraseña en el flujo de datos para confirmar que podía acceder a ella.

 using System; using System.Data; using Microsoft.SqlServer.Dts.Pipeline.Wrapper; using Microsoft.SqlServer.Dts.Runtime.Wrapper; [Microsoft.SqlServer.Dts.Pipeline.SSISScriptComponentEntryPointAttribute] public class ScriptMain : UserComponent { public string MySecret; public override void PreExecute() { base.PreExecute(); MySecret = Variables.MySecretPassword; } public override void CreateNewOutputRows() { Output0Buffer.AddRow(); Output0Buffer.Column = this.MySecret; } }

Luego enruté los datos a una columna derivada y solté un visor de datos entre los dos. Mi código no lanzó una excepción, pero mostró una cadena vacía.

Si intentaba acceder a mi valor de parámetro confidencial en una tarea de secuencia de comandos usando myVariable.Value, arrojaría un error como se esperaba, pero estaba recuperando mi valor confidencial.

Nivel de protección del paquete

Me encantan las preguntas de StackOverflow que me enseñan cosas. Mi modo predeterminado es definir proyectos que usan un nivel de protección de Proyecto y paquete de DontSaveSensitive. Lo cual es incompatible con el uso de parámetros de proyecto sensibles. No es incompatible en el sentido de que arrojará una excepción, pero cuando ejecute el paquete, el acceso a ese valor se borrará (al menos para las cadenas).

Tan pronto como cambio el proyecto y luego el nivel de protección del paquete a EncryptSensitiveWithUserKey (o cualquier cosa que no sea DontSaveSensitive), tanto .GetSensitiveValue() de la tarea de secuencia de comandos como Variables.MySecretPassword del componente de secuencia de comandos funcionaron.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda