SQL: domande e risposteTrigger di accesso, deframmentazione dei file di dati e altro ancora

A cura di Nancy Michell

Impostazione dell'account di servizio

Suggerimento: password più protette

Il motore SQL Server 2000 conserva due copie di ogni password di accesso di SQL Server. Una versione è la password effettiva fornita dall'utente, l'altra è la password in lettere maiuscole.

Questa pratica è utile nella convalida senza distinzione tra caratteri maiuscoli e minuscoli delle password perché un utente può accedere al server utilizzando sia entrambi i caratteri che esclusivamente i caratteri maiuscoli. Tuttavia, questa facilitazione comporta un problema. Il salvataggio delle password costituite esclusivamente da caratteri maiuscoli aumenta la vulnerabilità verso attacchi a forza bruta per individuare la password poiché riduce il numero di password possibili.

SQL Server 2005 memorizza solo la copia originale della password. La password inserita da un utente deve corrispondere alla password memorizzata sul server. Se la password non corrisponde, all'utente viene negato l'accesso. Nel caso venisse dimenticato l'ordine preciso dei caratteri maiuscoli e minuscoli della password, sarà necessario reimpostarla.

Se si utilizza il nome di accesso utente SQLCOMMUNITY, è possibile reimpostare la relativa password SQL Server tramite il seguente comando:

Use Master;
ALTER LOGIN SQLCOMMUNITY WITH PASSWORD = 'k3t9h4s8wJF7t';

Questo comando reimposta la password per l'accesso a SQL Server di SQLCOMMUNITY su "k3t9h4s8wJF7t".

D In SQL Server™ 2000, impostavo l'account di servizio per l'agente e il motore di SQL Server tramite l'applet Servizi in Strumenti di amministrazione. Ho sentito che adesso in SQL Server 2005 è necessario utilizzare lo strumento Gestione configurazione. Perché non posso continuare a utilizzare gli strumenti di Windows?

R SQL Server 2005 è stato creato in modo da essere più sicuro rispetto alle versioni precedenti. In molti negozi, gli utenti imposterebbero esclusivamente account interni, come LocalSystem, per eseguire SQL Server. Tali account, però, dispongono spesso di un numero di diritti e autorizzazioni in Windows® maggiore o minore di quanto richiesto. È necessario creare un account Windows senza privilegi elevati per eseguire i servizi dell'agente e del motore di SQL Server 2005. Se si selezionano questi account con Configuration Manager, verranno automaticamente concessi loro i diritti e le autorizzazioni appropriati sia in SQL Server che nel sistema operativo. Se vengono utilizzati gli strumenti di Windows per gestire i servizi di SQL Server, potrebbero non essere concessi i diritti appropriati o ne potrebbero essere concessi troppi.

Per ulteriori informazioni, vedere il suggerimento relativo alla modifica dell'account di servizio.

Accesso al server personale

D Desidero sapere chi accede al mio server e quando. Vorrei anche limitare alcuni utenti specifici a determinati periodi di tempo e sapere come tenere traccia dell'attività degli utenti. È possibile?

R Sì, è possibile fare tutto questo con SQL Server 2005 se si dispone di Service Pack 2 installato.

SQL Server 2005 consente di creare trigger di accesso che possono avviare un'istruzione T-SQL o una stored procedure in risposta a un evento LOGON. È possibile utilizzare un trigger di accesso per controllare gli utenti tenendo traccia dell'attività di accesso, limitando gli accessi a SQL Server o limitando il numero di sessioni per accessi specifici. Si noti che l'evento viene avviato solo dopo l'autenticazione di un accesso, ma prima che la sessione dell'utente venga effettivamente stabilita. Di conseguenza, tutti i messaggi che hanno origine dall'interno del trigger (come i messaggi o gli errori) dall'istruzione PRINT vengono inviati al log degli errori di SQL Server. Se l'autenticazione di un accesso non riesce, i trigger di accesso non vengono avviati.

Il seguente esempio mostra come creare un trigger di accesso e inviare un messaggio al log degli errori di SQL Server ad ogni accesso utente:

ALTER TRIGGER Ops_Login
ON ALL SERVER
AFTER LOGIN
AS
PRINT SUSER_SNAME() + ' has just logged in to ' + LTRIM(@@ServerName) + ' SQL Server at '+LTRIM(getdate())
GO

Per visualizzare tutti i trigger impostati al livello del server, utilizzare le query seguenti:

SELECT * FROM sys.server_triggers;

Procedure consigliate di deframmentazione

D Qual è il modo migliore per risolvere la frammentazione dei file di dati in SQL Server? Se si utilizzano gli strumenti di deframmentazione in Windows, essi considerano i file di dati di SQL nel suo insieme e non ne eseguiranno la deframmentazione in modo granulare.

R È possibile eseguire il backup del database e quindi ripristinarlo. Se esiste lo spazio per un file contiguo, quest'ultimo deve essere scritto nel database subito dopo l'ultimo file. Detto questo, non è necessario tentare di deframmentare i file fisici. In genere, comunque, non si verifica molta frammentazione esterna. È più utile reindirizzare regolarmente i dati per ridurre il più possibile la frammentazione interna. Ciò consentirà di ottimizzare l'efficacia delle letture in avanti e la quantità di dati che possono essere memorizzati nel buffer.

I fattori più importanti per efficaci operazioni I/O del disco assicurano che l'allineamento del disco e la configurazione del RAID siano corretti, scalando gli array del disco per gestire in modo appropriato il carico I/O e mantenendo un layout appropriato di Log, Data, TempDB e file di backup. Evitando di utilizzare le funzioni di aumento delle dimensioni e di compattazione automatica come metodo principale per il ridimensionamento dei file di dati, verrà ridotto il numero di frammentazioni del file create al livello del volume. Ad esempio, l'esecuzione di 10 operazioni di aumento delle dimensioni, ognuna di 500 MB, probabilmente aggiunge 10 nuove frammentazioni del file fisico. Contrariamente, una singola operazione di aumento delle dimensioni manuale di 5 GB ne aggiungerà solo una.

Suggerimento: modifica dell'account di servizio

Quando l'account di accesso di servizio di SQL Server viene configurato con un account Windows NT®, SQL Server imposta i diritti e le autorizzazioni dell'utente di Windows su diversi file, cartelle e chiavi del Registro di sistema. È anche possibile impostare l'account di servizio di SQL Server dalla console dei servizi in Strumenti di amministrazione. Tuttavia, quando si esegue questa operazione tramite i servizi, i diritti e le autorizzazioni non vengono impostate e potrebbero verificarsi seri problemi dovuti alla mancanza di impostazioni di protezione appropriate sugli elementi Windows e SQL Server citati in precedenza.

Quindi, si consiglia di utilizzare la funzionalità di gestione della configurazione di SQL Server piuttosto che la console dei servizi per la modifica dell'account di servizio dell'agente di SQL Server o SQL Server. Tuttavia, se sono già state effettuate modifiche sull'account utilizzando la console dei servizi, è ancora possibile risolvere questo problema.

Passaggio 1: Applicare autorizzazioni complete sulle seguenti chiavi del Registro di sistema e relative sottochiavi:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\90
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\<MSSQL.x>

Passaggio 2: Impostare il controllo completo per l'account di avvio per il servizio MSSQLServer e il servizio SQLServerAgent (un account Windows NT locale o un account Windows NT di dominio) su questa cartella NTFS:

Drive:\Program Files\Microsoft SQL Server\<MSSQL.1>\MSSQL

Invece di effettuare questa operazione manualmente, tuttavia, si consiglia di utilizzare la funzionalità di gestione della configurazione di SQL Server per effettuare modifiche sugli account di servizio dell'agente e di SQL Server.

Si ringraziano i seguenti professionisti IT di Microsoft per la propria esperienza tecnica: Cary Gottesman, Saleem Hakani, Trayce Jordan, Peter Kalbach, Al Noel, Uttam Parui, Amber Sitko e Buck Woody.

© 2008 Microsoft Corporation e CMP Media, LLC. Tutti i diritti riservati. È vietata la riproduzione completa o parziale senza autorizzazione.