Instances d'utilisateur pour les non-administrateurs

Instance utilisateur est une fonctionnalité qui permet aux non-administrateurs d'exécuter une version locale de SQL Server depuis leur propre compte. Ils peuvent ainsi bénéficier de privilèges de propriétaire de base de données sur l'instance exécutée depuis leur compte. 

Important

Cette fonctionnalité sera supprimée dans une prochaine version de Microsoft SQL Server. Évitez d'utiliser cette fonctionnalité dans de nouveaux travaux de développement et prévoyez de modifier les applications qui utilisent actuellement cette fonctionnalité.

L'instance utilisateur, également désignée comme instance enfant ou cliente, est une instance de SQL Server qui est générée par l'instance parente (l'instance principale exécutée en tant que service, telle que sqlExpress) pour le compte d'un utilisateur. L'instance utilisateur s'exécute en tant que processus utilisateur dans le contexte de sécurité de cet utilisateur. L'instance utilisateur est isolée de l'instance parente et de toutes les autres instances utilisateur exécutées sur l'ordinateur. La fonction d'instance utilisateur est également appelée RANU (« Run As Normal User », exécution en tant qu'utilisateur normal).

Notes

À des fins de cohérence, la documentation en ligne de SQL Server Express fait référence à cette fonctionnalité comme instance utilisateur. En outre, cette fonctionnalité a été introduite par SQL Server 2005 Express Edition.

Pourquoi l'instance utilisateur ?

Vous trouverez ci-dessous les raisons qui expliquent les avantages à utiliser le modèle d'instance utilisateur :

  • L'objectif principal du modèle d'instance utilisateur est d'isoler les utilisateurs non-administrateurs de SQL Server, ce qui permet aux utilisateurs d'attacher des bases de données arbitraires sans risque de compromettre un autre utilisateur. Cet isolement est rendu possible en générant une instance distincte de SQL Server pour chaque utilisateur.

  • Outre l'isolement, l'objectif de SQL Server Express est également la convivialité pour les utilisateurs non-administrateurs. De nombreux utilisateurs Windows possèdent des comptes avec des privilèges administratifs. Malheureusement, une exécution en tant qu'administrateur expose l'ordinateur d'un utilisateur à des logiciels malveillants. Cependant, ces logiciels exécutés par des utilisateurs non-administrateurs ne peuvent pas causer de modifications à l'échelle du système, leur impact est donc limité.

Présentation de l'instance utilisateur

Le modèle d'instance utilisateur peut se résumer avec les points suivants :

  • Une instance parente de SQL Server doit être en cours d'exécution pour générer des instances utilisateur.

  • Lorsque vous installez SQL Server Express, le programme d'installation crée un dossier Template Data qui stocke des bases de données système propres utilisées par le processus d'instance utilisateur, si celui-ci est appelé.

  • Pour appeler l'instance utilisateur, utilisez le mot clé de chaîne de connexion user instance dans SQLClient, qui peut prendre la valeur true ou false, la valeur par défaut étant false. Lorsqu'il a la valeur false, aucune prise en charge d'instance utilisateur n'est appliquée et le comportement d'origine est conservé. Si user instance a la valeur true, le modèle d'instance utilisateur est activé au cours de l'appel connection.open ADO. NET.

    Notes

    L'espace de noms System.Data.SqlClient définit un jeu de classes qui permet d'accéder à la base de données SQL Server et qui est appelé collectivement fournisseur de données .NET pour SQL Server, ou SqlClient. Les applications gérées interagissent avec SqlClient via l'API ADO .NET pour interroger et manipuler des données et des informations de schéma stockées dans des bases de données SQL Server. Pour plus d'informations, consultez la documentation de Visual Studio 2005.

  • Lors de la création de la première instance utilisateur, quel qu'il soit, les bases de données système sont copiées du dossier Template Data vers un chemin d'accès sous le répertoire référentiel des données de l'application locale de l'utilisateur, afin d'être utilisées exclusivement par l'instance utilisateur. Ce chemin d'accès est généralement lecteur:\Documents and Settings\Username\Local Settings\Application Data\Microsoft\Microsoft SQL Server Data\SQLEXPRESS.

  • L'utilisateur se connecte à cette nouvelle instance utilisateur SysAdmin et utilise la base de données même si cet utilisateur n'est pas un administrateur sur l'instance parente.

    Remarque relative à la sécuritéRemarque relative à la sécurité

    Les connexions configurées en tant que membres du rôle serveur fixe sysadmin pendant l'installation sont configurées en tant qu'administrateurs dans la base de données de modèles. Ils resteront membres du rôle serveur fixe sysadmin sur l'instance utilisateur jusqu'à leur éventuelle suppression.

  • Lorsque l'instance utilisateur est générée, SQLClient redirige tous les appels vers cette instance.

Notes

Les bases de données utilisateur dérivent leurs propriétés READONLY en fonction des attributs et des autorisations de système de fichier du fichier primaire de la base de données. Les paramètres ALTER DATABASE SET READ_ONLY/READ_WRITE ne s'appliquent pas.

Chaîne de connexion pour l'utilisation de l'instance utilisateur

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
}

Connexion à une instance utilisateur

La prise en charge du protocole réseau pour des instances utilisateur s'effectue uniquement par l'intermédiaire de canaux nommés locaux, ce qui implique l'impossibilité faite à un utilisateur de se connecter à une instance utilisateur à partir d'un ordinateur distant.

Pour plus d'informations sur la connexion à une instance utilisateur à l’aide de SQL Server Management Studio, consultez « SQL Server Management Studio et SQL Server Express » dans la Documentation en ligne de SQL Server Express

Notes

Pour plus d'informations sur les canaux nommés ou les protocoles réseau, consultez l'aide du Gestionnaire de configuration SQL Server. Pour accéder à cette aide, dans le menu Démarrer, cliquez sur Exécuter, puis tapez SQLServerManager.msc. Cette opération ouvre le Gestionnaire de configuration SQL Server. Pour accéder à l'aide, cliquez sur le menu Aide. Pour afficher les protocoles réseau pour SQL Server, cliquez sur Configuration du réseau SQL Server.

Administration des instances utilisateur

Si vous êtes un administrateur et souhaitez gérer des instances utilisateur, les informations suivantes sont utiles.

Afficher/procédure stockée/Transact-SQL

Description

Select * from sys.dm_os_child_instances (Transact-SQL)

Vous permet d'exécuter une vue virtuelle qui répertorie toutes les instances utilisateur générées sur l'instance parente.

SHUTDOWN

Arrête SQL Server. Utilisez cette commande pour arrêter l'instance utilisateur. Pour plus d'informations sur l’utilisation de SHUTDOWN, consultez SHUTDOWN (Transact-SQL) dans la documentation en ligne de SQL Server.

sp_configure 'user instances enabled'

Contrôle l'activation ou la désactivation d'une fonctionnalité d'instance utilisateur.

Pour activer la génération des instances utilisateur, utilisez :

sp_configure 'user instances enabled','1' 

RECONFIGURE;

GO

Pour désactiver la génération des instances utilisateur, utilisez :

sp_configure 'user instances enabled','0'.

sp_configure ‘user instance timeout’

Utilisez :

sp_configure 'show advanced options', 1;

RECONFIGURE;

GO

sp_configure 'user instance timeout', 5;

GO

Où 5 correspond à la valeur minimale et 65535 à la valeur maximale.

Vous avez besoin de sp_configure ‘show advanced options’ pour afficher et définir le délai d'attente. Pour plus d'informations sur l’option show advanced options, consultez Définition des options de configuration de serveur dans la documentation en ligne de SQL Server.

Vous pouvez définir la valeur d'expiration de l'instance utilisateur dans l'instance parente et l'instance utilisateur.

Lorsqu'une instance utilisateur démarre, elle obtient toujours la valeur d'expiration de l'instance parente. Cependant, une fois que l'instance utilisateur démarre, elle peut utiliser sp_configure pour modifier la valeur d'expiration qui n'est valide que pour cette instance spécifique.

Limitations relatives à l'utilisation des instances utilisateur

Lorsque vous utilisez des instances utilisateur, certaines fonctionnalités SQL Server Express peuvent ne pas fonctionner comme prévu. La liste suivante décrit les limitations possibles :

  • Un utilisateur ne peut avoir qu'une seule instance utilisateur.

  • La réplication sera désactivée.

  • L'instance utilisateur ne prend pas en charge l'authentification SQL Server. Seule l'authentification Windows est prise en charge.

  • La prise en charge des protocoles réseau pour les instances utilisateur est limitée aux canaux nommés locaux.

  • L'instance utilisateur partage les entrées de registre de l'instance parente.

  • Il n'y a pas de prise en charge pour l'instance utilisateur avec le code natif. Cette fonctionnalité n'est prise en charge qu'avec ADO .NET.

  • La recherche en texte intégral n'est pas prise en charge sur une instance utilisateur SQL Server Express.

  • Le fournisseur WMI pour les événements de serveur ne sera pas pris en charge sur les instances utilisateur produites dynamiquement. Cela devrait toutefois être le cas sur l'instance SQL Server Express parente. Pour plus d'informations sur le fournisseur WMI, consultez la rubrique fournisseur WMI pour les événements de serveur dans la documentation en ligne de SQL Server.