Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A következőkre vonatkozik:SQL Server Linux rendszeren
Az SQL Assessment API mechanizmust biztosít az SQL Server konfigurációjának értékelésére a legjobb gyakorlatok érdekében. Az API egy szabálykészlettel érkezik, amely az SQL Server csapata által ajánlott ajánlott eljárásokat tartalmazza. Ez a szabálykészlet az új verziók kiadásával bővül. Érdemes meggyőződni arról, hogy az SQL Server konfigurációja összhangban van az ajánlott eljárásokkal.
A Microsoft által kiadott szabálykészlet elérhető a GitHub-on. A teljes szabálykészletet megtekintheti a mintaadattárban.
Ebben a cikkben a PowerShell segítségével futtathatod az SQL Assessment API-t SQL Server on Linux és konténerek számára.
Előfeltételek
Győződjön meg arról, hogy a PowerShellt telepíti Linuxra.
Telepítse a
SqlServerPowerShell-modult a PowerShell-katalógusból, amelymssqlfelhasználóként fut.su mssql -c "/usr/bin/pwsh -Command Install-Module SqlServer"
Az értékelés beállítása
Az SQL Assessment API JSON formátumban nyújt kimenetet. Az SQL Assessment API konfigurálásához teljesítse a következő lépéseket:
Hozz létre bejelentkezést SQL Server értékelésekhez SQL hitelesítéssel abban az instance-ban, amelyet értékelni szeretnél. Használd a következő Transact-SQL szkriptet bejelentkezés és egy erős jelszó létrehozásához. A jelszónak az SQL Server alapértelmezett jelszóházirendetkell követnie. Alapértelmezés szerint a jelszónak legalább nyolc karakter hosszúnak kell lennie, és a következő négy készletből három karakterből kell állnia: nagybetűk, kisbetűk, 10 számjegyből és szimbólumokból. A jelszavak legfeljebb 128 karakter hosszúak lehetnek. Használjon olyan jelszavakat, amelyek a lehető legkomplexebbek és hosszúak.
USE [master]; GO CREATE LOGIN [assessmentLogin] WITH PASSWORD = N'<password>'; GRANT CONTROL SERVER TO [assessmentLogin]; GOAz
CONTROL SERVERengedély a legtöbb értékelésnél érvényes. Azonban néhány értékeléshez rendszergazdai jogosultságot igényelhet. Ha nem végzed el ezeket a felméréseket, használd a(z)CONTROL SERVERengedélyeket.Tárold a hozzáféréshez szükséges adatokat az instance-hoz. Cseréld
<password>le a jelszót, amit az előző lépésben használtál.echo "assessmentLogin" > /var/opt/mssql/secrets/assessment echo "<password>" >> /var/opt/mssql/secrets/assessmentAz új értékelési hitelesítő adatok védelméhez biztosíthatja, hogy csak a
mssqlfelhasználó férhessen hozzá a hitelesítő adatokhoz.chmod 600 /var/opt/mssql/secrets/assessment chown mssql:mssql /var/opt/mssql/secrets/assessment
Az értékelési szkript letöltése
A következő mintaszkript az SQL Assessment API-t hívja az előző lépésekben létrehozott hitelesítő adatok alapján. A szkript generálja a JSON kimenetet a /var/opt/mssql/log/assessments könyvtárban.
Jegyzet
Az SQL Assessment API CSV- és XML-formátumban is képes kimenetet létrehozni.
Ez a szkript letölthető GitHub.
Ezt a fájlt /opt/mssql/bin/runassessment.ps1ként mentheti.
[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
}
}
Jegyzet
Amikor ezt a szkriptet megbízható környezetben futtatod, és prelogin handshake hiba jelenik meg, add hozzá a -TrustServerCertificate kapcsolót a $serverName, $hostName és Get-SqlInstance sorok parancsaihoz a kódban.
Hajtsa végre az értékelést
Győződj meg róla, hogy a
mssqlfelhasználó birtokolja a szkriptet, és képes végrehajtani.chown mssql:mssql /opt/mssql/bin/runassessment.ps1 chmod 700 /opt/mssql/bin/runassessment.ps1Hozz létre egy naplómappát, és add meg a
mssqlfelhasználó számára a jogosultságokat a mappához.mkdir /var/opt/mssql/log/assessments/ chown mssql:mssql /var/opt/mssql/log/assessments/ chmod 0700 /var/opt/mssql/log/assessments/Most már felhasználóként készítheted el az első értékelésedet
mssql. Az értékelések ennek a felhasználónak a nevében való futtatása biztonságosabb, különösen akkor, ha a későbbi értékeléseket automatikusan acronvagy asystemdhasználatával futtatják.su mssql -c "pwsh -File /opt/mssql/bin/runassessment.ps1"Amikor a parancs befejeződik, a kimenetet JSON formátumban hozza létre. Ezt a kimenetet bármilyen eszközzel használhatod, amely támogatja a JSON fájlok parsingát, beleértve a Visual Studio Code-ot is.