Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Şunlar için geçerlidir:Linux üzerinde SQL Server
SQL Değerlendirme API', en iyi yöntemler için SQL Server yapılandırmasını değerlendirmeye yönelik bir mekanizma sağlar. API, SQL Server ekibi tarafından önerilen en iyi yöntemleri içeren bir kural kümesiyle teslim edilir. Bu kural kümesi, yeni sürümlerin yayımlanmasıyla geliştirilmiştir. SQL Server yapılandırmanızın önerilen en iyi yöntemlerle uyumlu olduğundan emin olmak yararlı olur.
Microsoft'un gönderilen kural kümesi GitHub'da kullanılabilir. tüm kural kümesiniörnekleri deposundagörüntüleyebilirsiniz.
Bu makalede, Linux ve kapsayıcılarda SQL Server için SQL Değerlendirme API'sini çalıştırmanın iki yolunu inceleyeceğiz:
- Azure Data Studio için SQL Değerlendirme uzantısı (Önizleme)
- PowerShell ile SQL Değerlendirme API'si
Azure Data Studio için SQL Değerlendirme uzantısı (önizleme)
Azure Data Studio (önizleme) için SQL Değerlendirme uzantısı, SQL Server'ın yapılandırmasını en iyi yöntemler için değerlendirmeye yönelik bir mekanizma sağlar.
Bu önizleme sürümüyle şunları yapabilirsiniz:
- Yerleşik kurallarla SQL Server, Azure SQL veritabanı veya Azure SQL Yönetilen Örneği ve veritabanlarını değerlendirme
- Bir örnek ve veritabanları için geçerli olan tüm yerleşik kuralların listesini alma
- Değerlendirme sonuçlarını ve geçerli kuralların listesini sql tablosunda depolamak için betik olarak dışarı aktarma
- Değerlendirme sonuçlarıyla ilgili HTML raporları oluşturma
SQL Değerlendirmesi Başlatma
- SQL Değerlendirmesi uzantısını yükledikten sonra sunucu listenizi genişletin, değerlendirmek istediğiniz bir sunucuya veya veritabanına sağ tıklayın ve Yönetseçin.
- Ardından, Genel bölümünde SQL Değerlendirmesiöğesini seçin. Seçilen SQL Server veya Azure SQL veritabanının değerlendirmesini gerçekleştirmek için Değerlendirme sekmesinde Değerlendirmeyi Çağır seçin. Sonuçlar kullanıma sunulduktan sonra filtreleme ve sıralama özelliklerini kullanabilirsiniz.
- Sonuçları tabloya ekle biçiminde almak için Betik olarak dışarı aktar seçin. Değerlendirme sonuçlarını HTML dosyası olarak kaydetmek için HTML Raporu Oluştur de seçebilirsiniz. Bazı değerlendirme kuralları belirli SQL Server yapılandırmalarına, bazıları ise diğerlerine yöneliktir. Veritabanı kuralları için de aynı durum geçerlidir. Örneğin, yalnızca SQL Server 2016 (13.x) veya
tempdbveritabanı için geçerli kurallar vardır. - Geçerli kuralları görüntüle düğmesi, değerlendirmeyi çağır seçtikten sonra sunucularınızın ve veritabanlarınızın değerlendirmesini gerçekleştirmek için kullanılan değerlendirme kurallarını görüntüler. SQL Server ve SQL Değerlendirme API'si hakkında bilgi görüntülemek için Bilgiseçin. Değerlendirme oturumu sonuçları Geçmiş sekmesinde gözden geçirilebilir.
PowerShell ile SQL Değerlendirme API'si
İkinci seçenek, SQL Değerlendirme API'sinin betiğini çalıştırmak için PowerShell kullanmaktır.
Önkoşullar
SqlServerkullanıcısı olarak çalışan PowerShell Galerisi'ndenmssqlPowerShell modülünü yükleyin.su mssql -c "/usr/bin/pwsh -Command Install-Module SqlServer"
Değerlendirmeyi ayarlama
SQL Değerlendirme API'sinin çıkışı JSON biçiminde kullanılabilir. SQL Değerlendirme API'sini yapılandırmak için aşağıdaki adımları aşağıdaki gibi gerçekleştirmeniz gerekir:
Değerlendirmek istediğiniz örnekte, SQL Kimlik Doğrulamasını kullanarak SQL Server değerlendirmeleri için oturum açma bilgileri oluşturun. Oturum açma ve güçlü parola oluşturmak için aşağıdaki Transact-SQL (T-SQL) betiğini kullanabilirsiniz. Parolanız, SQL Server varsayılanparola ilkesine uygun olmalıdır. Varsayılan olarak, parola en az sekiz karakter uzunluğunda olmalı ve şu dört kümeden üçünün karakterlerini içermelidir: büyük harfler, küçük harfler, 10 tabanındaki basamaklar ve simgeler. Parolalar en çok 128 karakter uzunluğunda olabilir. Mümkün olduğunca uzun ve karmaşık parolalar kullanın.
USE [master]; GO CREATE LOGIN [assessmentLogin] WITH PASSWORD = N'<password>'; ALTER SERVER ROLE [CONTROL SERVER] ADD MEMBER [assessmentLogin]; GOCONTROL SERVERrolü değerlendirmelerin çoğunluğunda kullanılır. Ancak, sysadmin ayrıcalıkları gerektirebilecek birkaç değerlendirme vardır. Bu kuralları çalıştırmıyorsanızCONTROL SERVERizinlerini kullanmanızı öneririz.Sistemde oturum açmak için kimlik bilgilerini aşağıda gösterildiği gibi depolayın ve
<password>önceki adımda kullandığınız parolayla değiştirin.echo "assessmentLogin" > /var/opt/mssql/secrets/assessment echo "<password>" >> /var/opt/mssql/secrets/assessmentKimlik bilgilerine yalnızca
mssqlkullanıcının erişebilmesini sağlayarak yeni değerlendirme kimlik bilgilerinin güvenliğini sağlayın.chmod 600 /var/opt/mssql/secrets/assessment chown mssql:mssql /var/opt/mssql/secrets/assessment
Değerlendirme betiğini indirme
Aşağıda, önceki adımlarda oluşturulan kimlik bilgilerini kullanarak SQL Değerlendirme API'sini çağıran örnek bir betik verilmiştir. Betik şu konumda JSON biçiminde bir çıkış dosyası oluşturur: /var/opt/mssql/log/assessments.
Not
SQL Değerlendirme API'si, CSV ve XML biçimlerinde de çıkış oluşturabilir.
Bu betik, GitHubüzerinden indirilebilir.
Bu dosyayı /opt/mssql/bin/runassessment.ps1olarak kaydedebilirsiniz.
[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
Bu betiği güvenilir ortamlarda çalıştırdığınızda ve bir ön oturum açma görüşme hatası aldığınızda, koddaki -TrustServerCertificate, $serverName ve $hostName satırları komutlarına Get-SqlInstance bayrağını ekleyin.
Değerlendirmeyi çalıştırma
Betiğin
mssqltarafından sahiplenildiğinden ve yürütülebilir olduğundan emin olun.chown mssql:mssql /opt/mssql/bin/runassessment.ps1 chmod 700 /opt/mssql/bin/runassessment.ps1Günlük klasörü oluşturun ve klasördeki
mssqlkullanıcıya uygun izinleri atayın:mkdir /var/opt/mssql/log/assessments/ chown mssql:mssql /var/opt/mssql/log/assessments/ chmod 0700 /var/opt/mssql/log/assessments/Artık ilk değerlendirmenizi oluşturabilirsiniz, ancak bunu
mssqlkullanıcı olarak yaptığınızdan emin olun; böylece sonraki değerlendirmelercronveyasystemddaha güvenli bir şekilde otomatik olarak çalıştırılabilir.su mssql -c "pwsh -File /opt/mssql/bin/runassessment.ps1"Komut tamamlandıktan sonra çıkış JSON biçiminde oluşturulur. Bu çıkış, JSON dosyalarını ayrıştırma işlemini destekleyen herhangi bir araçla tümleştirilebilir. Bu tür örnek araçlardan biri Red Hat Insights .
İlgili içerik
- SQL Değerlendirme API'si
- Azure VM'lerinde SQL Server için SQL en iyi yöntemler değerlendirmesi
- SQL Server için Güvenlik açığı değerlendirmesi