关于SSIS中解密FTP字符串的方法
FTP(File Transfer Protocol),是文件传输协议的简称。用于Internet上的控制文件的双向传输。同时,它也是一个应用程序(Application)。用户可以通过它把自己的PC机与世界各地所有运行FTP协议的服务器相连,访问服务器上的大量程序和信息。 而在SSIS中,有一个FTP的组件,可以对它进行信息的配置,包括用户名、密码、端口号等等,如下图:
一般情况下,这些信息都是存在数据库中,然后通过SSIS菜单下的包配置来进行赋值,然而弊端就在于包配置信息无法直接读取加密信息,选择直接给FTP连接管理直接赋值的话,密码是无法保存的(PS:这是SSIS的一种自带保护机制),脚本是个好东西,在这里可以用来解决这个问题。
在上一篇有写到DES加密解密的方法,这里就不做赘述了,其实最主要的是要获得FTP的这个对象,首先我想到的是用DTS对象的Connections["FTPName"]来获取整个连接信息,结果经过测试得到的只是:Server name 和 Server port 值,所以用Dts对象的Connections获取这条路走不通,只能想另外的办法。在SQL Server 2012 Integration Services 高级教程(第二版) 中提到FtpClientConnected这个对象,测试可以通过
ConnectionManager conn = default(ConnectionManager);
FtpClientConnection ftp = default(FtpClientConnection);
//获取FTP连接,名字保持一致,中文会导致乱码
conn = Dts.Connections["FTP Connection Manager"];
ftp = new FtpClientConnection(conn.AcquireConnection(null));
//ZCC为数据库中FTP连接信息表中的主键,获取密文密码
string CryPwd = GetConDb("ZCC")[];
//对密文密码就行解密,得到明文
string Oldpwd = DecryptDES(CryPwd, UUkey);
//将解密后的密码赋值给FTP对应的参数
ftp.ServerName = GetConDb("ZCC")[];
ftp.ServerPort = int.Parse(GetConDb("ZCC")[]);
ftp.ServerUserName = GetConDb("ZCC")[];
ftp.ServerPassword = Oldpwd;
代码是其次,最主要的是思想,在这里我做得处理是,从数据库中取出来对应的 Server Name、Server Port、ServerUserName、ServerPassword,然后用拼接字符串的方式连一起,然后用Split分割成一个数组,当然也可以直接将这四个数据放到数组中,GetConDb就是一个返回类型为数组的方法,返回的数组就是这四个数值,所以当得到ftp这个对象的时候,就可以根据数组的索引来给ftp对象中对应的配置参数赋值了。
public static string[] GetConDb(string MainConn)
{
string Username = "";
string UserPassword = "";
string Ip = "";
string Port = "";
string constr = "Data Source=.;Initial Catalog=ICBC;Integrated Security=SSPI;";
string sqlstr = @"select * from ICBC.dbo.[FTPConfigurations] where FTPMainConn='" + MainConn+ "'";
SqlConnection conn = new SqlConnection(constr);
SqlCommand cmd = new SqlCommand(sqlstr, conn);
conn.Open();
try
{
DataTable dt = new DataTable();
SqlDataAdapter sda = new SqlDataAdapter(cmd);
sda.Fill(dt);
string ccc = dt.Rows[]["FTPConnPath"].ToString();
for (int i = ; i < dt.Rows.Count; i++)
{
string Sername = dt.Rows[i]["FTPConnPath"].ToString();
if (Sername.Contains("ServerUserName"))
{
Username = dt.Rows[i]["ConfiguredValue"].ToString();
}
if (Sername.Contains("ServerPassword"))
{
UserPassword = dt.Rows[i]["FTPConnPwd"].ToString();
}
if (Sername.Contains("[FTPConnectionString]"))
{
string ServerPort = dt.Rows[i]["FTPConnValue"].ToString();
Ip = ServerPort.Substring(, ServerPort.Length - );
Port = ServerPort.Substring(ServerPort.Length - , );
} } string all = Username + ";" + UserPassword + ";" + Ip + ";" + Port;
string[] strDb = all.Split(';');
return strDb;
} catch (Exception ex)
{
throw new Exception(ex.Message);
} finally
{
conn.Close();
} }
权当做学习笔记
-----市人皆大笑,举手揶揄之
关于SSIS中解密FTP字符串的方法的更多相关文章
- 关于SSIS中解密数据库字符串的方法
此文章适合于SSIS新手,我是个小白,在繁复查阅资料后仍无果到最后解决问题,走了很多弯路,现在讲其中一些关于SSIS的理解写出来,供大家参考,在正文之前,我就我自己的理解,阐明一些概念. 什么是SSI ...
- [翻译]python3中新的字符串格式化方法-----f-string
从python3.6开始,引入了新的字符串格式化方式,f-字符串. 这使得格式化字符串变得可读性更高,更简洁,更不容易出现错误而且速度也更快. 在本文后面,会详细介绍f-字符串的用法. 在此之前,让我 ...
- (数据科学学习手札131)pandas中的常用字符串处理方法总结
本文示例代码及文件已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 在日常开展数据分析的过程中,我们经常需要对 ...
- javascript中数组和字符串的方法比较
× 目录 [1]可索引 [2]转换 [3]拼接[4]创建[5]位置 前面的话 字符串和数组有很多的相同之处,它们的方法众多,且相似度很高:但它们又有不同之处,字符串是不可变值,于是可以把其看作只读的数 ...
- Sql Server中三种字符串合并方法的性能比较
文章来自:博客园-DotNet菜园 最近正在处理一个合并字符吕的存储过程,在一个测试系统的开发中,要使用到字符串合并功能,直接在Sql中做.示例:有表內容﹕名称 內容1 abc1 ...
- ES6中的模板字符串使用方法
传统的 JavaScript 语言,输出模板通常是这样写的. $('#result').append( 'There are <b>' + basket.count + '</b&g ...
- mysql中replace替换字符串更改方法
MySQL中update替换部分字符串replace的简单用法 近日,遇到了需要将部分字符串替换为另外的字符,平时用的最多的是直接update整个字段值,在这种情况下效率比较低,而且容易出错.其实my ...
- 在SQL SERVER中批量替换字符串的方法
UPDATE MainData SET Content = )) , 'XM00000137' , 'XM00000078') WHERE [Key] IN (SELECT md_key FROM i ...
- thinkphp模板中截取中文字符串的方法分享
前段用thinkphp写了一个系统,感觉thinkphp学起来比较容易,开发起来了比较顺手,其中一个关键的因素就是它的模版引擎相当强大,使用方法跟smarty类似,在模版中还可以用php代码,有模版包 ...
随机推荐
- 关于web.config中<customErrors>节点说明
<customErrors>节点用于定义一些自定义错误信息的信息.此节点有Mode和defaultRedirect两个属性,其中defaultRedirect属性是一个可选属性,表示应用程 ...
- Ubuntu下的PHP开发环境架设
Ubuntu下的PHP开发环境架设 今天重新装了ubuntu那么就吧过程记录下. 打开终端,也就是命令提示符. 我们先来最小化组建安装,按照自己的需求一步一步装其他扩展.命令提示符输入如下命令: ...
- FTP提示505错误解决办法
使用ServerU建FTP服务器时,选定了锁定主文件夹,不选即可解决问题.
- centos6修改nameserver
1.直接修改/etc/resolv.conf,重启网卡 #service network restart 后发现并没有修改掉 2.直接修改ifcfg-eth0文件 /etc/sysconfig/net ...
- Mybatis异常--java.lang.IllegalArgumentException: NO ENUM const class org.apache.ibatis.type.JdbcType.int
今天下午写代码时发现一直报错,找了半天都没找到错误原因. 最后才发现原来是XML配置错误,某条属性的JdbcType我按照以前ibatis的习惯写的int,但是Mybatis不识别的. 上Mybati ...
- remi
很简单呀,又不用自己编译.用 http://rpms.remirepo.net/ 这个 remi 的包,直接 yum install php-swoole 就完事了 安装remi包也很简单, yum ...
- Redis学习笔记(3)-Hash
package cn.com; import java.util.HashMap; import java.util.List; import java.util.Map; import java.u ...
- android 屏幕分辨率 更改
手头上有一个320x240的LCD.运行android时,显示内容过大,需要更改屏幕的分辨率. 参考链接 http://www.bkjia.com/Androidjc/899396.html http ...
- mybatis---实现关联表查询
推荐学习博客: 1.http://www.cnblogs.com/xdp-gacl/p/4264440.html 2.http://www.cnblogs.com/yaobolove/p/544404 ...
- Ubuntu 汉化时ubuntu software database is broken错误解决
关于Ubuntu 汉化时的错误解决:按照网上的方法没有解决 最后 删掉thunderbird mail .这个软件,顺利解决!! 错误:thunderbird-locale-en: Depends: ...