【问题标题】:How to replace Password characters with * in connection string?如何在连接字符串中用 * 替换密码字符?
【发布时间】:2019-07-09 08:31:07
【问题描述】:

我没有收到关于这个question的正确帮助

所以我在这里发布我想到的另一个选项:

我有以下脚本可以更改级别 1100 和 1400 多维数据集/数据库的连接字符串

$newConnectionString = "Connection Timeout=120;User Id=UID1;Data Source=datasource.com;Password=password123553;Persist Security Info=True;Session Character Set=UTF8"

$AS = New-Object Microsoft.AnalysisServices.Server  
$AS.connect("$Server")

$cubeName = $Analysis_Server.Databases.FindByName($Cube)
$compatibility_lvl = $cubeName.CompatibilityLevel

if ($compatibility_lvl -lt 1200) #1103
{
    $cubeName.DataSources[0].ConnectionString = $newConnectionString
    $cubeName.DataSources[0].Update()

    $lt1200 = $($cubeName.DataSources[0].ConnectionString)
    Write-Host "$lt1200`r`n" -Fore yellow
}
else
{
    $TAS = new-Object Microsoft.AnalysisServices.Tabular.Server
    $TAS.Connect("$Server")

    $TAS.Databases[$Cube].model.datasources[0].ConnectionString = $newConnectionString
    $TAS.Databases[$Cube].Update([Microsoft.AnalysisServices.UpdateOptions]::ExpandFull)    

    $gt1200 = $($TAS.Databases[$Cube].model.datasources[0].ConnectionString)

    Write-Host "$gt1200`r`n" -Fore yellow
}

从这些陈述中:

$lt1200 = $($cubeName.DataSources[0].ConnectionString)
Write-Host "$lt1200`r`n" -Fore yellow

$gt1200 = $($TAS.Databases[$Cube].model.datasources[0].ConnectionString)
Write-Host "$gt1200`r`n" -Fore yellow

这是我得到的输出

连接超时=120;用户 ID=UID1;数据 Source=datasource.com;Password=password123553;Persist Security Info=True;Session Character Set=UTF8

我应该只将其作为输出返回:

Connection Timeout=120;User Id=UID1;Data Source=datasource.com;Persist Security Info=True;Session Character Set=UTF8

由于除了重新连接到服务器并打印出没有密码的连接字符串外,我找不到刷新数据源的方法,因此我希望用正则表达式替换密码,如下所示:

  1. 用所有星号替换密码值

连接超时=120;用户 ID=UID1;数据 Source=datasource.com;Password=********;Persist Security Info=True;Session Character Set=UTF8

  1. 保留密码值的第一个和最后一个字符,但将中间替换为全星

连接超时=120;用户 ID=UID1;数据 Source=datasource.com;Password=p*******3;Persist Security Info=True;Session Character Set=UTF8

  1. 保留密码的前 3 个值并用星号替换其余的值

连接超时=120;用户 ID=UID1;数据 Source=datasource.com;Password=pas********;Persist Security Info=True;Session Character Set=UTF8

我知道它会是这样的,但我不确定正则表达式对于上述情况会是什么:

$lt1200 = $($cubeName.DataSources[0].ConnectionString) -Replace($_ "Password=*?;", "Password=********");

【问题讨论】:

  • 谁是一个简单问题的大量背景信息。星星需要和密码一样长吗?
  • @Jakobii 是的,如果可能的话,它们应该是相同的长度,这样我们就可以知道正确的密码被更改了。另外,我发布了尽可能多的细节,因为我过去曾因为没有提供所有必要的细节来理解为什么或什么而受到嘲笑
  • 我在下面更新了我的评论以包含相同长度替换的示例。
  • @Jakobii 谢谢,其他两种情况呢?
  • 你的最终目标是什么?你只是想清除密码?您是否尝试使用您的 Windows 凭据进行连接?还是您只是想创建排除密码的日志?

标签: powershell


【解决方案1】:

您可能应该查看SqlConnectionStringBuilder .net 类。它可以解析连接字符串并将它们转换为对象。您不需要正则表达式来查找密码,您可以轻松地将密码替换为您想要的任何密码。

$builder = [System.Data.SqlClient.SqlConnectionStringBuilder]::New('Connection Timeout=120;User Id=UID1;Data Source=datasource.com;Password=password123553;')

$builder.Password

【讨论】:

  • 不幸的是,它有限且不支持会话字符集=UTF8 等附加键。因此它会导致错误:使用“1”参数调用“.ctor”的异常:“不支持关键字:'会话字符集'。”
  • 对不起。我对 Microsoft.AnalysisServices.Server 了解不多,我认为它类似于 sqlserver。我确信有一种预定义的方法可以将 Microsoft.AnalysisServices.Server 连接字符串转换为对象。
  • 很好,我刚刚从连接字符串中删除了 UTF8 部分:) 将此标记为答案。如果你不介意,你能回答这个问题吗? stackoverflow.com/questions/56944105/…
【解决方案2】:

替换为与密码相同的长度。不是很优雅,但很有效

function Hide-ConnectionStringPassword {
    param(
        [string]$ConnectionString
    )

    $re = [regex]::new("Password=(.*);")
    $match = $re.Match($ConnectionString)

    [string]$password = $match.Groups[1].Value
    [string]$stars = "*" * $password.Length
    return $ConnectionString -replace 'Password=.*;', "Password=$stars;"
}
Hide-ConnectionStringPassword "Source=datasource.com;Password=password123553;"

输出:

Source=datasource.com;Password=**************;

【讨论】:

  • 等待...也许你在我评论之前发布了这个。您可以根据密码长度将其设为星号吗?我不想这样硬编码 Password=********
  • 这是一个简单的函数,它将返回与密码长度相同的星星。
  • 有趣。如果我想保留密码值的第一个和最后一个字符,但将中间替换为所有星号怎么办:Password=p*******3;
  • 这部分能否更动态地知道密码在连接字符串中的位置?目前,数组 [1] 要求“密码”是字符串中的第二个“组”,但是否有可能让它智能地自行识别它? [字符串]$password = $match.Groups[1].Value
猜你喜欢
  • 1970-01-01
  • 2011-07-25
  • 2015-06-08
  • 2010-09-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-04
  • 1970-01-01
相关资源
最近更新 更多