Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Gäller för:SQL Server i Linux
SQL Assessment API tillhandahåller en mekanism för att utvärdera konfigurationen av SQL Server för bästa praxis. API:et levereras med en regeluppsättning som innehåller metodtips som rekommenderas av SQL Server-teamet. Den här regeluppsättningen utökas med lanseringen av nya versioner. Det är användbart att se till att SQL Server-konfigurationen är i linje med de rekommenderade metodtipsen.
Den Microsoft-levererade regeluppsättningen finns tillgänglig på GitHub. Du kan visa hela regeluppsättningen på lagringsplatsen exempel.
I den här artikeln får du lära dig att använda PowerShell för att köra SQL Assessment API:t för SQL Server på Linux och containrar.
Förutsättningar
Kontrollera att du installera PowerShell på Linux.
Installera
SqlServerPowerShell-modulen från PowerShell-galleriet genom att vara inloggad som användaremssql.su mssql -c "/usr/bin/pwsh -Command Install-Module SqlServer"
Konfigurera utvärderingen
SQL Assessment API tillhandahåller utdata i JSON-format. För att konfigurera SQL Assessment API, genomför följande steg:
Skapa en inloggning för SQL Server-bedömningar med SQL-autentisering i den instans du vill bedöma. Använd följande Transact-SQL skript för att skapa en inloggning och ett starkt lösenord. Lösenordet bör följa SQL Server-standardprincipen för lösenord. Lösenordet måste som standard vara minst åtta tecken långt och innehålla tecken från tre av följande fyra uppsättningar: versaler, gemener, bas-10 siffror och symboler. Lösenord kan vara upp till 128 tecken långa. Använd lösenord som är så långa och komplexa som möjligt.
USE [master]; GO CREATE LOGIN [assessmentLogin] WITH PASSWORD = N'<password>'; GRANT CONTROL SERVER TO [assessmentLogin]; GOBehörigheten
CONTROL SERVERfungerar för de flesta bedömningarna. Dock kan några bedömningar kräva sysadmin-behörighet . Om du inte genomför dessa bedömningar använder du i stället behörigheternaCONTROL SERVER.Spara inloggningsuppgifterna för att ansluta till instansen. Byt ut
<password>med lösenordet du använde i föregående steg.echo "assessmentLogin" > /var/opt/mssql/secrets/assessment echo "<password>" >> /var/opt/mssql/secrets/assessmentSkydda de nya autentiseringsuppgifterna för utvärdering genom att se till att endast den
mssqlanvändaren kan komma åt autentiseringsuppgifterna.chmod 600 /var/opt/mssql/secrets/assessment chown mssql:mssql /var/opt/mssql/secrets/assessment
Ladda ned utvärderingsskriptet
Följande exempelskript anropar SQL Assessment API med de uppgifter du skapade i föregående steg. Skriptet genererar JSON-utdata i katalogen /var/opt/mssql/log/assessments .
Not
SQL Assessment API kan också generera utdata i CSV- och XML-format.
Det här skriptet är tillgängligt för nedladdning från GitHub.
Du kan spara filen som /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
}
}
Not
När du kör detta skript i betrodda miljöer och får ett förinloggningshandskakningsfel, lägg till flaggan -TrustServerCertificate i kommandona för $serverName, $hostName, och Get-SqlInstance rader i koden.
Kör utvärderingen
Se till att
mssqlanvändaren äger skriptet och kan köra det.chown mssql:mssql /opt/mssql/bin/runassessment.ps1 chmod 700 /opt/mssql/bin/runassessment.ps1Skapa en loggmapp och ge användaren
mssqlbehörigheter för mappen.mkdir /var/opt/mssql/log/assessments/ chown mssql:mssql /var/opt/mssql/log/assessments/ chmod 0700 /var/opt/mssql/log/assessments/Du kan nu skapa din första bedömning som användare
mssql. Att köra bedömningar med den här användaren är säkrare, särskilt när du senare kör bedömningar automatiskt viacronellersystemd.su mssql -c "pwsh -File /opt/mssql/bin/runassessment.ps1"När kommandot är klart skapar det utdata i JSON-format. Du kan använda denna utdata med vilket verktyg som helst som stödjer parsning av JSON-filer, inklusive Visual Studio Code.