Как заменить символы пароля на * в строке подключения? - PullRequest
0 голосов
/ 09 июля 2019

Я не получил правильную помощь по этому вопросу

, поэтому я публикую здесь другой вариант, который я имею в виду:

У меня есть следующий скрипт, которыйизменяет строки подключения уровня 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; Идентификатор пользователя = UID1; Источник данных = datasource.com; Пароль = пароль123553; Постоянная информация о безопасности = Истина; Набор символов сеанса = UTF8

Я должен получить только это как вывод:

Тайм-аут соединения = 120; Идентификатор пользователя = UID1; Источник данных = datasource.com; Информация о персистентной безопасности = Истина; Набор символов сеанса = UTF8

, так как я не могу найтиспособ обновления источника данных, кроме повторного подключения к серверу и распечатки строки подключения без пароля, я ищу регулярное выражение заменить пароль в следующих сценариях:

  1. заменить значение пароля всеми звездочками

Время ожидания соединения = 120; Идентификатор пользователя = UID1; Источник данных = datasource.com; Пароль = ********; Информация о сохранении безопасности = Истина; Набор символов сеанса = UTF8

оставьте первый и последний символы значения пароля, но замените середину всеми звездами

Тайм-аут подключения = 120; Идентификатор пользователя = UID1; Источник данных = datasource.com; Пароль= p ******* 3; Persist Security Info = True; набор символов сеанса = UTF8

сохраните первые 3 значения пароля и замените остальные звездочками

Тайм-аут соединения = 120; Идентификатор пользователя = UID1; Источник данных = datasource.com; Пароль = pas ********; Persist Security Info = True; набор символов сеанса = UTF8

Я знаю, что это будет примерно так, но я не уверен, что регулярное выражение будет для вышеуказанных сценариев:

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

Ответы [ 2 ]

1 голос
/ 09 июля 2019

Вам, вероятно, следует заглянуть в класс SqlConnectionStringBuilder .net. он может анализировать строки подключения и преобразовывать их в объект. вам не понадобится регулярное выражение для поиска пароля, и вы можете легко заменить пароль на любой, который вам понравится.

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

$builder.Password
1 голос
/ 09 июля 2019

заменить на ту же длину, что и пароль. не очень элегантно, но работает

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=**************;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...