ID e SID

Data creazione: 14 aprile 2006

Se si scrive codice che interagisce con il motore di SQL Server, è necessario tenere conto di due numeri utilizzati come rappresentazioni interne dell'entità. Ogni entità presenta un ID e un ID di protezione (SID). Il significato e l'origine di questi numeri dipendono dalla modalità di creazione dell'entità e dalla sua natura, ovvero se si tratta di un'entità di database o di server.

Numero di identificazione a livello del server

Quando viene creato un account di accesso di SQL Server, a tale account vengono assegnati un ID e un SID, visibili nella vista del catalogo sys.server_principals come principal_id e SID. L'ID (principal_id) identifica l'account di accesso come un'entità a protezione diretta all'interno del server. Viene assegnato da SQL Server al momento della creazione dell'account di accesso. Quando un account di accesso viene eliminato, il relativo numero ID viene riciclato. Il SID identifica il contesto di protezione dell'account di accesso ed è univoco all'interno dell'istanza del server. L'origine del SID dipende dalla modalità di creazione dell'account di accesso. Se l'account di accesso è stato creato da un utente o gruppo di Windows, a esso viene assegnato il SID di Windows dell'entità di origine. Il SID di Windows è univoco all'interno del dominio. Se l'account di accesso di SQL Server è stato creato da un certificato o da una chiave asimmetrica, viene assegnato un SID derivato dall'hash SHA-1 della chiave pubblica. Se l'account di accesso è stato creato come account di accesso di SQL Server legacy che richiede una password, il SID verrà generato dal server.

Numero di identificazione a livello di database

Quando viene creato un ruolo dell'utente del database, a tale ruolo vengono assegnati un ID e un ID di protezione (SID). Questi numeri sono visibili nella vista del catalogo sys.database_principals come principal_id e SID. L'ID identifica l'utente come un'entità a protezione diretta all'interno del database. Quando viene eliminato un utente del database, il relativo ID viene riciclato. Il SID assegnato a un utente del database è univoco all'interno del database. L'origine del SID dipende dalla modalità di creazione dell'utente del database. Se l'utente è stato creato da un account di accesso di SQL Server, riceve il SID dell'account di accesso. Se l'utente è stato creato da un certificato o da una chiave asimmetrica, riceve un SID derivato dall'hash SHA-1 della chiave pubblica.

Numero massimo di utenti del database

Il numero massimo di utenti del database è determinato dalle dimensioni del campo ID dell'utente. Il valore di un ID utente deve essere zero o un valore integer positivo. In SQL Server 2000 l'ID utente viene archiviato come un valore smallint composto da 16 bit, uno dei quali è il segno. Per tale motivo, il numero massimo di ID utente in SQL Server 2000 è 215 = 32.768. In SQL Server 2005 l'ID utente viene archiviato come un valore int composto da 32 bit, uno dei quali è il segno. Questi bit aggiuntivi consentono di assegnare 231 = 2.147.483.648 numeri ID.

Gli ID utente del database sono suddivisi in intervalli preallocati, come illustrato nella tabella seguente.

ID di SQL Server 2000 ID di SQL Server 2005 Allocato in

0

0

public

1

1

dbo

2

2

guest

3

3

INFORMATION_SCHEMA

4

4

SYSTEM_FUNCTION_SCHEMA

5 - 16383

5 - 16383

Utenti, alias, ruoli applicazione

16384

16384

db_owner

16385

16385

db_accessadmin

16386

16386

db_securityadmin

16387

16387

db_ddladmin

16389

16389

db_backupoperator

16390

16390

db_datareader

16391

16391

db_datawriter

16392

16392

db_denydatareader

16393

16393

db_denydatawriter

16394 - 16399

16394 - 16399

Riservato

16400 - 32767

Ruoli

16400 - 2,147,483,647

Utenti, ruoli, ruoli applicazione, alias

In SQL Server 2005 le dimensioni dell'ID utente sono aumentate da smallint (16 bit) a int (32 bit). Le API che richiedono un ID utente a 16 bit restituiranno risultati non corretti se viene passato un ID utente a 32 bit. Quando si esegue la migrazione di dati e applicazioni creati per una versione precedente di SQL Server, è consigliabile rivedere il codice per individuare riferimenti alle interfacce obsolete seguenti.

  • sysusers
  • syscacheobjects
  • sysmembers
  • sysobjects
  • syspermissions
  • sysprocesses
  • sysprotects
  • systypes
  • USER_ID

Queste interfacce richiedono ID utente a 16 bit e non restituiscono valori corretti se utilizzate con ID utente a 32 bit.

Vedere anche

Concetti

Entità

Altre risorse

sys.server_principals (Transact-SQL)
sys.database_principals (Transact-SQL)
USER_ID (Transact-SQL)
SUSER_SID (Transact-SQL)
CREATE LOGIN (Transact-SQL)
CREATE USER (Transact-SQL)

Guida in linea e informazioni

Assistenza su SQL Server 2005