SQL Server, Internet Information Server et le moteur ASP.NET fournissent tous des modèles de sécurité solides qui fonctionnent bien ensemble. Pour assurer la sécurité des données utilisateur et des applications, Microsoft définit également les paramètres par défaut de chaque service sur des valeurs assez faibles.
Le défi auquel sont confrontés la plupart des développeurs est de savoir comment utiliser SQL Server, IIS et ASP.NET pour définir le niveau de confiance approprié entre les applications et les données sans laisser de failles de sécurité qui peuvent être facilement compromises par d'autres. Étant donné que trois types de services sont impliqués (SQL Server, IIS et ASP.NET), trois étapes clés doivent être suivies pour garantir la sécurité de la solution. Cette section traite de l'une des méthodes les plus courantes (et fiables) pour définir des autorisations et des niveaux de confiance adéquats pour les applications Web.
Définir un compte utilisateur IIS personnalisé DotNetKB
Le moyen le plus sûr de sécuriser votre application Web consiste à définir un utilisateur personnalisé avec des autorisations limitées, puis à configurer IIS pour qu'il s'exécute en tant qu'utilisateur personnalisé lors de l'exécution de votre application Web. Ceci est assez simple à mettre en œuvre et garantit que chaque visiteur de votre application Web dispose uniquement des autorisations que vous souhaitez lui accorder.
La première étape consiste à générer un nouvel utilisateur Windows (appelé DotNetKB dans cet exemple), à définir un mot de passe fort pour celui-ci, puis à l'ajouter au groupe d'invités Windows (groupe Windows invité). Assurez-vous également que le mot de passe n'expire jamais et que les cases L'utilisateur ne peut pas modifier le mot de passe sont cochées. Cela générera un utilisateur aux privilèges limités que vous pourrez utiliser comme identité lors de l'exécution de votre application Web dans IIS (voir Figure 1).
Ensuite, appelez l'Administrateur Internet Information Server et sélectionnez l'application Web qui héberge ces pages. Dans cet exemple, vous pouvez sélectionner l'application Web (DotNetKB_WebSite) qui héberge la page de test générée précédemment. Cliquez avec le bouton droit sur l'application Web dans l'arborescence et sélectionnez Propriétés... dans le menu contextuel. Sélectionnez ensuite Sécurité de l'annuaire et cliquez sur le bouton Modifier dans la section Contrôle d'accès anonyme et d'authentification de la boîte de dialogue. Enfin, entrez un nom d'utilisateur personnalisé (DotNetKB), décochez la case Autoriser IIS à contrôler le mot de passe et entrez un mot de passe pour le compte d'utilisateur personnalisé. Après avoir terminé tout ce travail, cliquez sur le bouton OK pour enregistrer ces modifications dans la base de données de configuration IIS (voir Figure 2).
[Page coupée]
À ce stade, IIS s'exécutera sous un compte personnalisé avec des autorisations limitées. Tout visiteur qui visite les pages Web de votre application s'exécutera en tant qu'utilisateur personnalisé et disposera uniquement des autorisations d'authentification pour cet utilisateur personnalisé.
Autoriser le compte utilisateur DotNetKB à accéder à SQL Server
Vous devez ensuite accorder à l'utilisateur personnalisé les autorisations appropriées pour accéder à la base de données (DotNetKB). Pour ce faire, vous pouvez utiliser Microsoft SQL Server Enterprise Manager ou écrire un script personnalisé pour créer un tel utilisateur et lui accorder l'accès à des objets spécifiques. Cet article explique comment procéder à l'aide de SQL Server Enterprise Manager.
Remarque : Bien que Visual Studio .NET 2003 dispose de nombreuses fonctionnalités intégrées puissantes compatibles avec SQL Server, il ne permet pas une gestion facile des utilisateurs et des autorisations des utilisateurs à partir de Visual Studio .NET 2003. Dans les grandes organisations et équipes, ces tâches avancées sont généralement effectuées par les administrateurs de bases de données. Par conséquent, après avoir démarré SQL Server Enterprise Manager, vous pouvez suivre les étapes ci-dessous pour ajouter un utilisateur personnalisé (DotNetKB) à la base de données.
·Dans l'arborescence de gauche, développez le nœud pour afficher la base de données DotNetKB. Sur mon ordinateur, l'arborescence est structurée comme suit : Bases de données du groupe SQL Server racine de la console (LOCAL) (Windows NT) DotNetKB.
·Ensuite, cliquez avec le bouton droit sur le nœud Utilisateurs sous la base de données et sélectionnez Nouvel utilisateur de base de données... (Nouvel utilisateur de base de données...). Lorsque la boîte de dialogue Propriétés de l'utilisateur de la base de données - Nouvel utilisateur apparaît, sélectionnez (<Nouveau>) dans la liste déroulante Nom de connexion.
·Lorsque la boîte de dialogue Propriétés de connexion à SQL Server - Nouvelle connexion apparaît, sélectionnez l'onglet Général et entrez DotNetKB dans la zone de saisie Nom. Assurez-vous que le bouton radio Authentification Windows est sélectionné et sélectionnez le nom de l'ordinateur sur lequel se trouve le compte d'utilisateur personnalisé dans la liste déroulante Domaine. Sélectionnez ensuite DotNetKB dans la liste déroulante Base de données.
·Maintenant, sélectionnez l'onglet Bases de données, recherchez la base de données DotNetKB dans la liste en haut de la boîte de dialogue et sélectionnez-la. Ensuite, assurez-vous que le rôle public est sélectionné dans la liste en bas de la boîte de dialogue. Enfin, cliquez sur le bouton OK en bas de la boîte de dialogue pour enregistrer vos modifications.
Ensuite, vous devez ajouter des autorisations d'exécution à toutes les procédures stockées et fonctions personnalisées de la base de données DotNetKB. Pour ce faire, il vous suffit d'accorder des autorisations au rôle public. Vous pouvez accorder des autorisations aux utilisateurs de DotNetKB, ce qui facilitera les connexions futures (lorsque ces utilisateurs auront accès à DotNetKB) pour exécuter des procédures stockées sans qu'il soit nécessaire d'ajouter de nouvelles autorisations pour chaque utilisateur.
Voici les étapes pour accorder des autorisations d'exécution aux procédures et fonctions stockées dans la base de données DotNetKB :
· Mettez en surbrillance le nœud Utilisateurs sous la base de données DotNetKB dans l'arborescence pour afficher une liste d'utilisateurs pour cette base de données. Localisez l'utilisateur DotNetKB et double-cliquez dessus pour ouvrir la boîte de dialogue Propriétés des utilisateurs de base de données.
· Avec le rôle public en surbrillance (sélectionné), cliquez sur le bouton Propriétés... pour ouvrir la boîte de dialogue Propriétés du rôle de base de données. Cliquez ensuite sur le bouton Autorisations... pour afficher une liste des objets de base de données et des paramètres d'autorisation.
Avec le rôle public sélectionné dans la liste déroulante Rôle de base de données en haut de la boîte de dialogue, recherchez toutes les procédures stockées et fonctions personnalisées définies pour cette base de données (vous devrez peut-être développer la boîte de dialogue pour voir les noms complets) et assurez-vous Cochez la case EXECUTE à côté de chaque élément. Vous constaterez peut-être que certains objets système ont d'autres cases cochées, veuillez ne pas modifier ces options.
· Enfin, après avoir défini toutes les autorisations d'exécution, cliquez sur le bouton OK pour enregistrer les modifications et fermer la boîte de dialogue. Cliquez sur le bouton OK l'un après l'autre jusqu'à ce que toutes les boîtes de dialogue soient fermées.
À ce stade, vous avez créé un utilisateur personnalisé pour IIS et défini les autorisations correspondantes de l'utilisateur dans SQL Server. Vous devez maintenant apporter une modification à la configuration dans le projet Web ASP.NET pour vous assurer qu'ASP.NET utilise le même compte utilisateur pour tous les appels à SQL Server.
Configurez votre application ASP.NET pour usurper l'identité des utilisateurs DotNetKB
La dernière étape pour générer une configuration solide et fiable pour une application Web ASP.NET exécutée sous IIS consiste à configurer l'application Web ASP.NET afin qu'elle puisse accepter un ID utilisateur Windows d'IIS et puisse être utilisée pour accéder à d'autres ressources du système d'exploitation. . Pour ce faire, il vous suffit de saisir une ligne de code dans le fichier racine web.config.
Le fichier web.config modifié ressemble à ceci :
<configuration>
<système.web>
...d'autres éléments...
<identity impersonate="true"/> <!-- En supposant l'ID utilisateur IIS-->
...d'autres éléments...
</system.web>
</configuration>
Notez que vous ajoutez simplement l'élément et définissez l'attribut mock sur true. Vous n'avez pas besoin de saisir un compte utilisateur ou un mot de passe car ces informations seront fournies par IIS. Autrement dit, même si d'autres personnes sont capables de lire votre fichier de configuration, elles ne peuvent pas déterminer quelles informations d'identification sont utilisées pour exécuter votre application Web.
À ce stade, vous avez généré un utilisateur personnalisé et défini les autorisations appropriées pour lui permettre d'accéder à SQL Server et IIS.
À ce stade, IIS s'exécutera sous un compte personnalisé avec des autorisations limitées. Tout visiteur qui visite les pages Web de votre application s'exécutera en tant qu'utilisateur personnalisé et disposera uniquement des autorisations d'authentification pour cet utilisateur personnalisé.
Autoriser le compte utilisateur DotNetKB à accéder à SQL Server
Vous devez ensuite accorder à l'utilisateur personnalisé les autorisations appropriées pour accéder à la base de données (DotNetKB). Pour ce faire, vous pouvez utiliser Microsoft SQL Server Enterprise Manager ou écrire un script personnalisé pour créer un tel utilisateur et lui accorder l'accès à des objets spécifiques. Cet article explique comment procéder à l'aide de SQL Server Enterprise Manager.
Remarque : Bien que Visual Studio .NET 2003 dispose de nombreuses fonctionnalités intégrées puissantes compatibles avec SQL Server, il ne permet pas une gestion facile des utilisateurs et des autorisations des utilisateurs à partir de Visual Studio .NET 2003. Dans les grandes organisations et équipes, ces tâches avancées sont généralement effectuées par les administrateurs de bases de données. Par conséquent, après avoir démarré SQL Server Enterprise Manager, vous pouvez suivre les étapes ci-dessous pour ajouter un utilisateur personnalisé (DotNetKB) à la base de données.
·Dans l'arborescence de gauche, développez le nœud pour afficher la base de données DotNetKB. Sur mon ordinateur, l'arborescence est structurée comme suit : Bases de données du groupe SQL Server racine de la console (LOCAL) (Windows NT) DotNetKB.
·Ensuite, cliquez avec le bouton droit sur le nœud Utilisateurs sous la base de données et sélectionnez Nouvel utilisateur de base de données... (Nouvel utilisateur de base de données...). Lorsque la boîte de dialogue Propriétés de l'utilisateur de la base de données - Nouvel utilisateur apparaît, sélectionnez (<Nouveau>) dans la liste déroulante Nom de connexion.
·Lorsque la boîte de dialogue Propriétés de connexion à SQL Server - Nouvelle connexion apparaît, sélectionnez l'onglet Général et entrez DotNetKB dans la zone de saisie Nom. Assurez-vous que le bouton radio Authentification Windows est sélectionné et sélectionnez le nom de l'ordinateur sur lequel se trouve le compte d'utilisateur personnalisé dans la liste déroulante Domaine. Sélectionnez ensuite DotNetKB dans la liste déroulante Base de données.
·Maintenant, sélectionnez l'onglet Bases de données, recherchez la base de données DotNetKB dans la liste en haut de la boîte de dialogue et sélectionnez-la. Ensuite, assurez-vous que le rôle public est sélectionné dans la liste en bas de la boîte de dialogue. Enfin, cliquez sur le bouton OK en bas de la boîte de dialogue pour enregistrer vos modifications.
Ensuite, vous devez ajouter des autorisations d'exécution à toutes les procédures stockées et fonctions personnalisées de la base de données DotNetKB. Pour ce faire, il vous suffit d'accorder des autorisations au rôle public. Vous pouvez accorder des autorisations aux utilisateurs de DotNetKB, ce qui facilitera les connexions futures (lorsque ces utilisateurs auront accès à DotNetKB) pour exécuter des procédures stockées sans qu'il soit nécessaire d'ajouter de nouvelles autorisations pour chaque utilisateur.
Voici les étapes pour accorder des autorisations d'exécution aux procédures et fonctions stockées dans la base de données DotNetKB :
· Mettez en surbrillance le nœud Utilisateurs sous la base de données DotNetKB dans l'arborescence pour afficher une liste d'utilisateurs pour cette base de données. Localisez l'utilisateur DotNetKB et double-cliquez dessus pour ouvrir la boîte de dialogue Propriétés des utilisateurs de base de données.
· Avec le rôle public en surbrillance (sélectionné), cliquez sur le bouton Propriétés... pour ouvrir la boîte de dialogue Propriétés du rôle de base de données. Cliquez ensuite sur le bouton Autorisations... pour afficher une liste des objets de base de données et des paramètres d'autorisation.
Avec le rôle public sélectionné dans la liste déroulante Rôle de base de données en haut de la boîte de dialogue, recherchez toutes les procédures stockées et fonctions personnalisées définies pour cette base de données (vous devrez peut-être développer la boîte de dialogue pour voir les noms complets) et assurez-vous Cochez la case EXECUTE à côté de chaque élément. Vous constaterez peut-être que certains objets système ont d'autres cases cochées, veuillez ne pas modifier ces options.
· Enfin, après avoir défini toutes les autorisations d'exécution, cliquez sur le bouton OK pour enregistrer les modifications et fermer la boîte de dialogue. Cliquez sur le bouton OK l'un après l'autre jusqu'à ce que toutes les boîtes de dialogue soient fermées.
À ce stade, vous avez créé un utilisateur personnalisé pour IIS et défini les autorisations correspondantes de l'utilisateur dans SQL Server. Vous devez maintenant apporter une modification à la configuration dans le projet Web ASP.NET pour vous assurer qu'ASP.NET utilise le même compte utilisateur pour tous les appels à SQL Server.
Configurez votre application ASP.NET pour usurper l'identité des utilisateurs DotNetKB
La dernière étape pour générer une configuration solide et fiable pour une application Web ASP.NET exécutée sous IIS consiste à configurer l'application Web ASP.NET afin qu'elle puisse accepter un ID utilisateur Windows d'IIS et puisse être utilisée pour accéder à d'autres ressources du système d'exploitation. . Pour ce faire, il vous suffit de saisir une ligne de code dans le fichier racine web.config.
Le fichier web.config modifié ressemble à ceci :
<configuration>
<système.web>
...d'autres éléments...
<identity impersonate="true"/> <!-- En supposant l'ID utilisateur IIS-->
...d'autres éléments...
</system.web>
</configuration>
Notez que vous ajoutez simplement l'élément et définissez l'attribut mock sur true. Vous n'avez pas besoin de saisir un compte utilisateur ou un mot de passe car ces informations seront fournies par IIS. Autrement dit, même si d'autres personnes sont capables de lire votre fichier de configuration, elles ne peuvent pas déterminer quelles informations d'identification sont utilisées pour exécuter votre application Web.
À ce stade, vous avez généré un utilisateur personnalisé et défini les autorisations appropriées pour lui permettre d'accéder à SQL Server et IIS.