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 egy olyan mechanizmust biztosít, amely kiértékeli az SQL Server konfigurációját az ajánlott eljárásokhoz. 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 kiszállított szabálykészlete elérhető a GitHubon. A teljes szabálykészletet megtekintheti a mintaadattárban.
Ebben a cikkben két módot vizsgálunk meg az SQL Assessment API futtatására az SQL Serveren Linuxon és konténereken.
- SQL Assessment-bővítmény az Azure Data Studio-hoz (előzetes verzió)
- SQL Assessment API a PowerShell-lel
SQL Assessment-bővítmény az Azure Data Studióhoz (előzetes verzió)
Az Azure Data Studio SQL Assessment bővítménye (előzetes verzió) egy mechanizmust biztosít az SQL Server konfigurálásának értékeléséhez az ajánlott eljárásokhoz.
Ezzel az előzetes verzióval a következőt teheti:
- A beépített szabályok segítségével értékelje a SQL Server-t, az Azure SQL-adatbázist vagy a felügyelt Azure SQL-példányt és azok adatbázisait.
- Egy példányra és annak adatbázisára vonatkozó összes beépített szabály listájának lekérése
- Kiértékelési eredmények exportálása és az alkalmazandó szabályok listája szkriptként az SQL-táblában való tároláshoz
- HTML-jelentések létrehozása az értékelések eredményeiről
SQL-felmérés indítása
- Az SQL Assessment bővítmény telepítése után bontsa ki a kiszolgálólistát, kattintson a jobb gombbal egy kiértékelni kívánt kiszolgálóra vagy adatbázisra, és válassza kezelése lehetőséget.
- Ezután az Általános szakaszban válassza SQL Assessmentlehetőséget. Az Értékelés lapon válassza a Felmérés meghívása lehetőséget a kiválasztott SQL Server vagy Azure SQL-adatbázis kiértékeléséhez. Miután az eredmények elérhetővé válnak, használhatja a szűrési és rendezési funkciókat.
- Válassza a Szkriptként exportálás lehetőséget, hogy az eredményeket beszúró táblázatformátumban kapja meg. Az értékelési eredmények HTML-fájlként való mentéséhez HTML-jelentés létrehozása is kiválasztható. Egyes értékelési szabályok bizonyos SQL Server-konfigurációkra, másokra vonatkoznak. Ugyanez igaz az adatbázisszabályokra is. Vannak például olyan szabályok, amelyek csak az SQL Server 2016 -ra (13.x) vagy a
tempdb-adatbázisra vonatkoznak. - A Vonatkozó szabályok megtekintése gomb megjeleníti a kiszolgálók és adatbázisok értékeléséhez használt értékelési szabályokat, miután kiválasztotta Az értékelés meghívásalehetőséget. Az SQL Server és az SQL Assessment API adatainak megtekintéséhez válassza Információlehetőséget. Az értékelési munkamenet eredményei az Előzmények lapon tekinthetők meg.
SQL Assessment API PowerShell segítségével
A második lehetőség a PowerShell használata az SQL Assessment API-szkript futtatásához.
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 kimenete JSON formátumban érhető el. Az SQL Assessment API konfigurálásához az alábbi lépéseket kell végrehajtania:
Az Ön által értékelni kívánt példányban hozzon létre egy bejelentkezést az SQL Server értékeléséhez az SQL hitelesítés használatával. A következő Transact-SQL (T-SQL) szkripttel hozhat létre bejelentkezést és erős jelszót. 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>'; ALTER SERVER ROLE [CONTROL SERVER] ADD MEMBER [assessmentLogin]; GOA
CONTROL SERVERszerepkör a legtöbb értékelésnél működik. Vannak azonban olyan értékelések, amelyekhez sysadmin jogosultságokra lehet szükség. Ha nem futtatja ezeket a szabályokat, akkor azCONTROL SERVERengedélyek használatát javasoljuk.A bejelentkezéshez használt hitelesítő adatokat az alábbiak szerint tárolja, és cserélje le ismét a
<password>az előző lépésben használt jelszóra.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
Az alábbi példaszkript meghívja az SQL Assessment API-t az előző lépésekben létrehozott hitelesítő adatok használatával. A szkript létrehoz egy kimeneti fájlt JSON formátumban ezen a helyen: /var/opt/mssql/log/assessments.
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
Ha megbízható környezetben futtatja ezt a szkriptet, és prelogin kézfogási hibát kap, adja hozzá a -TrustServerCertificate jelzőt a kód $serverName, $hostName és Get-SqlInstance sorainak parancsaihoz.
Hajtsa végre az értékelést
Győződjön meg arról, hogy a szkript
mssqltulajdonában van és végrehajtható.chown mssql:mssql /opt/mssql/bin/runassessment.ps1 chmod 700 /opt/mssql/bin/runassessment.ps1Hozzon létre naplómappát, és rendelje hozzá a megfelelő engedélyeket a
mssqlfelhasználóhoz a mappában:mkdir /var/opt/mssql/log/assessments/ chown mssql:mssql /var/opt/mssql/log/assessments/ chmod 0700 /var/opt/mssql/log/assessments/Most már létrehozhatja az első értékelést, de győződjön meg róla, hogy ezt
mssqlfelhasználóként teszi, így a későbbi értékelések automatikusan futtathatókcronvagysystemdbiztonságosabban.su mssql -c "pwsh -File /opt/mssql/bin/runassessment.ps1"A parancs befejeződése után a kimenet JSON formátumban jön létre. Ez a kimenet bármilyen olyan eszközzel integrálható, amely támogatja a JSON-fájlok elemzését. Az egyik ilyen példaeszköz a Red Hat Insights .