begin process at 2010 07 29 22:30:29
  Trouver un code source :
 
dans
 
Accueil > 

Tutoriels

 > 

Sécurité

 > SÉCURITÉ SQL SERVER

SÉCURITÉ SQL SERVER


 Information sur le tutoriel

Note :
Aucune note

 Description

SQL Server 2005 adopte une sécurité à deux niveaux : Moteur et base de données.
Que sont les schémas, rôles, rôles de serveur fixe, peut on intégrer la sécurité Active Directory à SQL Server,...
Ce tutorial est une synthèse de la gestion des droits du moteur de bases de données.

Tutorial


Ce document est un aide mémoire (de concepts portant sur la sécurité) quant à la manipulation d'instances SQL Server. Basé sur les versions 2000 à 2005, il peut servir de base à la gestion de versions antérieures (la sécurité étant similaire, avec quelques concepts en moins).

Ce document n'est pas un mode d'emploi des étapes à suivre pour effectuer des opérations de sécurité. Il est donc indispensable de savoir manipuler SQL Server.

L'exploitation d'une instance SQL Server nécessite de tenir compte d'aspects sécuritaires. SQL Server impose la sécurité à travers deux niveaux :

  • L'authentification au serveur,
  • Les droits d'accès au moteur de bases de données,

Authentification au serveur

L'authentification consiste à vérifier l'identité de l'utilisateur (login), qu'SQL Server gère sous la forme d'un objet « connexion ». Seules les applications utilisant ces connexions auront le droit d'exploiter l'instance. Dans le cas contraire, l'application se voit rejeté du système.

sqlsrv01.JPG

Lorsqu'une application tente d'accéder à une instance SQL Server, elle la contacte en usant d'une chaine de connexion. Dans cette dernière nous retrouveront les paramètres permettant de situer le serveur (sur un réseau), d'identifier le mode d'authentification, de
paramètres permettent également d'identifier la connexion utilisée par l'application.

Par analogie, la connexion est comme une clé permettant d'ouvrir la porte à l'instance SQL Server (pas encore à la base de données, mais uniquement au moteur). La chaine de connexion permet de localiser la clé qui est rangée dans une boite à clés.

Deux types d'authentifications existent :

sqlsrv02.JPG

« Authentification SQL Serveur »
Ce mode nécessite de fournir (dans la chaine de connexion à la base de données - coté application) un nom d'utilisateur et un mot de passe.
Pour utiliser ce mode, il est nécessaire de créer une connexion (au sens SQL Server) basé sur le mode « SQL Server », nécessitant la saisie d'un mot de passe.

« Authentification Windows » (NTLM )
Ce mode peut être résumé à la situation suivante : puisque l'utilisateur s'est authentifié sur sa session Windows (AD, ou locale), il est inutile de re vérifier son identité. Ensuite le protocole NTLM fait le reste.

Ce mode offre les avantages suivants :

  • Simplification et sécurisation de la chaine de connexion
    Elle ne contient plus les informations d'authentification => nom d'utilisateur + mot de passe,
  • Exploitation de la sécurité Active Directory
    L'ajout ou la suppression d'utilisateurs habilités à utiliser une base de données se voit géré en fonction des groupes AD dans lesquels navigue l'utilisateur,
  • Simplification de l'authentification pour l'utilisateur
    Il ne doit plus s'authentifier que sur sa session utilisateur, après, l'application accédant à la base ne lui demandera plus de s'authentifier,
  • Par extension, dans le cas où une application nécessite l'exploitation de répertoires partagés, la gestion par AD permet (lorsque l'utilisateur est noté membre du groupe utilisateur de mon application X) d'autoriser en une manipulation l'accès au répertoire partagé relatif à mon application, et, aux accès à la base de données pour les droits relatif à un simple utilisateur (p. exemple),
  • Ce mode permet également d'auditer plus précisément les opérations effectuées par les utilisateurs.


Pour exploiter ce mode sous SQL Server, il suffit, lors de la création d'une connexion (au sens SQL Server) de la lier à un objet provenant de l'AD (ou de la machine locale).

Cet objet peut être un groupe ou un utilisateur.

Il faut également ajouter dans la chaine de connexion (coté application) l'attribut suivant : « trusted_connection = true »

Les droits d'accès au moteur de bases de données

Les droits d'accès au moteur de bases de données considèrent deux niveaux :

  • Droits sur le moteur
  • Droits d'accès aux bases de données

Les droits d'accès sur le moteur

Lorsque la connexion est créée, l'administrateur peut lui attribuer des droits sur l'administration du moteur de base de données. Pour ce faire, SQL Server propose 8 « Rôles du serveur ». Ces rôles sont :

bulkadmin

Les membres du rôle serveur fixe bulkadmin peuvent exécuter l'instruction BULK INSERT (La tâche d'insertion en bloc est le moyen le plus rapide pour copier de gros volumes de données dans une table ou une vue SQL Server).

dbcreator

Les membres du rôle de serveur fixe dbcreator peuvent créer, modifier, supprimer et restaurer n'importe quelle base de données.

diskadmin

Les membres du rôle de serveur fixe diskadmin peuvent g érer les fichiers de base de données .

processadmin

Les membres du rôle de serveur fixe processadmin peuvent g érer les processus SQL Server .

securityadmin

Les membres du rôle serveur fixe securityadmin gèrent les connexions et leurs propriétés. Ils peuvent accorder (GRANT), refuser (DENY) et révoquer (REVOKE) les autorisations de niveau serveur. Ils peuvent également accorder (GRANT), refuser (DENY) et révoquer (REVOKE) les autorisations de niveau base de données. En outre, ils peuvent redéfinir les mots de passe des connexions SQL Server.

serveradmin

Les membres du rôle serveur fixe serveradmin peuvent modifier les options de configuration à l'échelle du serveur et arrêter le serveur.

setupadmin

Les membres du rôle de serveur fixe setupadmin peuvent ajouter et supprimer des serveurs liés, ainsi qu'exécuter certaines procédures stockées système.

sysadmin

Les membres du rôle fixe sysadmin peuvent effectuer toute activité sur le serveur. Par défaut, tous les membres du groupe Windows BUILTIN\Administrateurs, le groupe d'administrateurs locaux, sont membres du rôle de serveur fixe sysadmin.

Pour une connexion servant uniquement à l'exploitation d'une base de données, aucun rôle serveur ne doit être affecté.

Les droits d'accès aux bases de données

Les droits d'accès aux bases de données reposent sur deux concepts :

  • Les utilisateurs
  • Les objets sécurisables

Les utilisateurs et rôles

Lorsqu'une connexion est créée, elle ne peut à elle seule accéder aux ressources du moteur de base de données (bases, tables, fonctionnalités,...), il est nécessaire de l'associer à un utilisateur de la/des bases de données concernées par la connexion.

Une fois l'utilisateur créé, il est indispensable de lui attribuer des rôles (par défaut, il est db_owner)

Les rôles sont des conteneurs d'utilisateurs, l'équivalent sous Windows sont les groupes.

D'origine SQL Server propose 10 rôles

db_accessadmin

Les membres peuvent ajouter ou supprimer l'accès des connexions Windows, des groupes Windows et des connexions SQL Server.

db_backupoperator

Les membres du rôle de base de données fixe db_backupoperator peuvent sauvegarder la base de données.

db_datareader

Les membres du rôle de base de données fixe db_datareader peuvent lire toutes les données de toutes les tables utilisateur.

db_datawriter

Les membres du rôle de base de données fixe db_datawriter peuvent ajouter, supprimer et modifier des données dans toutes les tables utilisateur.

ddladmin

Les membres du rôle de base de données fixe db_ddladmin peuvent exécuter n'importe quelle commande DDL (Data Definition Language) dans une base de données.

db_denydatareader

Les membres du rôle de base de données fixe db_denydatareader ne peuvent lire aucune donnée des tables utilisateur d'une base de données.

db_denydatawriter

Les membres du rôle de base de données fixe db_denydatawriter ne peuvent ajouter, modifier ou supprimer aucune donnée des tables utilisateur d'une base de données.

db_owner

Les membres du rôle de base de données fixe db_owner peuvent réaliser toutes les activités de configuration et de maintenance sur la base de données.

db_securityadmin

Les membres du rôle de base de données fixe db_securityadmin peuvent modifier l'appartenance au rôle et gérer les autorisations.

public




Hormis ces rôles, l'administrateur peut en définir de nouveaux.
Pour chaque nouveau rôle créé, il est possible de définir les droits affectés par objet sécurisable.

Les objets sécurisables

Les schémas

Un Schéma est un conteneur d'objets sécurisables.

Ce concept permet de regrouper les objets (tables, store proc,...) en fonction de critères particuliers (propre à la conception de la base). La seule règle de regroupement est de ne pas disposer de deux objets portant le même nom dans le même schéma.

Le schéma étant un conteneur d'objets sécurisables, il est possible de définir des droits par membre utilisateur du schéma (qui donc s'appliqueront sur tous les éléments du schéma : tables, store proc,...)

Avant SQL Server 2005, les concepts de schéma et d'utilisateur (propriétaire) étaient assimilés.

Par défaut, le schéma dbo existe, et constitue le schéma par défaut. Tout objet sécurisable est toujours rattaché à un schéma (si l'administrateur n'en précise pas un lors de la création, il s'agit de dbo).

Exemple d'utilisation de schéma :

Soit une base de données contenant 5 tables (T1, T2, T3, T4, T5),
Le schéma TABLES_PROD contient comme tables T1, T2, T3,
Le Rôle Admin_PROD contient les utilisateurs U1, U2
Le Rôle USER_PROD contient les utilisateurs U3, U4
Le schéma TABLE_PROD contient comme membre le rôle ADMIN_PROD (avec tous les droits),

Dès lors, seuls les utilisateurs membres d'ADMIN_PROD pourront effectuer des requêtes sur les tables.

Les objets

Les objets sécurisables sont des tables, store procedures, views, ...

Conseils

Les points qui suivent visent à simplifier la sécurisation d'une application en considérant 1 utilisateur (utilisateur unique ne pouvant qu'exploiter les données du serveur).

  1. Groupe AD permettant de globaliser les utilisateurs de l'application
    Rechercher le groupe Active Directory dans lequel chaque utilisateur est susceptible d'utiliser l'application, à défaut créer un groupe Active Directory propre aux utilisateurs de l'application.
  2. Création de la connexion de base de données
    Création de la connexion en liaison avec le groupe cité au point 1. Vérifier que cette connexion ne soit pas membre d'un rôle de serveur fixe.
  3. Affectation des droits nécessaires à l'exploitation de la base
    Création de l'utilisateur de base de données en liaison avec la connexion citée au point précédent. Vérifier que ce dernier n'est pas membre du rôle db_owner. Les deux seuls rôles qui lui sont attribués sont : db_datareader, db_datawriter.
  4. Gérer les utilisateurs Active Directory afin que les élus soient membre du groupe considéré au point 1 afin de leur permettre l'accès à la base de données.

SQL Server 2005 only !

Les points qui suivent visent à simplifier la sécurisation d'une application en considérant 2 utilisateurs, et une base de données comportant deux « schémas ».
Le premier schéma (appelé Schéma A) contient toutes les tables propre à l'utilisation des données classique d'une application X. Le second schéma (appelé Schéma B) contient toutes les tables propre à l'utilisation des données sensibles de l'application X.

Le premier utilisateur (U1) a les droits d'accès sur le schéma A. Le second utilisateur (U2) dispose des droits d'accès sur le schéma A et sur le schéma B.

  • Groupes Active Directory
    Créer/rechercher le groupe contenant les utilisateurs de type U1, idem pour U2.
  • Création des connexions SQL Server
    Créer les connexions SQL Server pour les deux groupes cités au point 1.
  • Création des utilisateurs à la base de données
    Pour chaque connexion créée au point 2, créer l'utilisateur associé.
  • Affectation des droits sur les schémas
    Créer deux rôles, le premier donnant les droits de lecture/écriture sur le schéma A, le second donnant les droits de lecture/écriture sur le schéma B (Insert + Delete + Select + Execute).
    Pour plus d'information sur les permissions :
    Documentation en ligne SQL Server - moteur de base de données SQL Server - Considérations de sécurité pour les bases de données et les applications de base de données
  • Affectation des membres
    Pour le premier rôle cité ci dessus, attribuer les utilisateurs U1 et U2 comme membre.
    Pour le second rôle cité ci-dessus, n'attribuer que l'utilisateur U2.

ANNEXE : Présentation Power Point 2007

La sécurité SQL Server se réalise à deux niveaux :

-> Instance SQL Server

-> Droits d'accès au moteur de bases de données

L'authentification constitue le premier niveau de sécurité, il peut être de type SQL Server (nécessitant un nom d'utilisateur et un mot de passe) ou intégré à la sécurité Windows (prenant en charge les utilisateur et groupes provenant d'un domaine Active Directory)

Lors de la connexion à un serveur, l'application s'exécute dans un cadre de sécurité.

La sécurité SQL Server consiste à utiliser une connexion basée sur un nom d'utilisateur et un mot de passe. Ces dernier sont (en général) enregistré sur la machine qui héberge l'application cliente accédant à l'instance SQL Server.

L'utilisation de ce mode de connexion nécessitera de prévoir un mode de sécurité dans l'application (de type table utilisateur-mot de passe) en plus des sécurités inhérente au réseau d'entreprise pour l'accès aux ressources partagées (réseau, répertoire,...).

Dans le cas d'active directory, la connexion SQL Server est liée à un utilisateur (ou groupe) Windows (ou Active Directory).

Ainsi intégrée à la sécurité de l'entreprise, la gestion se voit centralisée. Dès qu'un utilisateur est placé dans le groupe d'utilisateur adhoc, il se voit autorisé l'accès aux bases de données propre qui le concerne !







Liaison des objets sécurisable avec les objets concernés en fonction de droits d'accès











 Historique

10 août 2007 16:24:49 :
Ajout des diapos power point (sous forme d'images)
13 août 2007 10:38:19 :
Ajout de captures d'écran

Commentaires

Commentaire de kiki95 le 06/04/2008 09:36:04

Merci de ces explications simples et clairs.
Cela m'a servi à m'y retrouver dans SQL 2005.
Personne n'a encore fait de commentaires, mais vu très souvent. On peut dire que vous n'avez pas fait cela pour rien.

Commentaire de remus60 le 12/11/2008 15:49:30

Bonjour rm50, et merci pour ce tutoriel, qui je trouve, est bien expliquer, étant un jeune développeur, cela me permet de voir les fonctionnalités et de mieux comprendre SQL Server.

Commentaire de rm50 le 12/03/2009 08:45:19

Merci, je suis content que ce tuto aide un peu !

Commentaire de dymsbess le 03/06/2009 18:43:20

10 règles au minimum à respecter :

http://www.xoowiki.com/Article/Autre/10-regles-86.aspx

Commentaire de rm50 le 03/06/2009 22:08:24

Bonjour DYMSBESS,

Effectivement, cela fait partie des règles que l'on peut suivre,
mais il me semble important de comprendre pour pouvoir faire... d'où l'article !

Suivre "bêtement" une recette sans la comprendre ne permet pas d'évoluer...
Et la sécurité ne se limite pas à 10 règles...

les DBA le savent bien !

Cet article permet aux non DBA de saisir les concepts... (développeur par exemple)

C'est mon opinion.

Ceci dit, tu as peut être 10 ingrédients magiques... mais il te manque les règles de politesses : Bonjour ... par exemple !
Un minimum pour un commentaire... vu le temps que prend un article pour être rédigé...

Allez sans rancune !

@+

Commentaire de nivsql le 30/06/2009 19:16:39

Salut et bravo pour cette présentation.

Quand aux regles auxquelles fait référence DYMSBESS je me suis arrété a la premiere et j'ai pouffer de rire. Je n'entrerais pas dans les détails mais cette regle est absurde, donnez moi (non le faites pas mais dans l'absolut c'est tout a fait faisable si votre serveur est visible et accessible depuis internet) l'IP d'un serveur SQL Server 2005 qui possede des Instances SQL accessible autrement qu'en mémoire partagée (donc accessible via résaux) et je saurais quelles sont les instances disponibles, sur quel port TCP elles ecoutes (si protocole TCP activé), sur quel Named Pipe elles ecoutes (si named pipe activé) etc etc, et ce SANS connaitre aucun mot de passe permetant d'acceder a la machine.

Il faut vraiment se méfier des wiki, ce sont loins d'etre des vérités absolues et visiblement l'ami qui a ecrit l'article xoowiki ne connais pas SQL Browser et le protocole SSRP.

Commentaire de rm50 le 30/06/2009 21:39:58

Merci beaucoup,
ca motive pour en faire d'autres !
@+

Commentaire de dymsbess le 25/12/2009 11:53:16

Bonjour à tous,

Il y a quelques remarques constructives dans vos commentaires et le besoin irrépressible pour certains d'étaler leur science. Néanmoins, je n'ai jamais prétendu écrire des recettes miracle sur la sécurité SQL Server. Effectivement cet article est avant-tout destiné à des gens qui sont moins familiarisés avec SQL Server tels que des développeurs. Raison pour laquelle sont mentionnées les attaques par injection ou encore le recours à des procédures stockées. Merci quand même à rm50 d'avoir souligné l'évidende. Question à  NIVSQL : dans quel contecte actives-tu le protocole mémoire partagée ?

Cordialement.

 Ajouter un commentaire




Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Juillet 2010
LMMJVSD
   1234
567891011
12131415161718
19202122232425
262728293031 

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,109 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales