Istanze utente per non amministratori

La funzionalità dell'istanza utente consente agli utenti non amministratori di eseguire una versione locale di SQL Server nell'account in uso.  Con le istanze utente, gli utenti non amministratori dispongono di privilegi di proprietario del database sull'istanza in esecuzione nel loro account. 

Nota importanteImportante

Questa caratteristica verrà rimossa a partire da una delle prossime versioni di Microsoft SQL Server. Evitare di utilizzare questa funzionalità in un nuovo progetto di sviluppo e prevedere interventi di modifica nelle applicazioni in cui è attualmente implementata.

Un'istanza utente, nota anche come istanza figlio o client, è un'istanza di SQL Server generata per conto di un utente dall'istanza padre, ovvero l'istanza primaria eseguita come servizio, ad esempio sqlExpress. L'istanza utente viene eseguita come processo utente nel contesto di protezione di tale utente. L'istanza utente è inoltre isolata dall'istanza padre e da qualsiasi altra istanza utente in esecuzione nel computer. Questa funzionalità è nota anche come RANU (Run As Normal User).

[!NOTA]

Per coerenza, nella documentazione online di SQL Server Express questa funzionalità viene sempre indicata con il termine istanza utente. Questa funzionalità è inoltre stata introdotta in SQL Server 2005 Express Edition.

Vantaggi delle istanze utente

Di seguito sono elencati alcuni dei motivi per cui risulta vantaggioso l'utilizzo del modello basato sulle istanze utente:

  • L'obiettivo primario del modello basato sulle istanze utente è quello di isolare gli utenti non amministratori di SQL Server, consentendo così ai singoli utenti di collegare i database desiderati senza il rischio di compromettere le attività di un altro utente. Tale isolamento viene ottenuto generando un'istanza separata di SQL Server per ogni utente.

  • Un altro obiettivo di SQL Server Express è quello di semplificare l'utilizzo del prodotto per gli utenti non amministratori. Molti utenti di Windows dispongono di account con privilegi amministrativi. Sfortunatamente, quando si utilizza un account Administrator risulta più semplice assumere il controllo del computer tramite malware. Se il programma malware è eseguito da utenti non amministratori, tuttavia, non potrà apportare modifiche estese all'intero sistema e potrà quindi causare solo danni limitati.

Panoramica del modello basato sulle istanze utente

Le caratteristiche principali del modello basato sulle istanze utente possono essere riepilogate come segue:

  • Per generare istanze utente, è necessario che sia in esecuzione un'istanza padre di SQL Server.

  • Ogni volta che si installa SQL Server Express, il programma di installazione crea una cartella Template Data in cui vengono archiviati i database di sistema puliti disponibili per l'utilizzo da parte del processo dell'istanza utente, se richiamato.

  • Per richiamare l'istanza utente si utilizza la parola chiave user instance per la stringa di connessione in SQLClient. I possibili valori di questa parola chiave sono true o false e il valore predefinito è false. Se la parola chiave viene impostata su false, il supporto delle istanze utente non viene attivato e viene mantenuto il funzionamento originale. Se la parola chiave user instance viene impostata su true, il modello basato sulle istanze utente verrà attivato durante la chiamata ADO.NET connection.open.

    [!NOTA]

    Lo spazio dei nomi System.Data.SqlClient definisce un set di classi che abilita l'accesso al database di SQL Server, denominato collettivamente provider di dati .NET per SQL Server o SqlClient. Le applicazioni gestite interagiscono con SqlClient tramite l'API ADO .NET per eseguire query e modifiche sui dati e le informazioni dello schema archiviati nei database di SQL Server. Per ulteriori informazioni, vedere la documentazione di Visual Studio 2005.

  • Quando viene generata la prima istanza utente per qualsiasi utente, i database di sistema vengono copiati dalla cartella Template Data in un percorso della directory del repository locale dei dati di applicazione dell'utente e diventano disponibili per l'utilizzo esclusivo da parte dell'istanza utente. Il percorso corrisponde in genere a unità:\Documents and Settings\nome utente\Impostazioni Locali\Dati applicazioni\Microsoft\Microsoft SQL Server Data\SQLEXPRESS.

  • L'utente si connette alla nuova istanza utente come SysAdmin e può utilizzare il database anche se non è un amministratore nell'istanza padre.

    Nota sulla protezioneNota sulla protezione

    Gli account di accesso sottoposti a provisioning come membri del ruolo predefinito del server sysadmin durante l'installazione vengono invece sottoposti a provisioning come amministratori nel database del modello. Sono membri del ruolo predefinito del server sysadmin nell'istanza utente a meno che non venga rimossa.

  • Dopo la generazione dell'istanza utente, SQLClient consente di reindirizzare tutte le chiamate all'istanza utente.

[!NOTA]

I database utente consentono di derivare le proprietà READONLY dagli attributi e dalle autorizzazioni del file system per il file primario del database. Le impostazioni ALTER DATABASE SET READ_ONLY/READ_WRITE non sono applicabili.

Stringa di connessione per l'utilizzo dell'istanza utente

conn string =
"Data Source=.\\SQLExpress" +
"integrated security=true;" + 
"attachdbfilename=|DataDirectory|\mydb.mdf;" +
"user instance=true"
string connstr = GetConnectionString(); // get from config
using(SqlConnection conn = new SqlConnection(connstr)) {
  // this will connect to the user instance, not to the 
  // default SSE instance
  conn.Open();
  // use the connection to the user instance
}

Connessione a un'istanza utente

L'unico protocollo di rete supportato per le istanze utente è il protocollo Named Pipes locale e ciò significa che non è consentita la connessione a un'istanza utente da un computer remoto.

Per informazioni sulla connessione a un'istanza utente utilizzando SQL Server Management Studio, vedere "SQL Server Management Studio e SQL Server Express" nella documentazione in linea di SQL Server Express.

[!NOTA]

Per ulteriori informazioni sul protocollo Named Pipes o altri protocolli di rete, vedere la Guida di Gestione configurazione SQL Server. Per accedere a questa Guida, fare clic sul pulsante Start, scegliere Esegui e quindi digitare SQLServerManager.msc. Verrà aperta la console Gestione configurazione SQL Server. Per accedere alla Guida, fare clic sul menu ?. Per visualizzare i protocolli di rete disponibili per SQL Server, fare clic su Configurazione di rete SQL Server.

Amministrazione delle istanze utente

Le informazioni seguenti sono destinate agli amministratori responsabili della gestione delle istanze utente.

Vista/stored procedure/Transact-SQL

Descrizione

Select * from sys.dm_os_child_instances (Transact-SQL)

Consente di eseguire una vista virtuale per elencare tutte le istanze utente generate nell'istanza padre.

SHUTDOWN

Interrompe SQL Server. Utilizzare questo comando per interrompere l'istanza utente. Per ulteriori informazioni sull'utilizzo del comando SHUTDOWN, vedere SHUTDOWN (Transact-SQL) nella documentazione in linea di SQL Server.

sp_configure 'user instances enabled'

Controlla l'attivazione o disattivazione della funzionalità istanza utente.

Per attivare la generazione di istanze utente, utilizzare:

sp_configure 'user instances enabled','1' 

RECONFIGURE;

GO

Per disabilitare la generazione di istanze utente, utilizzare:

sp_configure 'user instances enabled','0'.

sp_configure ‘user instance timeout’

Utilizzare:

sp_configure 'show advanced options', 1;

RECONFIGURE;

GO

sp_configure 'user instance timeout', 5;

GO

Dove 5 è il valore minimo e 65535 il valore massimo.

È necessario eseguire sp_configure ‘show advanced options’ per visualizzare e impostare il timeout. Per ulteriori informazioni su show advanced options, vedere Impostazione delle opzioni di configurazione del server nella documentazione online di SQL Server.

È possibile impostare il timeout dell'istanza utente sia nell'istanza padre che nell'istanza utente.

All'avvio, un istanza utente eredita sempre il valore di timeout dall'istanza padre. Dopo l'avvio dell'istanza utente è comunque possibile utilizzare sp_configure per modificare il valore di timeout impostandone uno valido solo per l'istanza specifica.

Limitazioni per l'utilizzo delle istanze utente

Quando si utilizzano le istanze utente, è possibile che alcune funzionalità di SQL Server Express non funzionino come previsto. Nell'elenco seguente vengono descritte le possibili limitazioni:

  • Ogni utente può avviare una sola istanza utente.

  • La replica verrà disattivata.

  • Le istanze utente non supportano l'autenticazione di SQL Server, ma solo l'autenticazione di Windows.

  • Per le istanze utente è supportato unicamente il protocollo di rete Named Pipes locale.

  • L'istanza utente condivide le stesse voci del Registro di sistema dell'istanza padre.

  • Non sono supportate istanze utente con codice nativo. Questa funzionalità è supportata solo con ADO .NET.

  • La ricerca full-text non è supportata in un'istanza utente di SQL Server Express.

  • Il provider WMI per eventi del server non sarà supportato nelle istanze utente generate in modo dinamico. Sarà comunque disponibile per l'istanza padre di SQL Server Express. Per ulteriori informazioni sul provider WMI, vedere Provider WMI per eventi del server nella documentazione in linea di SQL Server.