Použití rozhraní SQL Assessment API pro SQL Server v Linuxu
platí pro:SQL Server – Linux
rozhraní SQL Assessment API poskytuje mechanismus pro vyhodnocení konfigurace SQL Serveru pro osvědčené postupy. Rozhraní API se dodává se sadou pravidel obsahující osvědčené postupy doporučené týmem SQL Serveru. Tato sada pravidel je rozšířena o vydání nových verzí. Je užitečné zajistit, aby konfigurace SQL Serveru byla v souladu s doporučenými osvědčenými postupy.
Sada odeslaných pravidel společnosti Microsoft je k dispozici na GitHubu. Můžete zobrazit celou sadu pravidel v úložišti ukázek .
V tomto článku se podíváme na dva způsoby spuštění rozhraní SQL Assessment API pro SQL Server v Linuxu a kontejnerech:
Rozšíření SQL Assessment pro Azure Data Studio (názorný náhled)
Rozšíření SQL Assessment pro Azure Data Studio (Preview) poskytuje mechanismus pro vyhodnocení konfigurace SQL Serveru pro osvědčené postupy.
S touto verzí Preview můžete:
- Posouzení SQL Serveru, databáze Azure SQL nebo služby Azure SQL Managed Instance a jejích databází s využitím integrovaných pravidel
- Získání seznamu všech předdefinovaných pravidel použitelných pro instanci a její databáze
- Export výsledků posouzení a seznamu použitelných pravidel jako skriptu pro uložení do tabulky SQL
- Vytváření sestav HTML o výsledcích posouzení
Spusťte posouzení SQL
- Po instalaci rozšíření SQL Assessment rozbalte seznam serverů, klikněte pravým tlačítkem na server nebo databázi, kterou chcete posoudit, a vyberte Spravovat.
- Potom v části Obecné vyberte sql Assessment. Na kartě Posouzení vyberte Spustit posouzení a proveďte posouzení vybraného SQL Serveru nebo Azure SQL databáze. Jakmile budou výsledky k dispozici, můžete použít funkce filtrování a řazení.
- Výběrem Exportovat ve scriptu získáte výsledky ve formátu pro vložení do tabulky. Můžete také vybrat Vytvořit sestavu HTML a uložit výsledky posouzení jako soubor HTML. Některá pravidla posouzení jsou určená pro konkrétní konfigurace SQL Serveru a některá pro jiné. Totéž platí pro pravidla databáze. Existují například pravidla, která platí jenom pro SQL Server 2016 (13.x) nebo
tempdb
databázi. - Tlačítko Zobrazit platná pravidla zobrazí pravidla posouzení, která se používají k hodnocení vašich serverů a databází po výběru možnosti Spustit hodnocení. Pokud chcete zobrazit informace o SQL Serveru a rozhraní SQL Assessment API, vyberte Informace. Výsledky relace posouzení si můžete prohlédnout na kartě Historie.
SQL Assessment API pomocí PowerShellu
Druhou možností je použít PowerShell ke spuštění skriptu rozhraní SQL Assessment API.
Požadavky
Ujistěte se, že nainstalujte PowerShell na Linuxu.
Nainstalujte modul PowerShell
SqlServer
z galerie PowerShell, běží pod uživatelemmssql
.su mssql -c "/usr/bin/pwsh -Command Install-Module SqlServer"
Nastavení posouzení
Výstup rozhraní SQL Assessment API je k dispozici ve formátu JSON. Abyste mohli rozhraní SQL Assessment API nakonfigurovat následujícím způsobem, musíte provést následující kroky:
V instanci, kterou chcete posoudit, vytvořte přihlášení pro posouzení SQL Serveru pomocí ověřování SQL. K vytvoření přihlášení a silného hesla můžete použít následující skript Transact-SQL (T-SQL). Vaše heslo by mělo postupovat podle výchozích zásad hesel SQL Serveru . Ve výchozím nastavení musí heslo obsahovat alespoň osm znaků a musí obsahovat znaky ze tří z následujících čtyř sad: velká písmena, malá písmena, číslice se základem 10 a symboly. Hesla můžou mít délku až 128 znaků. Používejte hesla, která jsou co nejdéle a složitá.
USE [master]; GO CREATE LOGIN [assessmentLogin] WITH PASSWORD = N'<password>'; ALTER SERVER ROLE [CONTROL SERVER] ADD MEMBER [assessmentLogin]; GO
Role
CONTROL SERVER
funguje pro většinu hodnocení. Existuje však několik posouzení, která mohou potřebovat oprávnění správce systému . Pokud tato pravidla nepoužíváte, doporučujeme použítCONTROL SERVER
oprávnění.Přihlašovací údaje pro přihlášení do systému uložte následujícím způsobem a znovu nahraďte
<password>
heslem, které jste použili v předchozím kroku.echo "assessmentLogin" > /var/opt/mssql/secrets/assessment echo "<password>" >> /var/opt/mssql/secrets/assessment
Zabezpečte nové ověřovací údaje posouzení tím, že zajistíte, aby k těmto údajům měl přístup pouze uživatel
mssql
.chmod 600 /var/opt/mssql/secrets/assessment chown mssql:mssql /var/opt/mssql/secrets/assessment
Stažení skriptu pro posouzení
Následuje ukázkový skript, který volá rozhraní SQL Assessment API pomocí přihlašovacích údajů vytvořených v předchozích krocích. Skript vygeneruje výstupní soubor ve formátu JSON v tomto umístění: /var/opt/mssql/log/assessments
.
Poznámka
Rozhraní SQL Assessment API může také generovat výstup ve formátech CSV a XML.
Tento skript je k dispozici ke stažení z GitHubu.
Tento soubor můžete uložit jako /opt/mssql/bin/runassessment.ps1
.
[CmdletBinding()] param ()
$Error.Clear()
# Create output directory if not exists
$outDir = '/var/opt/mssql/log/assessments'
if (-not ( Test-Path $outDir )) { mkdir $outDir }
$outPath = Join-Path $outDir 'assessment-latest'
$errorPath = Join-Path $outDir 'assessment-latest-errors'
if ( Test-Path $errorPath ) { remove-item $errorPath }
function ConvertTo-LogOutput {
[CmdletBinding()]
param (
[Parameter(ValueFromPipeline = $true)]
$input
)
process {
switch ($input) {
{ $_ -is [System.Management.Automation.WarningRecord] } {
$result = @{
'TimeStamp' = $(Get-Date).ToString("O");
'Warning' = $_.Message
}
}
default {
$result = @{
'TimeStamp' = $input.TimeStamp;
'Severity' = $input.Severity;
'TargetType' = $input.TargetType;
'ServerName' = $serverName;
'HostName' = $hostName;
'TargetName' = $input.TargetObject.Name;
'TargetPath' = $input.TargetPath;
'CheckId' = $input.Check.Id;
'CheckName' = $input.Check.DisplayName;
'Message' = $input.Message;
'RulesetName' = $input.Check.OriginName;
'RulesetVersion' = $input.Check.OriginVersion.ToString();
'HelpLink' = $input.HelpLink
}
if ( $input.TargetType -eq 'Database') {
$result['AvailabilityGroup'] = $input.TargetObject.AvailabilityGroupName
}
}
}
$result
}
}
function Get-TargetsRecursive {
[CmdletBinding()]
Param (
[Parameter(ValueFromPipeline = $true)]
[Microsoft.SqlServer.Management.Smo.Server] $server
)
$server
$server.Databases
}
function Get-ConfSetting {
[CmdletBinding()]
param (
$confFile,
$section,
$name,
$defaultValue = $null
)
$inSection = $false
switch -regex -file $confFile {
"^\s*\[\s*(.+?)\s*\]" {
$inSection = $matches[1] -eq $section
}
"^\s*$($name)\s*=\s*(.+?)\s*$" {
if ($inSection) {
return $matches[1]
}
}
}
return $defaultValue
}
try {
Write-Verbose "Acquiring credentials"
$login, $pwd = Get-Content '/var/opt/mssql/secrets/assessment' -Encoding UTF8NoBOM -TotalCount 2
$securePassword = ConvertTo-SecureString $pwd -AsPlainText -Force
$credential = New-Object System.Management.Automation.PSCredential ($login, $securePassword)
$securePassword.MakeReadOnly()
Write-Verbose "Acquired credentials"
$serverInstance = '.'
if (Test-Path /var/opt/mssql/mssql.conf) {
$port = Get-ConfSetting /var/opt/mssql/mssql.conf network tcpport
if (-not [string]::IsNullOrWhiteSpace($port)) {
Write-Verbose "Using port $($port)"
$serverInstance = "$($serverInstance),$($port)"
}
}
# IMPORTANT: If the script is run in trusted environments and there is a prelogin handshake error,
# add -TrustServerCertificate flag in the commands for $serverName, $hostName and Get-SqlInstance lines below.
$serverName = (Invoke-SqlCmd -ServerInstance $serverInstance -Credential $credential -Query "SELECT @@SERVERNAME")[0]
$hostName = (Invoke-SqlCmd -ServerInstance $serverInstance -Credential $credential -Query "SELECT HOST_NAME()")[0]
# Invoke assessment and store results.
# Replace 'ConvertTo-Json' with 'ConvertTo-Csv' to change output format.
# Available output formats: JSON, CSV, XML.
# Encoding parameter is optional.
Get-SqlInstance -ServerInstance $serverInstance -Credential $credential -ErrorAction Stop
| Get-TargetsRecursive
| ForEach-Object { Write-Verbose "Invoke assessment on $($_.Urn)"; $_ }
| Invoke-SqlAssessment 3>&1
| ConvertTo-LogOutput
| ConvertTo-Json -AsArray
| Set-Content $outPath -Encoding UTF8NoBOM
}
finally {
Write-Verbose "Error count: $($Error.Count)"
if ($Error) {
$Error
| ForEach-Object { @{ 'TimeStamp' = $(Get-Date).ToString("O"); 'Message' = $_.ToString() } }
| ConvertTo-Json -AsArray
| Set-Content $errorPath -Encoding UTF8NoBOM
}
}
Poznámka
Když tento skript spustíte v důvěryhodných prostředích a zobrazí se chyba handshake prelogin, přidejte příznak -TrustServerCertificate
do příkazů na řádcích kódu $serverName
, $hostName
a Get-SqlInstance
.
Proveďte posouzení
Ujistěte se, že skript je vlastněn a je spustitelný pro
mssql
.chown mssql:mssql /opt/mssql/bin/runassessment.ps1 chmod 700 /opt/mssql/bin/runassessment.ps1
Vytvořte složku protokolu a přiřaďte uživateli
mssql
ve složce příslušná oprávnění:mkdir /var/opt/mssql/log/assessments/ chown mssql:mssql /var/opt/mssql/log/assessments/ chmod 0700 /var/opt/mssql/log/assessments/
Teď můžete vytvořit první posouzení, ale ujistěte se, že to uděláte jako
mssql
uživatel, aby se následná posouzení mohly spouštět automaticky prostřednictvímcron
nebosystemd
bezpečněji.su mssql -c "pwsh -File /opt/mssql/bin/runassessment.ps1"
Po dokončení příkazu se výstup vygeneruje ve formátu JSON. Tento výstup je možné integrovat s libovolným nástrojem, který podporuje parsování souborů JSON. Jedním z takových příkladů nástrojů je Red Hat Insights .