我有一组脚本来执行批量数据导入,我试图将它们包含在使用 SqlCmd 模式的单个“调用”脚本中。我的问题是每个脚本都包含相同的一组定义路径或公共对象的声明变量。当我运行 'calling' 脚本时,我收到了 vars 已经被声明的错误。
如果我从单个脚本中提取声明,Intellisense 当然会抱怨它们没有被声明。脚本本身也需要与“调用”脚本隔离运行,因此理想情况下,我还需要在各个脚本中声明变量。
谢谢你。
示例:通用单个脚本声明和初始 SET
DECLARE @path varchar(256),
@currPeriod varchar(25),
@pastPeriod varchar(25),
@period varchar(25),
@fileName varchar(256),
@sheet varchar(25),
@sql varchar(MAX)
SET @path = 'H:\Scripts\DataImport';
SET @currPeriod = CONCAT(DATEPART(year,GETDATE()),'-',CONVERT(varchar(2), getdate(), 101));
SET @pastPeriod = CONCAT(DATEPART(year,DateAdd(month, -1, Convert(date, GETDATE()))),'-',CONVERT(varchar(2), DateAdd(month, -1, Convert(date, GetDate())), 101));
SET @period = @pastPeriod; -- Change to currPeriod or pastPeriod based on import type.
SET @fileName = 'ReferenceClients-' + @period + '.xlsx';
SET @sheet = '[Sheet1$]';
SET @sql = 'INSERT INTO …Run Code Online (Sandbox Code Playgroud) 我有一个访问数据库的内部WPF客户端应用程序.
该应用程序是支持团队的核心资源,因此包括客户端的远程访问/登录信息.目前这个数据库不能通过网络界面等获得,但有一天很可能.
远程访问信息包括客户端网络的用户名和密码,以便我们可以远程支持客户的软件应用程序.我需要将用户名和密码存储在数据库中,并为支持顾问提供访问权限,以便他们可以登录客户端系统然后提供支持.希望这是有道理的.
所以困境是我不想在数据库中以明文形式存储用户名和密码,以确保如果数据库遭到入侵,我就不会向任何获取数据库的人提供访问我们客户端网络的权限.
我已经看过密码的双向加密,但正如他们所说,双向与明文没有太大的不同,就好像你可以解密它一样,攻击者也可以......最终.这里的问题是我已经设置了一个方法来使用存储在应用程序中的salt和密码,我使用了存储在db中的salt,但都有它们的弱点,即如果应用程序被反映它暴露了盐等
如何保护我的数据库中的用户名和密码,但仍然能够让我的支持顾问查看应用程序中的信息,以便他们可以使用它来登录?
这显然与存储用户密码不同,因为这是一种方式,因为我不需要知道它们是什么.但我确实需要知道客户端的远程访问密码是什么,因为我们需要在远程访问密码时输入密码.
任何人都有一些关于什么是最好的方法的理论?
更新 我正在尝试构建的功能是我们的CRM应用程序,它将存储客户端的远程访问详细信息.CRM系统提供呼叫/问题跟踪功能,在调查问题的过程中,支持顾问需要远程访问.然后,他们将查看客户端的远程访问详细信息并建立连接
我有一个生成BouncyCastle RSA密钥对的函数.我需要加密私钥,然后将加密的私钥和公钥存储到单独的SQL2008数据库字段中.
我使用以下内容获取密钥对:
private static AsymmetricCipherKeyPair createASymRandomCipher()
{
RsaKeyPairGenerator r = new RsaKeyPairGenerator();
r.Init(new KeyGenerationParameters(new SecureRandom(), 1024));
AsymmetricCipherKeyPair keys = r.GenerateKeyPair();
return keys;
}
Run Code Online (Sandbox Code Playgroud)
这是正确的返回键,但我不知道如何加密私钥然后将其存储在数据库中.
这是我目前使用的加密数据(错误?):
public static byte[] encBytes2(AsymmetricKeyParameter keyParam, byte[] Key, byte[] IV)
{
MemoryStream ms = new MemoryStream();
Rijndael rjdAlg = Rijndael.Create();
rjdAlg.Key = Key;
rjdAlg.IV = IV;
CryptoStream cs = new CryptoStream(ms, rjdAlg.CreateEncryptor(), CryptoStreamMode.Write);
byte[] keyBytes = System.Text.Encoding.Unicode.GetBytes(keyParam.ToString());
cs.Write(keyBytes, 0, keyBytes.Length);
cs.Close();
byte[] encryptedData = ms.ToArray();
return encryptedData;
}
Run Code Online (Sandbox Code Playgroud)
显然,我转换keyParam.ToString()的keyBytes设置不正确,因为它只转换KeyParameter名称,而不是实际值.我正在向此函数提交以前的密钥对返回密钥.私有.
另一个问题是因为我没有加密公钥我应该在SQL2008数据库,nvarchar(256)或其他中存储什么格式?
任何帮助将不胜感激.
在WPF中,我有一个窗口打开第二个窗口,允许进行一些数据选择.一旦做出选择,我就想要提交/关闭第二个/子窗口并将数据推回到开始/父窗口.
我可以通过公共属性将数据从父级推送到子窗口,但是还没有找到如何以其他方式将其恢复.有人可以帮忙吗?
我用来打开窗口并设置一些属性的代码如下:
Dim wdwContacts As New appContacts()
wdwContacts.selClientID = selClientID
wdwContacts.selEmailToCCType = selEmailToCCType
wdwContacts.pullToAddresses = txEmailTo.Text
wdwContacts.pullCCAddresses = txEmailCC.Text
wdwContacts.Owner = Me
wdwContacts.WindowStartupLocation = Windows.WindowStartupLocation.CenterOwner
wdwContacts.Show()
Run Code Online (Sandbox Code Playgroud)
基础是我将第一个窗口作为电子邮件撰写页面,其中有一个按钮,单击该按钮会显示电子邮件联系人列表.它从第一个窗口中引入任何先前选择的电子邮件地址,并在子窗口/电子邮件列表中自动选择它们.如果在电子邮件列表上进行了进一步选择,当操作单击完成/提交/关闭按钮时,它会将新选择列表推回到第一个/父窗口上的相关TextBox中.
谢谢
c# ×3
.net ×2
sql-server ×2
wpf ×2
bouncycastle ×1
database ×1
deployment ×1
encryption ×1
private-key ×1
sqlcmd ×1
t-sql ×1
vb.net ×1