Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Si applica a:SQL Server
database SQL di Azure
Azure SQL Istanza gestita
Database SQL in Microsoft Fabric
Gli Eventi estesi costituiscono una funzionalità del monitoraggio delle prestazioni leggera che consente di raccogliere i dati per il monitoraggio e la risoluzione dei problemi. Usando gli Eventi estesi, è possibile visualizzare i dettagli delle operazioni interne del motore di database rilevanti per il monitoraggio delle prestazioni e la risoluzione dei problemi. Per altre informazioni sugli Eventi estesi, vedere Informazioni generali sugli eventi estesi.
Questo articolo ha lo scopo di aiutare gli amministratori, i tecnici e gli sviluppatori di SQL che non hanno esperienza con gli Eventi estesi e che vogliono iniziare a usarli e visualizzare i dati degli eventi in pochi minuti.
Gli Eventi estesi sono noti anche come XEvent e talvolta solo come XE.
Dopo avere letto l'articolo, si è in grado di:
- Vedere come creare una sessione eventi in SQL Server Management Studio (SSMS), con screenshot di esempio.
- Associare gli screenshot alle istruzioni Transact-SQL equivalenti.
- Comprendere in dettaglio i termini e i concetti alla base dell'interfaccia utente di SSMS e delle istruzioni T-SQL XEvents.
- Scopri come testare la sessione dell'evento.
- Comprendere i risultati della sessione, tra i quali:
- Opzioni disponibili per l'archiviazione dei risultati
- Risultati elaborati rispetto a risultati non elaborati
- Strumenti per visualizzare i risultati in modi diversi e su diverse scale cronologiche
- Scopri come cercare e individuare tutti gli eventi disponibili.
- Comprendere le relazioni tra le viste di sistema di Extended Events.
Suggerimento
Per altre informazioni sugli Eventi estesi per il database SQL di Azure, tra cui anche codici di esempio, vedere Eventi estesi nel database SQL di Azure e nell’Istanza gestita di SQL di Azure.
Prerequisiti
Per iniziare, è necessario:
- Installare la versione più recente di SQL Server Management Studio (SSMS).
- Assicurarsi che l'account abbia
CREATE ANY EVENT SESSION(introdotto in SQL Server 2022) oALTER ANY EVENT SESSIONl'autorizzazione a livello di server. - Inoltre, quando si usa SSMS e per visualizzare le sessioni create, l'account di accesso richiede l'autorizzazione
VIEW SERVER PERFORMANCE STATE. - Per il database SQL di Azure, l'istanza gestita di SQL di Azure e il database SQL in Fabric, i file degli eventi estesi vengono archiviati in Archiviazione di Azure. È necessario un account di archiviazione di Azure.
Informazioni sulla sicurezza e le autorizzazioni correlate agli Eventi estesi sono disponibili nell'Appendice alla fine di questo articolo.
Eventi estesi in SSMS
SSMS fornisce un'interfaccia utente completamente funzionale per gli Eventi estesi. Molti scenari possono essere eseguiti utilizzando questa interfaccia utente, senza dover usare T-SQL o DMV.
La sezione successiva illustra i passaggi dell'interfaccia utente necessari per creare una sessione di Eventi estesi e visualizzare i dati segnalati. Dopo aver esaminato i passaggi pratici o rivisto quelli presenti in questo articolo, è possibile leggere i concetti coinvolti nei passaggi per una comprensione più approfondita.
Creare una sessione di evento in SSMS
Quando si crea una sessione di Eventi estesi, si indica al sistema:
- Eventi a cui si è interessati.
- Come si desidera che il sistema riporti i dati.
La dimostrazione apre la finestra di dialogo Nuova sessione, che mostra come usare le quattro pagine, denominate:
- Generale
- Eventi
- Archiviazione dati
- Avanzato
Il testo e gli screenshot di supporto possono essere leggermente diversi nella versione di SSMS, ma devono ugualmente essere rilevanti per la spiegazione dei concetti di base.
Connessione a un'istanza del motore di database. Gli Eventi estesi sono supportati a partire da SQL Server 2014 (12.x), in database SQL di Azure e Istanza gestita di SQL di Azure.
In Esplora oggetti, selezionare Gestione > Eventi estesi. In database SQL di Azure, le sessioni di eventi sono con ambito database, quindi l'opzione Eventi estesi è disponibile in ogni database, non in Gestione.
Fare clic con il pulsante destro del mouse sulla cartella Sessioni e scegliere Nuova sessione. La finestra di dialogo Nuova sessione è preferibile alla Creazione guidata nuova sessione, anche se le due sono simili.
Suggerimento
In questi passaggi dell'esercitazione, non premere OK fino a quando non sono state avanzate tutte e quattro le pagine: Generale, Eventi, Archiviazione dati e Avanzate.
Selezionare la scheda Generale. Quindi digitare
YourSession, o qualsiasi nome desiderato, nella casella di testo Nome sessione. Non selezionare ancora OK, perché è comunque necessario immettere alcuni dettagli in altre pagine.Selezionare la pagina Eventi.
Nell'elenco a discesa dell'area Libreria di eventi scegliere Solo nomi evento.
- Digitare
sql_statementnella casella di testo. In questo modo l'elenco viene filtrato per visualizzare solo gli eventi consql_statementnel nome. - Scorrere e selezionare l'evento denominato
sql_statement_completed. - Selezionare il pulsante freccia destra
>per spostare l'evento nella casella Eventi selezionati.
- Digitare
Sempre nella pagina Eventi selezionare il pulsante Configura. In questo modo viene aperta la casella Opzioni di configurazione evento per gli eventi selezionati.
Selezionare la scheda Filtro (predicato). Selezionare quindi la nuova riga di filtro che indica Fare clic qui per aggiungere una clausola. In questa esercitazione configureremo questo filtro, noto anche come predicato, per catturare tutte le istruzioni
SELECTcon una clausolaHAVING.Nell'elenco a discesa Campo, scegliere
sqlserver.sql_text.- Per Operatore, scegliere
like_i_sql_unicode_string. Qui,inel nome dell'operatore indica che non distingue tra maiuscole e minuscole. - In Valore, digitare
%SELECT%HAVING%. Qui, i segni di percentuale (%) sono caratteri wildcard che rappresentano qualsiasi stringa di caratteri.
Nota
Nel nome in due parti del campo è
sqlserveril nome del pacchetto esql_textè il nome del campo. L'evento scelto in precedenza,sql_statement_completed, deve trovarsi nello stesso pacchetto del campo scelto.- Per Operatore, scegliere
Selezionare la pagina Archiviazione dati.
Nell'area Destinazioni selezionare la nuova riga Tipo di destinazione che indica Fare clic qui per aggiungere una destinazione. In questo tutorial, scriveremo i dati acquisiti degli eventi estesi in un file di eventi. Selezionando questa opzione i dati degli eventi vengono archiviati in un file che è possibile aprire e visualizzare in seguito. A partire da SQL Server 2019 (15.x), i dati degli eventi possono essere scritti anche per essere archiviati in Archiviazione di Azure. Per i database SQL di Azure, le istanze gestite di SQL di Azure e i database SQL in Fabric, i file di eventi vengono sempre archiviati in Archiviazione Azure.
- Nell'elenco a discesa Tipo scegliere
event_file.
- Nell'elenco a discesa Tipo scegliere
Nell'area Proprietà, digitare un nome di percorso e file completo nella casella di testo Nome file sul server. È anche possibile usare il pulsante Sfoglia. L'estensione di file deve essere
xel. Nell'esempio è stato usatoC:\temp\YourSession_Target.xel.Selezionare la pagina Avanzate. Con la configurazione predefinita, questo target .xel della sessione di eventi estesi dovrebbe avere un impatto minimo o nullo sulle prestazioni del server, ma queste impostazioni nella pagina Avanzate possono essere usate per aumentare o diminuire l'utilizzo delle risorse e la latenza.
Selezionare il pulsante OK nella parte inferiore per creare questa sessione eventi.
Tornare in SSMS Esplora oggetti, aprire o aggiornare la cartella Sessions e visualizzare il nuovo nodo per la sessione
YourSessionEventi estesi. La sessione non è ancora stata avviata. In questo tutorial, inizieremo più tardi.
Modificare una sessione eventi in SSMS
In Esplora oggetti di SSMS è possibile modificare la sessione eventi facendo clic con il pulsante destro del mouse sul relativo nodo e quindi selezionando Proprietà. Viene visualizzata la stessa finestra di dialogo a più pagine.
Creare una sessione eventi usando T-SQL
In SSMS è possibile generare uno script T-SQL per creare la sessione eventi come indicato di seguito:
- Fare clic con il pulsante destro del mouse sul nodo della sessione di eventi, quindi selezionare Esegui script della sessione come > CREATE negli > Appunti.
- Incollare in qualsiasi editor di testo.
Qui è riportata l'istruzione T-SQL CREATE EVENT SESSION generata per YourSession:
CREATE EVENT SESSION [YourSession]
ON SERVER -- For SQL Server and Azure SQL Managed Instance
-- ON DATABASE -- For Azure SQL Database
ADD EVENT sqlserver.sql_statement_completed
(
ACTION(sqlserver.sql_text)
WHERE
( [sqlserver].[like_i_sql_unicode_string]([sqlserver].[sql_text], N'%SELECT%HAVING%')
)
)
ADD TARGET package0.event_file
(SET filename=N'C:\temp\YourSession_Target.xel');
GO
Nota
In database SQL di Azure usare ON DATABASE anziché ON SERVER.
Eliminazione condizionale della sessione di eventi
Prima dell'istruzione CREATE EVENT SESSION, è possibile eseguire un'istruzione DROP EVENT SESSION in modo condizionale, nel caso in cui esista già una sessione con lo stesso nome. In questo modo la sessione esistente viene eliminata. Senza questa funzionalità, il tentativo di creare una sessione con lo stesso nome causa un errore.
IF EXISTS (SELECT *
FROM sys.server_event_sessions
WHERE name = 'YourSession')
BEGIN
DROP EVENT SESSION YourSession
ON SERVER;
END
GO
Avviare e arrestare la sessione eventi usando T-SQL
Quando si crea una sessione eventi, il valore predefinito è l'avvio non automatico. È possibile avviare o arrestare la sessione eventi in qualsiasi momento usando l'istruzione T-SQL ALTER EVENT SESSION seguente.
ALTER EVENT SESSION [YourSession]
ON SERVER
STATE = START; -- STOP;
È possibile configurare l'avvio automatico della sessione eventi all'avvio dell'istanza del motore di database. Vedere la parola chiave STARTUP STATE = ON in CREATE EVENT SESSION.
L'interfaccia utente di SSMS offre una casella di controllo corrispondente, Avvia la sessione eventi all'avvio del server, nella pagina Nuova sessione > Generale.
Testare una sessione eventi
Testare la sessione eventi con questi passaggi:
- In Esplora oggetti, fare clic con il pulsante destro del mouse sul nodo della sessione di eventi, quindi selezionare Avvia sessione.
- Durante la connessione allo stesso server (o allo stesso database nel database SQL di Azure) in cui è stata creata la sessione eventi, eseguire l'istruzione
SELECT...HAVINGun paio di volte. È consigliabile modificare il valore nella clausolaHAVINGper ogni esecuzione, alternando tra 2 e 3. Ciò consente di visualizzare le differenze nei risultati. - Fare clic con il pulsante destro del mouse sul nodo della sessione, quindi selezionare Arresta sessione.
- Leggere la sottosezione successiva su come SELEZIONARE e visualizzare i risultati.
SELECT c.name,
COUNT(*) AS [Count-Per-Column-Repeated-Name]
FROM sys.syscolumns AS c
INNER JOIN sys.sysobjects AS o
ON o.id = c.id
WHERE o.type = 'V'
AND c.name LIKE '%event%'
GROUP BY c.name
HAVING Count(*) >= 3 --2 -- Try both values during session.
ORDER BY c.name;
Per completezza, di seguito è riportato l'output di esempio dal precedente SELECT...HAVING.
/* Approximate output, 6 rows, all HAVING Count >= 3:
name Count-Per-Column-Repeated-Name
--------------------- ------------------------------
event_group_type 4
event_group_type_desc 4
event_session_address 5
event_session_id 5
is_trigger_event 4
trace_event_id 3
*/
Visualizzare i dati della sessione eventi come XML
In una finestra di query in SSMS, eseguire l'istruzione SELECT seguente per visualizzare i dati degli eventi acquisiti dalla sessione. Ogni riga costituisce un'occorrenza di evento.
CAST(... AS xml) modifica il tipo di dati della colonna da nvarchar a xml. In questo modo è possibile selezionare il valore della colonna per aprirlo in una nuova finestra e facilitarne la lettura.
Nota
La destinazione event_file inserisce sempre una parte numerica nel nome del file xel. Prima di poter eseguire la seguente query, è necessario copiare il nome completo effettivo del file xel che include questa parte numerica e incollarlo nell'istruzione SELECT. Nell'esempio seguente, la parte numerica è _0_131085363367310000.
SELECT object_name,
file_name,
file_offset,
event_data,
'CLICK_NEXT_CELL_TO_BROWSE_XML RESULTS!' AS [CLICK_NEXT_CELL_TO_BROWSE_XML_RESULTS],
CAST(event_data AS XML) AS [event_data_XML]
-- TODO: In the SSMS results grid, click this XML cell
FROM sys.fn_xe_file_target_read_file(
'C:\Temp\YourSession_Target_0_131085363367310000.xel', NULL, NULL, NULL
);
Questa query fornisce due modi per visualizzare i risultati completi di una determinata riga di evento:
Eseguire
SELECTin SSMS e quindi selezionare una cella nella colonnaevent_data_XML.Copiare la stringa XML da una cella nella colonna
event_data. Incolla in un editor di testo qualsiasi, ad esempio Blocco note, e salva il file con estensionexml. Aprire quindi il file in un browser o in un editor in grado di visualizzare dati XML.
Dati dell'evento in XML
Ora verrà esaminata una parte dei risultati, che sono in formato XML. Il seguente XML viene modificato qui per brevità.
<data name="row_count"> visualizza un valore di 6, che corrisponde alle 6 righe di risultati visualizzate in precedenza. E possiamo vedere l'intera istruzione SELECT.
<event name="sql_statement_completed" package="sqlserver" timestamp="2016-05-24T04:06:08.997Z">
<data name="duration">
<value>111021</value>
</data>
<data name="cpu_time">
<value>109000</value>
</data>
<data name="physical_reads">
<value>0</value>
</data>
<data name="last_row_count">
<value>6</value>
</data>
<data name="offset">
<value>0</value>
</data>
<data name="offset_end">
<value>584</value>
</data>
<data name="statement">
<value>SELECT c.name,
COUNT(*) AS [Count-Per-Column-Repeated-Name]
FROM sys.syscolumns AS c
INNER JOIN sys.sysobjects AS o
ON o.id = c.id
WHERE o.type = 'V'
AND c.name LIKE '%event%'
GROUP BY c.name
HAVING Count(*) >= 3 --2 -- Try both values during session.
ORDER BY c.name;</value>
</data>
</event>
Visualizzare i dati della sessione eventi in SSMS
Nell'interfaccia utente di SSMS sono disponibili numerose funzioni avanzate che è possibile usare per visualizzare i dati acquisiti da una sessione eventi. Per altre informazioni, vedere Visualizzare i dati degli eventi in SQL Server Management Studio.
Si inizia con le opzioni del menu contestuale etichettate Visualizza dati di destinazione e Controlla i dati dinamici.
Visualizza dati di destinazione
Nel Esplora oggetti SSMS è possibile fare clic con il pulsante destro del mouse sul nodo di destinazione nel nodo della sessione eventi, ad esempio package0.event_counter. Nel menu contestuale, selezionare Visualizza dati di destinazione. SSMS visualizza i dati.
La visualizzazione non viene aggiornata quando si verificano nuovi eventi in una sessione. Tuttavia, è possibile selezionare di nuovo Visualizza dati di destinazione .
Visualizza i dati in tempo reale
In Esplora oggettidi SSMS è possibile fare clic con il pulsante destro del mouse sul nodo della sessione eventi. Nel menu contestuale, selezionare Controlla i dati dinamici. SSMS visualizza i dati in ingresso man mano che continuano ad arrivare in tempo reale.
Termini e concetti negli Eventi estesi
La tabella seguente elenca i termini usati per gli Eventi estesi e ne descrive i significati.
| Termine | Descrizione |
|---|---|
event session |
Un costrutto incentrato su uno o più eventi, oltre a elementi di supporto quali azioni e destinazioni. L'istruzione CREATE EVENT SESSION crea ogni sessione di eventi. È possibile ALTER una sessione di evento per avviarla e arrestarla a piacimento.Una sessione dell'evento viene talvolta chiamata semplicemente sessione, quando dal contesto è chiaro che si intende sessione dell'evento. Altre informazioni sulle sessioni eventi sono descritte in: Sessioni degli Eventi estesi. |
event |
Un'occorrenza specifica del sistema che viene controllata da una sessione eventi attiva. Ad esempio, l'evento sql_statement_completed rappresenta il momento in cui viene completata un'istruzione T-SQL. L'evento può riportare la sua durata e altri dati. |
target |
Un elemento che riceve i dati di output da un evento acquisito. Il target ti mostra i dati. Gli esempi includono la destinazione event_file usata in precedenza in questa guida introduttiva e la destinazione ring_buffer che mantiene gli eventi più recenti in memoria.Qualsiasi tipo di destinazione può essere utilizzato per qualsiasi sessione di eventi. Per informazioni dettagliate, vedere Destinazioni per gli Eventi estesi. |
action |
Un campo noto all'evento. I dati del campo vengono inviati alla destinazione. Il campo azione è strettamente correlato al filtro predicato. |
predicate, o filtro |
Una verifica dei dati in un campo di un evento, utilizzata affinché solo un sottoinsieme interessante di occorrenze di evento venga inviato alla destinazione. Ad esempio, un filtro può includere solo le occorrenze dell'evento sql_statement_completed in cui l'istruzione T-SQL conteneva la stringa HAVING. |
package |
Un qualificatore di nome associato a ciascun elemento in un insieme di elementi incentrato attorno a un nucleo di eventi. Ad esempio, un pacchetto può avere eventi sul testo T-SQL, Un evento potrebbe riguardare tutto il T-SQL contenuto in un batch. Nel frattempo, un altro evento più circoscritto riguarda le singole istruzioni T-SQL. Inoltre, per qualsiasi istruzione T-SQL sono disponibili gli eventi started e completed.Anche i campi appropriati per gli eventi sono inclusi nel pacchetto con gli eventi. La maggior parte dei target si trova in package0 e viene utilizzata insieme agli eventi di molti altri pacchetti. |
Scenari di Eventi estesi e dettagli di utilizzo
Esistono numerosi scenari per l'uso di Eventi estesi per monitorare e risolvere i problemi relativi al motore di database e ai carichi di lavoro di query. Gli articoli seguenti forniscono esempi che usano scenari correlati ai blocchi:
-
Trova gli oggetti su cui è stato applicato il maggior numero di blocchi
- Questo scenario usa la destinazione histogram, che elabora i dati grezzi degli eventi prima di visualizzarli in forma riassunta (suddivisa in bucket).
-
Individuare le query che mantengono attivi i blocchi
- Questo scenario utilizza la destinazione pair_matching, dove la coppia di eventi è costituita da
sqlserver.lock_acquireesqlserver.lock_release.
- Questo scenario utilizza la destinazione pair_matching, dove la coppia di eventi è costituita da
Come individuare gli eventi disponibili nei pacchetti
La seguente query restituisce una riga per ogni evento disponibile, il cui nome contiene la stringa di tre caratteri sql. È possibile modificare la clausola LIKE per cercare nomi di eventi diversi. Inoltre, il set di risultati identifica il pacchetto che contiene l'evento.
SELECT -- Find an event you want.
p.name AS [Package-Name],
o.object_type,
o.name AS [Object-Name],
o.description AS [Object-Descr],
p.guid AS [Package-Guid]
FROM sys.dm_xe_packages AS p
INNER JOIN sys.dm_xe_objects AS o
ON p.guid = o.package_guid
WHERE o.object_type = 'event' --'action' --'target'
AND p.name LIKE '%'
AND o.name LIKE '%sql%'
ORDER BY p.name,
o.object_type,
o.name;
L'esempio di risultato seguente mostra la riga restituita, qui trasposta nel formato column name = value. I dati provengono dall'evento sql_statement_completed usato nei precedenti passaggi di esempio. La descrizione dell'oggetto (in questo esempio, un evento) funge da stringa di documentazione.
Package-Name = sqlserver
object_type = event
Object-Name = sql_statement_completed
Object-Descr = Occurs when a Transact-SQL statement has completed.
Package-Guid = 655FD93F-3364-40D5-B2BA-330F7FFB6491
Trovare eventi utilizzando l'interfaccia utente di SSMS
Un'altra opzione di ricerca per nome degli eventi consiste nell'usare la finestra di dialogo Nuova sessione > Eventi > Libreria di eventi visualizzata in una schermata precedente. È possibile digitare un nome di evento parziale e trovare tutti i nomi degli eventi corrispondenti.
Classi di eventi di traccia SQL
Una descrizione dell'uso degli eventi estesi con le classi e le colonne di evento di Traccia SQL è disponibile all'indirizzo: Visualizzare gli eventi estesi equivalenti alle classi di eventi di Analisi SQL.
Tracciamento degli eventi per Windows (Event Tracing for Windows - ETW)
Le descrizioni dell'uso degli eventi estesi con Event Tracing for Windows (ETW) sono disponibili in:
- Destinazione di Event Tracing for Windows
- Monitorare l'attività del sistema mediante gli eventi estesi
Sessioni di eventi di sistema
Per impostazione predefinita, in SQL Server e Istanza gestita di SQL di Azure vengono create diverse sessioni di eventi di sistema e configurate in modo da essere eseguite al momento dell'avvio del motore di database. Analogamente alla maggior parte delle sessioni di eventi, queste sessioni usano una piccola quantità di risorse e non influiscono materialmente sulle prestazioni del carico di lavoro. Microsoft consiglia che tali sessioni rimangano abilitate e in esecuzione. Le sessioni di stato del sistema, in particolare la sessione system_health, sono spesso utili per il monitoraggio e la risoluzione dei problemi.
È possibile visualizzare queste sessioni di eventi nell'Esplora oggetti di SSMS sotto Gestione > Eventi estesi > Sessioni. Ad esempio, in SQL Server queste sessioni di eventi di sistema sono:
AlwaysOn_healthsystem_healthtelemetry_events
provider di PowerShell
È possibile gestire gli Eventi estesi usando il provider SQL Server PowerShell. Per altre informazioni, vedere Utilizzare il provider PowerShell per eventi estesi.
Visualizzazioni di sistema
Le viste di sistema per gli Eventi estesi includono:
-
Viste di catalogo: per informazioni sulle sessioni degli eventi definite da
CREATE EVENT SESSION. - Viste a gestione dinamica (DMV): per informazioni sulle sessioni di eventi attive (avviate).
Le Istruzioni SELECT e JOIN da viste di sistema per Eventi estesi in SQL Server forniscono informazioni su:
- Come unire le viste
- Diverse query utili basate su queste viste
- La correlazione tra:
- Visualizza colonne
-
CREATE EVENT SESSIONClausole - Interfaccia utente di SSMS
Appendice: Query per trovare i titolari di autorizzazioni degli Eventi estesi
Le autorizzazioni indicate in questo articolo sono:
ALTER ANY EVENT SESSIONVIEW SERVER STATECONTROL SERVER
L'istruzione SELECT...UNION ALL seguente restituisce le righe che mostrano chi ha le autorizzazioni necessarie per la creazione di sessioni eventi e l'esecuzione di query nelle viste del catalogo di sistema per gli Eventi estesi.
-- Ascertain who has the permissions listed in the ON clause.
-- 'CONTROL SERVER' permission includes all lower permissions like
-- 'ALTER ANY EVENT SESSION' and 'VIEW SERVER STATE'.
SELECT 'Owner-is-Principal' AS [Type-That-Owns-Permission],
NULL AS [Role-Name],
prin.name AS [Owner-Name],
PERM.permission_name COLLATE Latin1_General_CI_AS_KS_WS AS [Permission-Name]
FROM sys.server_permissions AS PERM
INNER JOIN sys.server_principals AS prin
ON prin.principal_id = PERM.grantee_principal_id
WHERE PERM.permission_name IN (
'CREATE ANY EVENT SESSION',
'ALTER ANY EVENT SESSION',
'VIEW SERVER PERFORMANCE STATE',
'VIEW SERVER STATE',
'CONTROL SERVER'
)
UNION ALL
-- Plus check for members of the 'sysadmin' fixed server role,
-- because 'sysadmin' includes the 'CONTROL SERVER' permission.
SELECT 'Owner-is-Role',
prin.name, -- [Role-Name]
CAST((IsNull(pri2.name, N'No members')) AS NVARCHAR(128)),
NULL
FROM sys.server_role_members AS rolm
RIGHT JOIN sys.server_principals AS prin
ON prin.principal_id = rolm.role_principal_id
LEFT JOIN sys.server_principals AS pri2
ON rolm.member_principal_id = pri2.principal_id
WHERE prin.name = 'sysadmin';
Funzione HAS_PERMS_BY_NAME
L'istruzione SELECT seguente riporta le autorizzazioni dell'utente. Si basa sulla funzione predefinita HAS_PERMS_BY_NAME.
Inoltre, se si dispone dell'autorizzazione per impersonare temporaneamente altri accessi, è possibile rimuovere il commento dalle istruzioni EXECUTE AS e REVERT per verificare se altri accessi dispongono dell'autorizzazione ALTER ANY EVENT SESSION.
--EXECUTE AS LOGIN = 'LoginNameHere';
SELECT HAS_PERMS_BY_NAME(NULL, NULL, 'ALTER ANY EVENT SESSION');
--REVERT;