Eventos
31 mar, 23 - 2 abr, 23
Evento de aprendizaje de SQL, Fabric y Power BI más grande. 31 de marzo – 2 de abril. Use el código FABINSIDER para ahorrar $400.
Regístrate hoyEste explorador ya no se admite.
Actualice a Microsoft Edge para aprovechar las características y actualizaciones de seguridad más recientes, y disponer de soporte técnico.
Se aplica a: SQL Server - Linux
SQL Assessment API ofrece un mecanismo para evaluar la configuración de SQL Server a efectos de los procedimientos recomendados. La API se entrega con un conjunto de reglas que contiene los procedimientos recomendados por el equipo de SQL Server. Este conjunto de reglas se ha mejorado con el lanzamiento de nuevas versiones. Es útil para asegurarse de que la configuración de SQL Server esté en consonancia con los procedimientos recomendados.
El conjunto de reglas de Microsoft está disponible en GitHub. Puede ver todo el conjunto de reglas en el repositorio de ejemplos.
En este artículo, se verán dos maneras de ejecutar SQL Assessment API para SQL Server en Linux y contenedores:
La extensión SQL Assessment para Azure Data Studio (versión preliminar) proporciona un mecanismo a fin de evaluar la configuración de SQL Server según los procedimientos recomendados.
Con esta versión preliminar, puede hacer lo siguiente:
tempdb
.Una segunda opción consiste en usar PowerShell para ejecutar el script de SQL Assessment API.
Asegúrese de que instala PowerShell en Linux.
Instale el módulo de PowerShell SqlServer
desde la Galería de PowerShell, como usuariomssql
.
su mssql -c "/usr/bin/pwsh -Command Install-Module SqlServer"
La salida de SQL Assessment API está disponible en formato JSON. Debe seguir estos pasos para configurar SQL Assessment API de la siguiente manera:
En la instancia que quiera evaluar, cree un inicio de sesión para valoraciones de SQL Server mediante la autenticación de SQL. Puede usar el siguiente script de Transact-SQL (T-SQL) para crear un inicio de sesión y una contraseña segura. Reemplace por <secure_password>
una contraseña segura de su elección.
USE [master];
GO
CREATE LOGIN [assessmentLogin] WITH PASSWORD = N'<secure_password>';
ALTER SERVER ROLE [CONTROL SERVER] ADD MEMBER [assessmentLogin];
GO
El rol CONTROL SERVER
funciona para la mayoría de las evaluaciones. Pero es posible que algunas necesiten privilegios sysadmin. Si no ejecuta esas reglas, se recomienda usar permisos de CONTROL SERVER
.
Almacene las credenciales de inicio de sesión en el sistema como se indica a continuación, y vuelva a reemplazar <secure_password>
por la contraseña que ha usado en el paso anterior.
echo "assessmentLogin" > /var/opt/mssql/secrets/assessment
echo "<secure_password>" >> /var/opt/mssql/secrets/assessment
Para proteger las nuevas credenciales de valoración, asegúrese de que solo el usuario mssql
pueda acceder a las credenciales.
chmod 600 /var/opt/mssql/secrets/assessment
chown mssql:mssql /var/opt/mssql/secrets/assessment
A continuación se muestra un script de ejemplo que llama a SQL Assessment API mediante las credenciales creadas en los pasos anteriores. El script genera un archivo de salida en formato JSON en esta ubicación: /var/opt/mssql/log/assessments
.
Nota
SQL Assessment API también puede generar resultados en formatos CSV y XML.
El script está disponible para su descarga desde GitHub.
Puede guardar este archivo como /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
}
}
Nota
Al ejecutar este script en entornos de confianza y obtener un error handshake de prelogin, agregue la marca -TrustServerCertificate
en los comandos para las líneas $serverName
, $hostName
y Get-SqlInstance
en el código.
Asegúrese de que el script sea propiedad de mssql
y que lo pueda ejecutar.
chown mssql:mssql /opt/mssql/bin/runassessment.ps1
chmod 700 /opt/mssql/bin/runassessment.ps1
Cree una carpeta de registro y asigne los permisos adecuados al usuario mssql
en la carpeta:
mkdir /var/opt/mssql/log/assessments/
chown mssql:mssql /var/opt/mssql/log/assessments/
chmod 0700 /var/opt/mssql/log/assessments/
Ya puede crear la primera valoración, pero asegúrese de hacerlo como usuario mssql
, para que las valoraciones posteriores se puedan ejecutar automáticamente mediante cron
o systemd
de forma más segura.
su mssql -c "pwsh -File /opt/mssql/bin/runassessment.ps1"
Una vez que se complete el comando, la salida se genera en formato JSON. Esta salida se puede integrar con cualquier herramienta que admita el análisis de archivos JSON. Una de estas herramientas de ejemplo es RedHat Insights.
Eventos
31 mar, 23 - 2 abr, 23
Evento de aprendizaje de SQL, Fabric y Power BI más grande. 31 de marzo – 2 de abril. Use el código FABINSIDER para ahorrar $400.
Regístrate hoyCursos
Certificación
Microsoft Certified: Azure Database Administrator Associate - Certifications
Administre una infraestructura de base de datos de SQL Server para bases de datos relacionales locales e híbridas en la nube mediante las ofertas de bases de datos relacionales PaaS de Microsoft.
Documentación
RHEL: Instalación de SQL Server en Linux - SQL Server
En este inicio rápido, se muestra cómo instalar SQL Server en Red Hat Enterprise Linux (RHEL) y, después, crear y consultar una base de datos con sqlcmd.
Instalación desatendida de SQL Server en RHEL - SQL Server
Use un script de Bash de ejemplo para instalar SQL Server en Red Hat Enterprise Linux (RHEL) sin entrada interactiva.
Configuración de repositorios para instalar y actualizar SQL Server en Linux - SQL Server
Vea y configure repositorios de origen para SQL Server en Linux. El repositorio de origen afecta a la versión de SQL Server que se aplica durante la instalación y la actualización.