ALSI S25 SQL Avancé et administration d’un SGBD Relationnel STS2 IG Application à SQL Server 6.5 Le 16/04/17 page 1 SOMMAIRE 1PRESENTATION DE LA SEQUENCE 2 4 1.1DESCRIPTION DES SAVOIRS 1.2COMPETENCES ATTENDUES 1.3 PREREQUIS 4 4 4 NOTIONS DE BASE 5 2.1 DEFINITION 2.2LES MOTIVATIONS D’UN SGBD 2.3ARCHITECTURE D’UN SGBD 2.4LES FONCTIONS PRINCIPALES 2.4.1Description de la base 2.4.2Manipulation de la base 2.4.3Utilisation de la base 2.5LES DIFFERENTS TYPES D’UTILISATEURS 2.5.1L’administrateur principal de la base : le DBA 2.5.2L’administrateur d’application 2.5.3Le programmeur d’application 5 5 5 5 5 6 6 6 6 6 6 3LES LANGAGES DE DESCRIPTION DES DONNEES 7 3.1.1SGBD basés sur les méthodes d’accès : hiérarchiques et réseaux 3.1.2SGBD basés sur le modèle Relationnel 3.1.3 SGBD avancés 7 7 7 4 LE MARCHE DES SGBD R 8 4.1SGBD R SUR MINI ET GRAND SYSTEME 4.2SGBD R SUR MICRO-ORDINATEURS 4.3SGBD R SERVEURS SUR MICRO-ORDINATEURS 4.4SGBD R CLIENTS SUR MICRO-ORDINATEURS 8 8 8 9 5ALGEBRE RELATIONNELLE 10 5.1 INTRODUCTION 5.2DEFINITIONS ET NOTATIONS 5.2.1Relations n-aires 5.2.2 Notations 5.2.3Clés et super-clés 5.2.4Base de données 5.3OPERATEURS RELATIONNELS 5.3.1 Projection 5.3.2 Jointure 5.3.3 Equi-jointure 5.3.4 Sélection 5.3.5 Division 5.3.6Opérations ensemblistes 5.3.7Exemple d’interrogations 10 10 10 10 10 11 11 11 11 11 11 11 11 12 6COMPOSANTS D’UNE BASE DE DONNEES RELATIONNELLE (RAPPELS) 6.1 TABLE 6.2 INDEX 6.3 VUE 6.4 CLES ET RELATIONS 6.5AUTRES COMPOSANTS DE LA BASE DE DONNEES 6.6LES DIFFERENTS TYPES D’INTEGRITE 6.6.1L’intégrité d’entité ALSI / S25 SGBD R Support de Cours 2TSIG 13 25 25 25 25 25 26 26 D:\582659791.doc ALSI S25 SQL Avancé et administration d’un SGBD Relationnel STS2 IG Application à SQL Server 6.5 Le 16/04/17 page 2 6.6.2L’intégrité référentielle 6.6.3L’intégrité de domaine 6.6.4L’intégrité définie par l’utilisateur 6.7METTRE EN OEUVRE L’INTEGRITE 6.7.1l’intégrité déclarative 6.7.2l’intégrité procédurale 26 26 26 26 26 26 7LE MODELE CLIENT-SERVEUR (APPROCHE) 28 7.14.1 ORGANISATION DE TYPE MAINFRAME 7.24.2 ORGANISATION EN SERVEUR DE FICHIERS 7.34.3 ORGANISATION EN SERVEUR DE DONNEES 7.4 4.4 LE MIDDLEWARE 7.54.5. BASES DE DONNEES DISTRIBUEES 28 28 28 29 29 8LES OUTILS D’ADMINISTRATION SQL SERVER 6.5 30 9ALLOCATION ET GESTION DE L’ESPACE DE STOCKAGE 33 9.1UNITE DE BASE DE DONNEES 9.2 UNITE D’ALLOCATION 9.3 EXTENSION 9.4 PAGE 9.5 PAGE D’ALLOCATION 33 33 34 34 34 10UNITE ET BASE DE DONNEES SQL SERVER 6.5 34 10.1CREATION D’UNE UNITE DE BASE DE DONNEES 10.2MODIFICATION DE LA TAILLE D’UNE UNITE 10.3SUPPRESSION D’UNE UNITE DE BASE DE DONNEES 10.4CREATION D’UNE BASE DE DONNEES 10.5EXTENSION D’UNE BASE DE DONNEES 10.67.6 REDUCTION D’UNE BASE DE DONNEES 10.7SUPPRESSION D’UNE BASE DE DONNEES 10.8LIRE LES INFOS. D’UNE BASE DE DONNEES 10.9LE JOURNAL DE TRANSACTION 10.10ROLES DES BASES DE DONNEES SYSTEME 10.10.1 44 10.10.2Résumé des tables systèmes de la base master 10.10.3Résumé des tables systèmes de la base model 10.10.4Résumé des tables systèmes de la base msdb 10.11LES OPTIONS D’UNE BASE DE DONNEES 10.12 TABLE 10.12.1Création d’une table 10.12.28.1.2 Modification d’une table 10.12.38.1.3 Types de données pré-définis 10.12.48.1.4 Types de Données Définis par l’Utilisateur (TDDU) 10.12.58.1.5 Les valeurs par défaut 10.12.6Contrainte DEFAULT (déclarative) 10.12.7CREATE DEFAULT (procédurale) 10.12.88.1.6 Les règles de validation 10.12.9Contrainte CHECK (déclarative) 10.12.10Contrainte CHECK (déclarative) suite 10.12.11CREATE RULE (procédurale) 10.12.12Attachement avec la règle (par code) 10.12.15 60 10.12.168.1.7 Les clés primaires et étrangères 10.12.17Les clés primaires 10.12.18Les clés étrangères 10.12.19La contrainte d’unicité ALSI / S25 SGBD R Support de Cours 2TSIG 37 37 38 38 40 40 41 41 42 42 44 44 46 47 50 50 50 51 52 54 54 54 57 57 58 58 59 61 61 62 64 D:\582659791.doc ALSI S25 SQL Avancé et administration d’un SGBD Relationnel STS2 IG Application à SQL Server 6.5 Le 16/04/17 page 3 10.12.208.2 Vue 10.12.21Utilisation d’une vue 10.13 8.3 INDEX 10.13.1Création d’un index 10.13.2Visualiser les index 10.13.3Supprimer un index 10.148.4 LES PROCEDURES STOCKEES 10.14.1Création d’une procédure stockée 10.14.2UtIlisation d’une procédure stockée 10.158.5 LES DECLENCHEURS OU TRIGGER 65 67 67 67 67 68 68 68 70 70 119. SECURITE ET CONNEXION A UNE BASE SQL SERVER 6.5 76 11.19.1 TERMINOLOGIE DE LA SECURITE 11.29.2 MISE EN ŒUVRE DE LA SECURITE 11.2.19.2.1 Définir les options de sécurité du serveur 11.2.2 84 11.2.3Sécurité mode Standard 11.2.4Sécurité mode Intégré à Windows NT 11.2.5Sécurité mode Mixte 11.2.6Accès par défaut 11.2.7Domaine par défaut 11.2.8Modifier le nom d'hôte en nom d'utilisateur 11.2.9Niveau d'audit 11.2.10 87 11.2.11 Mappage 11.2.12Pour accorder un privilège utilisateur 11.2.13Pour accorder un privilège administrateur système 11.2.14Pour visualiser les détails d'un compte utilisateur 11.2.15Pour visualiser les détails d'un groupe 11.2.16Pour révoquer des privilèges 11.2.17Pour rechercher des informations de compte sur un utilisateur 11.2.18Pour rechercher les noms d'accès SQL Server 11.2.199.2.2 Définir les utilisateurs 11.2.20 97 11.2.21Ajouter un groupe à une base de données 11.2.22Ajouter un utilisateur à une base de données 11.2.23Gérer l'adhésion d'un utilisateur à un groupe 11.2.24Supprimer un utilisateur d'une base de données 11.2.25Supprimer un groupe d'une base de données 11.2.269.2.3 Gérer les permissions objet 11.2.27Accorder ou révoquer des permissions instruction à un utilisateur ou à un groupe 11.2.28 104 11.2.29Modifier le propriétaire d'une base de données ALSI / S25 SGBD R Support de Cours 2TSIG D:\582659791.doc 76 83 83 84 84 85 85 85 87 87 87 90 90 93 94 94 95 96 96 97 98 100 101 101 101 102 104 1 ALSI S25 SQL Avancé et administration d’un SGBD Relationnel STS2 IG Application à SQL Server 6.5 Le 16/04/17 page 4 PRESENTATION DE LA SEQUENCE 1.1 Description des savoirs 251 Langage de définition de données 252 Langage de manipulation de données 253 Langage de définition des contraintes 254 Langage de définition des droits d’accès 255 Techniques de répartition des données : distribution, réplication 256 Administration de la base de données 1.2 Compétences attendues implanter, consulter, interroger, mettre à jour une BdD relationnelle administrer une BdD non répartie et en assurer la sécurité recenser, évaluer, comparer les solutions commerciales existantes 1.3 Prérequis Ce module utilise les concepts abordés en 1ère année à savoir : algèbre relationnelle langage SQL (Standard et utilisé par ACCESS) Query By Exemple (MS QUERY d’ACCESS) L’outil logiciel utilisé pour illustrer ce module est SQL Server 6.5, néanmoins les points présentés sont applicables à n’importe quel SGBD R de type mini ou micro. ALSI / S25 SGBD R Support de Cours 2TSIG D:\582659791.doc ALSI S25 SQL Avancé et administration d’un SGBD Relationnel STS2 IG Application à SQL Server 6.5 2 Le 16/04/17 page 5 NOTIONS DE BASE 2.1 Définition Une Base de Données est un ensemble structuré de données représentant une réalité extérieure au système, partagée par plusieurs applications d’une même entreprise. Exemple données : liste des inscrits, liste des cours, liste des enseignants applications : gestion des inscriptions, planning des salles, octroi des bourses… entreprise : école Une base de données contient également les relations entre ces données. Les logiciels qui exploitent ces bases de données sont appelés Système de Gestion de Base de Données. 2.2 Les motivations d’un SGBD La principale raison d’être d’un SGBD est de fournir une description unique de toutes les données manipulées par l’entreprise. Cette centralisation « logique » des données répond à plusieurs objectifs : Réduire les redondances d’informations Eliminer les incohérences Permettre un partage plus souple entre les applications ; s’adapter aux besoins nouveaux Faciliter l’adoption de standard d’implantation Permettre une approche unifiée des problèmes de sécurité et d’intégrité Arbitrer plus facilement les conflits d’accès. Le principal avantage de cette description logique unique est d’être indépendante des caractéristiques d’implantation physiques et des choix d’organisation. Rendre les données indépendantes diminue le coût des évolutions de la base. 2.3 Architecture d’un SGBD Programme d’application Programme d’application Programme d’application Sous modèle A Programme d’application Sous modèle B Modèle principal Archivage 2.4 Les fonctions principales 2.4.1 Description de la base La description de la base (modèle principal et sous-modèles) s’effectuent à l’aide d’un langage de définition de données : DDL. ALSI / S25 SGBD R Support de Cours 2TSIG D:\582659791.doc ALSI S25 SQL Avancé et administration d’un SGBD Relationnel STS2 IG Application à SQL Server 6.5 Le 16/04/17 page 6 2.4.2 Manipulation de la base La manipulation de la base : accès, mises à jour s’effectuent à l’aide d’un langage de manipulation de données : DML. 2.4.3 Utilisation de la base L’utilisation de la base peut s’effectuer à l’aide du DML. En fait, le plus souvent, elle s’effectue à l’aide de procédures stockées, par le biais de commandes. 2.5 Les différents types d’utilisateurs L’administrateur principal de la base : le DBA Son rôle est fondamental : c’est lui qui définit le modèle principal. Ses choix conditionnent l’évolution ultérieure de la base. 2.5.1 2.5.2 L’administrateur d’application C’est lui qui décrit, à partir du modèle principal, les sous-modèles de l’application qu’il gère. Le programmeur d’application Son rôle est d’établir des bibliothèques de programme d’utilisation de la base : requètes courantes, mises à jour interactives… C’est lui qui utilise le DML. 2.5.3 ALSI / S25 SGBD R Support de Cours 2TSIG D:\582659791.doc ALSI S25 SQL Avancé et administration d’un SGBD Relationnel STS2 IG Application à SQL Server 6.5 3 3.1.1 Le 16/04/17 page 7 LES LANGAGES DE DESCRIPTION DES DONNEES SGBD basés sur les méthodes d’accès : hiérarchiques et réseaux Première génération a utilisé les liens entre fichiers (techniques de pointeur), l’objectif est l’optimisation des entrées/sorties. Les langages de programmation de ces SDBD sont qualifiés « navigationnel » car ils décrivent les chemins d’accès (liaisons) entre les données de la base. Ces SGBD sont encore utilisés par des entreprises ayant un volume important d’applications développées autour de ce modèle. 3.1.2 SGBD basés sur le modèle Relationnel Ce modèle a été élaboré par E.F. Codd dans les années 1970, celui-ci posa les bases de l’algèbre relationnelle. La commercialisation des premiers SGBD R date de 1980. Le succès de ce modèle est lié à l’utilisation de règles précises (règles de Codd) voir plus loin, il offre une facilité de définition et de représentation des données, par contre les performances d’accès sont jugées trop « moyennes ». Depuis cette date la plupart des SGBD suivent (plus ou moins complètement) les règles définies par Codd. 3.1.3 SGBD avancés On constate depuis quelques années une tendance qui vise à prendre en compte de nouveaux besoins en matière d’applications nouvelles comme la CAO, la Bureautique, ou le génie logiciel. On parle de SGBD de troisième génération, ils permettent des exploitations dans des «environnements» objets, hétérogènes, répartis ou parallèles. Ces systèmes doivent encore évoluer avant de s’imposer face au SGBD R qui représente aujourd’hui près de 80% du total des ventes de SGBD. ALSI / S25 SGBD R Support de Cours 2TSIG D:\582659791.doc 4 ALSI S25 SQL Avancé et administration d’un SGBD Relationnel STS2 IG Application à SQL Server 6.5 Le 16/04/17 page 8 LE MARCHE DES SGBD R 4.1 SGBD R sur mini et grand système Le tableau ci-dessous résume les produits disponibles et le langage qu’ils utilisent. Société / Marque Nom du SGBD Nom du L4G SYBASE SQL / SERVER Powerbuilder PROGRESS Software PROGRESS PROGRESS 4GL ASK INGRES INGRES Windows 4GL INFORMIX INFORMIX ONLINE I4GL ORACLE CORPORATION ORACLE Ver. 7 SQL Forms HONEYWELL / BULL MRDS COMPUTER ASSOCIATES IBM CA / universe - DB DATACOM DB2 SQL/DS SQL / DBE 4.2 SGBD R sur micro-ordinateurs Devant le succès de ce type de SGBD, certains produits possèdent des versions micro, mini et grossystème. Exemple Oracle avec : Personal Oracle 7 pour Windows 3.1 et 95 (micro) Oracle 7 Workgroup Server (Mini et serveurs départementaux) Oracle 7 Universal Server (gros-systèmes). 4.3 SGBD R Serveurs sur micro-ordinateurs Le propre d’un SGBD R Server est d’autoriser l’accès aux bases de données simultanément aux utilisateurs de l’organisation. Cette possibilité n’est réalisable que si le SGBD R gère correctement les accès concurrents et offre des mécanismes de contrôle des transactions (validation, annulation, etc.). L’évolution des configurations matérielles « micro » (processeur, mémoire vive, stockage de masse) permet aujourd’hui la mise en oeuvre de solutions professionnelles jusqu’àlors réservées aux minis et grands systèmes. De même les systèmes d’exploitation multi-utilisateurs récents comme Windows NT., Netware (Novell) ou OS/2 (IBM) se prêtent bien aux applications développées autour d’un SGBD R, ils garantissent à la fois la sécurité et la performance d’accès aux bases de données. ALSI / S25 SGBD R Support de Cours 2TSIG D:\582659791.doc ALSI S25 SQL Avancé et administration d’un SGBD Relationnel STS2 IG Application à SQL Server 6.5 Le 16/04/17 page 9 4.4 SGBD R Clients sur micro-ordinateurs L’offre SGBD R sur micro propose aujourd’hui plusieurs produits qui peuvent fonctionner soit en monoutilisateur soit dans un réseau local de type Workgroup, il ne s’agit pas d’un fonctionnement en mode clientserveur mais plutôt d’un partage de la base de données appelé « système en partage de fichiers ». Un mécanisme de verrouillage prend en charge les conflits d’accès entre utilisateurs et gère les verrous. Chaque poste prend en charge son traitement. Certains de ces produits peuvent aussi se comporter comme frontal d’applications en mode client-serveur. Paradox / Ver. 4.5 à Ver. 7 (Windows 95 ou NT) dBase / IV V version Windows de dBase V ACCESS / Ver. 2.0 (Mai 94) Ver. 7.0 pour Windows 95 Windev / Ver.4.0 ou 5.0 ALSI / S25 SGBD R Support de Cours 2TSIG D:\582659791.doc ALSI S25 SQL Avancé et administration d’un SGBD Relationnel STS2 IG Application à SQL Server 6.5 5 Le 16/04/17 page 10 ALGEBRE RELATIONNELLE 5.1 Introduction L’algèbre relationnelle est un outil théorique définit par Codd dans le cadre de son modèle relationnel. Cette algèbre permet de construire des requêtes sur des relations. Le principe fondamental consiste à considérer que le résultat d’une requête peut s’exprimer sous forme d’une relation. Cette relation est obtenue en appliquant successivement des opérateurs sur des opérandes qui sont des relations. Ces opérandes sont soit des relations de la base de données soit le résultat d’opérations intermédiaires. En algèbre relationnelle, on ne manipule que des relations comme données ou comme résultat. Le langage SQL est un outil d’interrogation d’une BD relationnelle qui reprend, directement ou non, ces opérateurs relationnels. 5.2 Définitions et notations 5.2.1 Relations n-aires Soient D1,…Dn des ensembles non nécessairement disjoints. Une relation R définie sur D1,…Dn est un sous-ensemble du produit cartésien D1x…Dn. Une relation est donc un ensemble de n-uplets <a1,…an> où, pour chaque i, ai Di. Comme, en informatique, on s’intéresse à des relations finies, la liste des n-uplets d’une relation donne bien un tableau. Il est commode, au lieu de les repérer par leur rang (ai) comme en mathématique, de donner des noms aux colonnes, ce sont les attributs. L’ensemble des valeurs possibles d’un attribut (le Di correspondant) est appelé domaine. Un descripteur de relation a la forme suivante : R(A1 :d(A1),…An :d(An)) où R est le nom de la relation Les Ai sont les noms des attributs de la relation Les d(Ai) sont les domaines associés. Remarque : on peut trouver 2 attributs sur le même domaine. Par exemple : VOL(n : numéro, départ : ville, arrivée : ville) 5.2.2 Notations Le plus souvent, les domaines ne nous intéressent pas et nous les omettrons. Pour désigner : les attributs : on utilise les premières lettres de l’alphabet en majuscule les relations : on utilise les dernières lettres de l’alphabet en majuscule le contenu d’une relation : on utilise le nom de la relation en minuscule un n-uplet : x = <d1, d2, d3> ou x = <A1 :d1, A2 :d2, A3 :d3> 5.2.3 Clés et super-clés Un clé, pour une relation R, est un ensemble d’attributs identifiant une ligne. Plus précisément : Soit R(X,Y), X est une clé pour R si et seulement si x, <x,y> r il n’existe pas y’ y tq <x, y’> r. ALSI / S25 SGBD R Support de Cours 2TSIG D:\582659791.doc ALSI S25 SQL Avancé et administration d’un SGBD Relationnel STS2 IG Application à SQL Server 6.5 Le 16/04/17 page 11 Une super clé est une clé minimum (il peut y en avoir plusieurs). 5.2.4 Base de données Une base de données est un triplet (A, R, Y) où A est un ensemble d’attributs R est un ensemble de relations sur ces attributs Y est un ensemble de contraintes d’intégrité Les contraintes d’intégrités sont spécifiées pour traduire le fait que toutes les valeurs que peuvent prendre les relations ne représentent pas forcément une réalité du monde extérieur. Ex : toute personne est de sexe masculin ou féminin, toute personne a une mère au plus,… 5.3 Opérateurs relationnels 5.3.1 Projection Soit R(X, Y), la projection de R sur Y, notée PROJECTION(R, Y), est définie par <y> PROJECTION(r ; Y) ssi x tq <x, y> r. Intuitivement : on supprime les colonnes non retenues dans la projection et on élimine les doubles. 5.3.2 Jointure Soient S(X, Z) et R(Z,Y), la jointure de S et R, notée JOINTURE(S, R), est définie par <x, y, z> JOINTURE(s, r) ssi <x, z> s.et <z, y> r. Intuitivement : pour chaque n-uplet <x,z> de S, on construit autant de n-uplet <x, y, z> qu’il y a de n-uplet <z, y> dans R. 5.3.3 Equi-jointure C’est une jointure entre 2 attributs pour lesquels les opérateurs tels que =, , , ,… ont un sens. L’équi-jointure est utile pour combiner une jointure où les attributs ont des noms différents. 5.3.4 Sélection Soient R(X) une relation, et B(X) un prédicat applicable à tous les n-uplets de R, la sélection de R par B, notée SELECTION(R ; B), est définie par <x > SELECTION(R ; B) ssi <x> r.et B(x). Intuitivement : on balaie la relation en ne conservant que les lignes qui vérifient B. 5.3.5 Division Soient R(X, A) et S(B,Y) avec A et B compatibles (sur le même domaine), la division de R par S, notée DIVISION(R, S, A, B) est une relation sur X définie par <x > DIVISION(r, s ;A, B) ssi a PROJECTION(s ;B) <x, a> r. Intuitivement : on se débarasse de Y dans S, ce qui donne un ensemble E de valeurs B. On cherche alors dans R l’élément x en relation avec tous les éléments de E. 5.3.6 Opérations ensemblistes Soient S(X) et R(X). Comme ce sont 2 parties du même ensemble, on peut parler de ALSI / S25 SGBD R Support de Cours 2TSIG D:\582659791.doc ALSI S25 SQL Avancé et administration d’un SGBD Relationnel STS2 IG Application à SQL Server 6.5 Le 16/04/17 page 12 SR union SR intersection S-R SxR différence ensembliste produit cartésien. Soient R(X, Z) et S(Z,Y), le produit cartésien est défini par <x, z’, z’’, y> à S x R ssi <x, z’ > s et <z’’, y> r. 5.3.7 Exemple d’interrogations Q1 : Trouver le numéro des fournisseurs qui me fournissent au moins un article Q2 : Trouver le numéro des fournisseurs qui ne me fournissent aucun article Q3 : Trouver le numéro des fournisseurs qui me fournissent P6 Q4 : Trouver le numéro des fournisseurs qui me fournissent autre chose que P6 Q4’ : Trouver le numéro des fournisseurs qui me fournissent quelque chose mais pas P6 Q5 : Trouver le numéro des fournisseurs qui ne fournissent que P6 Q6 : Trouver le numéro des fournisseurs qui me fournissent chacun au moins P4, P5 et P6 Q7 : Trouver le nom et la ville des fournisseurs qui me fournissent tous les produits originaires de Dijon Q8 : Trouver les numéros des fournisseurs qui me fournissent au moins 2 produits. Q9 : Trouver les numéros de produits fournis par Bornibus Q10 : Trouver les noms de produits fournis par Bornibus Q11 : Trouver les noms de fournisseurs qui fournissent au moins un produit vert Q12 : Trouver les noms de fournisseurs qui fournissent au moins un produit originaire de leur ville Q13 : Trouver les noms et villes des fournisseurs qui ne fournissent que des produits verts Q14 : Trouver les numéros des fournisseurs qui fournissent au moins un produit vert et un produit blanc Q15 : Trouver les numéros des fournisseurs qui fournissent tous les produits verts Q16 : Trouver les noms et villes des fournisseurs qui font une remise supérieure à celle de Bornibus Q17 : Trouver les numéros de fournisseurs qui ne fournissent que des produits originaires de leur ville Q18 : Trouver les numéros de fournisseurs qui fournissent tous les produits originaires de leur ville Q19 : Trouver les numéros de fournisseurs dont tous les produits fournis sont verts. ALSI / S25 SGBD R Support de Cours 2TSIG D:\582659791.doc ALSI S25 SQL Avancé et administration d’un SGBD Relationnel STS2 IG Application à SQL Server 6.5 6 Le 16/04/17 page 13 NORMALISATION Une BD ne peut pas être construite autour d’une relation unique (relation universelle) car ceci pose des problèmes de redondance, d’anomalies lors des mises à jour… Il faut donc décomposer la relation en Préservant son contenu, Préservant les dépendances, Trouvant les meilleures qualités possibles pour les relations : les formes normales. 6.1 Exemple Soit la relation GEO (BAR, PAYS, CONTINENT). Les contraintes d’intégrité sont les suivantes : Un bar n’appartient qu’à un seul pays Un pays n’est situé que dans un seul continent. Exemple de contenu : GEO BAR PAYS 1 France 3 USA 2 Allemagne 4 France 5 USA CONTINENT Europe Amérique Europe Europe Amérique 6.2 Définitions 6.2.1 Dépendances fonctionnelles Le monde représenté dans la base de données est soumis à certaines règles : les pays n’appartiennent qu’à un seul continent…Les données stockées dans la base doivent respecter ces règles : ce sont les contraintes d’intégrités. La plupart des contraintes d’intégrité peuvent être modélisées à l’aide de dépendances fonctionnelles (DF). Ex : les pays n’appartiennent qu’à un seul continent s’exprime par la DF PAYSCONTINENT. Il existe une dépendance fonctionnelle entre X et Y, notée XY si et seulement si (x, y) R et (x, y’) R alors y = y’. En français : quand on connaît x, on connaît y. 6.2.2 Schéma relationnel Les DF expriment des contraintes qui doivent être vérifiées quelque soit le contenu des relations. On appelle schéma relationnel d’une relation R, notée R(U, F), l’ensemble U des attributs de R et l’ensemble F des dépendances fonctionnelles applicables à R. 6.3 Préserver le contenu On décompose la relation unique en plusieurs relations. Le contenu de chaque relation « fille » est obtenu en projetant la relation « mère » sur les attributs de la relation « fille ». En recomposant par jointure les relations « filles », on doit obtenir la relation mère. ALSI / S25 SGBD R Support de Cours 2TSIG D:\582659791.doc ALSI S25 SQL Avancé et administration d’un SGBD Relationnel STS2 IG Application à SQL Server 6.5 Le 16/04/17 page 14 Théorème de décomposition sans perte : Soit une relation R(X, Y, Z) qui possède une dépendance fonctionnelle XY. R est décomposable sans perte en R1 = PROJECTION(R ; X, Y) et R2 = PROJECTION(R ; X, Z) . C’est à dire R = JOINTURE(R1, R2 ; R1.x = R2.x) 6.4 Préserver toutes les dépendances Quand on décompose une relation R en R1, R2…, les contenus des projections doivent aussi respecter les dépendances fonctionnelles. Une décomposition préserve les dépendances fonctionnelles si on peut retrouver les dépendances fonctionnelles et les dépendances fonctionnelles logiquement impliquées. Les dépendances fonctionnelles logiquement impliquées sont les nouvelles dépendances fonctionnelles obtenues en appliquant les axiomes d’Armstrong à l’ensemble des dépendances fonctionnelles F. Ce nouvel ensemble est noté F+. Les axiomes d’Armstrong : Réflexivité Y X U XY Augmentation XY et Z U XZYZ Transitivité XY et YZ XZ Choisir une décomposition qui préserve les DF permet de limiter les contrôles d’intégrité à l’intérieur de chaque relation de la décomposition. Si les DF applicables aux relations sont toutes de la forme cléY, tous les contrôles sont pris en charge par le SGBD sinon il faut contrôler toutes les mises à jour de données et donc effectuer les jointures nécessaires pour vérifier l’intégrité des données à chaque mise à jour. 6.5 Les formes normales 6.5.1 Définitions Un attribut A d’une relation R est primitif s’il appartient à au moins une clé minimum de R. Un attribut A d’une relation R est non primitif s’il n’appartient à aucune clé minimum de R. Soit XA, une DF de F+. L’attribut A est pleinement dépendant de X s’il n’existe pas X’ partie de X telle que X’A soit une DF de F+. Un attribut A est transitivement dépendant d’un ensemble d’attributs X s’il existe Y ne contenant pas A tel que XY et YA. Un attribut A est directement dépendant d’un ensemble d’attributs X s’il n’est pas transitivement dépendant de X. 6.5.2 Première forme normale : 1NF Une relation est en première forme normale (1NF) si aucun attribut qui la compose n’est lui-même une relation (Toute valeur d’attribut est atomique). 6.5.3 Deuxième forme normale : 2NF Une relation est en deuxième forme normale (2NF) si elle est en première forme normale (1NF) et tous les attributs non primitifs sont pleinement dépendants d’une clé minimum. ALSI / S25 SGBD R Support de Cours 2TSIG D:\582659791.doc ALSI S25 SQL Avancé et administration d’un SGBD Relationnel STS2 IG Application à SQL Server 6.5 Le 16/04/17 page 15 6.5.4 Troisième forme normale : 3NF Une relation est en troisième forme normale (3NF) si elle est en deuxième forme normale (2NF) et tous les attributs non primitifs sont directement dépendants d’une clé minimum. Définition équivalente : Une relation R est en 3NF si elle est en 1NF et pour toute DF XA s’appliquant à R (X n’inclut pas A), X est une clé minimum de R ou A est primitif. ALSI / S25 SGBD R Support de Cours 2TSIG D:\582659791.doc ALSI S25 SQL Avancé et administration d’un SGBD Relationnel STS2 IG Application à SQL Server 6.5 7 Le 16/04/17 page 16 LE LANGAGE SQL AVANCE 7.1 Le standard SQL SQL (Structured Query Langage) a une triple fonction : Interrogation et modification des données d’une base de donnée relationnelle Définition et modification du schéma d’une base de donnée relationnelle Contrôle de la sécurité et de l’intégrité de la base. La norme définit 2 langages de SQL : SQL-LDD : utilisé pour modifier le schéma de la BD (création de table, ajout de colonne dans une table, création d’index…) et contrôler l’accès aux données (ajout ou suppression des droits d’accès des utilisateurs sur un objet de la BD). Ces fonctions de gestion d’accès aux données peuvent être regroupées en tant que Langage de contrôle des données : SQL-LCD. SQL-LMD : utilisé pour interroger et modifier les données de la base. On peut distinguer les fonctions d’interrogation en tant que Langage d’interrogation des données : SQL-LID. Principales fonctions du langage SQL : LMD LID SELECT INSERT UPDATE DELETE LDD LCD GRANT REVOKE CREATE ALTER TRUNCATE DROP Chaque SGBD R utilise une syntaxe un peu différente. On utilise ici la syntaxe Transact-SQL du SGBD relationnel SQL Server. 7.2 SQL : Langage de manipulation de données 7.2.1 Interrogation des données L’interrogation des données se fait par l’ordre SELECT dont la syntaxe est la suivante : SELECT [ALL | DISTINCT] {* | liste_expressions} [FROM liste_objet] [WHERE condition] [GROUP BY liste_expression] [HAVING condition] [ORDER BY liste expression] 7.2.2 Sélection des colonnes, projection L’ordre SELECT permet d’introduire une liste de colonnes à extraire des tables ou toutes les colonnes avec le signe *. Les colonnes apparaissent dans l’ordre spécifié par le SELECT ou dans l’ordre de création dans le cas d’une *. En cas d’ambiguïté dans les noms de colonnes, on peut utiliser la forme : table.colonne. La colonne résultante porte le même nom que la colonne de la table sauf si on utilise un alias de colonne. Par défaut, les doublons apparaissent dans le résultat. Pour faire une projection et éviter les doublons, on utilise SELECT DISTINCT. ALSI / S25 SGBD R Support de Cours 2TSIG D:\582659791.doc ALSI S25 SQL Avancé et administration d’un SGBD Relationnel STS2 IG Application à SQL Server 6.5 Le 16/04/17 page 17 Exemple : Projection des villes des clients. SELECT DISTINCT vilcli Ville FROM client Ville -------------------------------------------------Brest Quimper 7.2.3 Sélection (des lignes), restriction La restriction consiste à n’extraire qu’un certain nombre de lignes répondant à une condition. La clause WHERE condition permet la mise en œuvre des restrictions. Les conditions sont des expressions booléennes composées de nom de colonnes, de constantes, de fonctions, d’opérateurs de comparaisons (=, <, >…) et d’opérateurs logiques (AND, OR…). Exemple : Numéros et noms des clients habitant Brest. SELECT numcli, nomcli FROM client WHERE vilcli = ‘Brest’ numcli ----------1 3 nomcli -------------------------------------------------joujou nanar L’opérateur de comparaison LIKE permet de filtrer une chaîne de caractères suivant un masque spécifié. Le masque peut être composé de un caractère quelconque % N caractères quelconques [abc] un caractère dans la liste abc [0-9] un caractère dans l’intervalle 0-9 [^abc] un caractère en dehors de la liste abc. On peut aussi utiliser la négation pour les intervalles. Pour utiliser -, %, ^ ou [ en tant que caractère de recherche, il faut les encadrer par [ ]. Exemple : Numéros et noms des clients habitant une impasse. SELECT numcli, nomcli FROM client WHERE voie LIKE ‘%impasse%’ numcli nomcli ----------- -------------------------------------------------5 toto La valeur null ne peut pas être testée par un opérateur de comparaison. On utilise la fonction IS NULL. Exemple : Numéros et noms des agences sans directeur. SELECT numage, nomage FROM agence WHERE numdir IS NULL numage nomage ----------- -------------------------------------------------2904 quimper centre ALSI / S25 SGBD R Support de Cours 2TSIG D:\582659791.doc ALSI S25 SQL Avancé et administration d’un SGBD Relationnel STS2 IG Application à SQL Server 6.5 Le 16/04/17 page 18 7.2.4 Extension L’extension consiste à afficher une valeur n’appartenant pas à la table mais calculée à partir des colonnes de la table. On insère alors au niveau du SELECT l’expression de calcul de cette valeur. Le calcul est réalisé par les opérateurs arithmétiques (+, -, *, /, % et parenthèses), les opérateurs logiques (AND, OR, NOT) ou les fonctions de manipulation de chaque type de données fournies par le SGBD : Fonctions mathématiques : ABS(exp) Valeur absolue de exp CEILING(exp) Plus petit entier supérieur ou égal à exp FLOOR(exp) Plus grand entier inférieur ou égal à exp trigonométriques : SIN pour le SINUS, COS pour le COSINUS… logarithmiques : LOG pour logarithme népérien, EXP pour exponentielle… Fonctions sur les dates : Les fonctions sur les dates manipulent des expressions de type DATETIME et utilisent des formats représentant la partie de date à gérer. Ces formats sont : Format Year Quarter Month Day of year Day WeekDay Abréviation Yy Qq Mm Dy dd Dw Hour Minute Seconds Milliseconds Hh Mi ss ms Signification Année de 1753 à 9999 Trimestre (1 à 4) Mois (1 à 12) Jour dans l’année (1 à 366) Jour dans le mois (1 à 31) Jour dans la semaine (1 Lundi à 7 Dimanche) Heure (0 à 23) Minute (0 à 59) Seconde (0 à 59) Milliseconde (0 à 999) GETDATE() DATENAME(fmt, date) DATEPART(fmt, date) DATEDIFF(fmt, date1, date2) DATEADD(fmt, n, date) Renvoie la date et l’heure système Renvoie la date sous forme de texte au format fmt. Renvoie la valeur de date au format fmt. Différence selon fmt entre les 2 dates. Ex : Différence exprimée en jours si fmt = dd Ajoute n fmt à la 2 dates. Ex : ajoute n jours si fmt = dd Fonctions sur les chaînes de caractères : ASCII(exp) CHAR(exp) LTRIM(exp) et RTRIM(exp) Les fonctions usuelles : Valeur du code ASCII du 1er caractère de exp Caractère correspondant au code ASCII exp Supprime les espaces non significatifs respectivement à gauche ou à droite de exp. STR(exp, lg, nbd) Convertit le nombre exp en chaine de longueur totale lg avec nbd décimales. SPACE(n) Renvoie n espaces REPLICATE(exp, n) Renvoie n fois exp LOWER(exp) et UPPER(exp) Convertit exp en minuscule ou en majuscule (respectivement). SUBSTRING (exp, dp, lg) Renvoie lg caractères de exp à partir de dp. Fonctions système : Il existe une liste de fonctions permettant d’avoir le nom de la base, de la station de travail, de l’utilisateur… ALSI / S25 SGBD R Support de Cours 2TSIG D:\582659791.doc ALSI S25 SQL Avancé et administration d’un SGBD Relationnel STS2 IG Application à SQL Server 6.5 Le 16/04/17 page 19 Exemple : Numéros et noms des clients concaténés (sans blancs après le numéro de client). SELECT ltrim(str(numcli)) + ' ' + nomcli Client FROM client Client ------------------------------------------------------------1 joujou 3 nanar 2 robi 5 toto L’expression de calcul apparaît donc aussi en entête de colonne et on utilise le principe de renommage de colonne par un alias pour obtenir un libellé plus clair. Calculs d’agrégats Les calculs statistiques portant sur des partitionnements de lignes ou sur toute une sélection sont faits en utilisant les fonctions statistiques (COUNT, SUM, AVG, MIN et MAX) et éventuellement la clause GROUP BY. La clause HAVING permet de tester une condition pour limiter les groupes résultats. 7.2.5 Exemple : Numéro de client et montants mini, moyen et maxi des opérations de chaque client SELECT numcli, mini=MIN(montant), moyen=AVG(montant), maxi=MAX(montant) FROM opere GROUP BY numcli numcli ----------1 2 3 mini ----------223 32 1000 moyen ----------691 560 4500 maxi ----------1000 1560 9500 7.2.6 Produit cartésien Le produit cartésien permet d’extraire des données de plusieurs tables en associant chaque ligne de chaque table citée. Les tables concernées doivent être séparées par des virgules dans la clause FROM. Si on veut citer le même nom de colonne venant de 2 tables différentes, celui-ci doit être précédé du nom de la table ou du nom d’alias afin qu’il n’y ait pas d’ambiguïté. Exemple : Produit cartésien des employés et des agences SELECT A. numage, E. numage, nomage, nomemp FROM agence A, employe E numage ----------2901 2901 2901 2901 2901 2901 2902 2902 2902 2902 2902 2902 2903 2903 2903 2903 2903 2903 2904 2904 2904 2904 2904 2904 ALSI / S25 numage ----------2901 2901 2901 2902 2902 2902 2901 2901 2901 2902 2902 2902 2901 2901 2901 2902 2902 2902 2901 2901 2901 2902 2902 2902 nomage -------------------------------------------------brest centre brest centre brest centre brest centre brest centre brest centre quimper gare quimper gare quimper gare quimper gare quimper gare quimper gare quimper meable quimper meable quimper meable quimper meable quimper meable quimper meable quimper centre quimper centre quimper centre quimper centre quimper centre quimper centre SGBD R Support de Cours 2TSIG nomemp -------------requin nigaud glandu lebon labrute letruand requin nigaud glandu lebon labrute letruand requin nigaud glandu lebon labrute letruand requin nigaud glandu lebon labrute letruand D:\582659791.doc ALSI S25 SQL Avancé et administration d’un SGBD Relationnel STS2 IG Application à SQL Server 6.5 Le 16/04/17 page 20 7.2.7 Jointure La jointure est la combinaison d’un produit cartésien et d’une restriction. Elle permet d’associer logiquement des lignes de tables différentes. Les jointures sont utilisées pour faire correspondre les données d’une ligne comportant une clé étrangère avec les données de la ligne comportant la clé primaire (jointure naturelle). Exemple : Liste des employés par agences SELECT A. numage, nomage, nomemp FROM agence A, employe E WHERE A.numage = E.numage numage ----------2901 2901 2901 2902 2902 2902 nomage -------------------------------------------------brest centre brest centre brest centre quimper gare quimper gare quimper gare nomemp ----------------requin nigaud glandu lebon labrute letruand 7.2.8 Jointure externe Dans une jointure naturelle, aucune ligne n’apparaît dans le résultat lorsque la condition n’est pas satisfaite. Les jointures externes permettent d’extraire les lignes d’une des 2 tables concernées même si la condition est fausse. Dans ce cas, les données de la 2ème table ont la valeur NULL. La syntaxe utilisée pour la condition est Nom_table1.col *= Nom_table2.col ou Nom_table1.col =* Nom_table2.col Selon que l’on veut voir les lignes de la 1ère table (*=) ou de la 2ème table (=*). Exemple : Liste de tous les clients et des agences où ils se rendent éventuellement SELECT client.numcli, nomcli, numage FROM client, va WHERE client.numcli *= va.numcli numcli ----------1 3 2 2 5 nomcli -------------------------------------------------joujou nanar robi robi toto numage ----------2901 2902 2901 2902 (null) 7.2.9 AutoJointure Il est possible d’associer des lignes d’une table à d’autres lignes de la même table en réalisant une autojointure. L’utilisation des alias de table est alors obligatoire pour éviter les ambiguïtés de syntaxe. Exemple : Liste des employés et de leur directeur d’agence SELECT E.numemp, substring(E.nomemp, 1, 10) nomemp, E.numage, D.numemp numdir, D.nomemp nomdir FROM employe E, agence A, employe D WHERE E.numage = A.numage AND A.numdir = D.numemp AND E.numemp != D.numemp numemp ----------2 4 11 12 ALSI / S25 nomemp ---------requin nigaud lebon labrute numage ----------2901 2901 2902 2902 SGBD R Support de Cours 2TSIG numdir ----------7 7 13 13 nomdir --------------------------------glandu glandu letruand letruand D:\582659791.doc ALSI S25 SQL Avancé et administration d’un SGBD Relationnel STS2 IG Application à SQL Server 6.5 Le 16/04/17 page 21 7.2.10 Union L’opérateur UNION permet d’obtenir un ensemble de lignes provenant de plusieurs requêtes. Toutes les requêtes doivent fournir le même nombre de colonnes et les colonnes doivent être de même type. Exemple : Liste des employés et des clients SELECT numemp num, substring(nomemp, 1, 10) nom FROM employe E UNION SELECT numcli num, nomcli nom FROM client num ----------1 2 2 3 4 5 7 11 12 13 nom -------------------------------------------------joujou requin robi nanar nigaud toto glandu lebon labrute letruand 7.2.11 Division L’opérateur relationnel de division n’existe pas en SQL. En effet, la division algèbrique concerne la prise en compte du quantificateur universel Quelquesoit qui n’existe pas en SQL. SQL ne connaît que le quantificateur existentiel Il existe. 1ère solution Pour exprimer Quelquesoit x, P(x) est vrai , on utilise la double forme négative : Il n’existe pas x tel que P(x) est faux Soit 2 tables R1(A,B) et R2(A) La division de R1 par R2 donne la table R3(B) telle que : R3(B) = {b appartenant à R1(B) tel que Quelquesoit a2 appartenant à R2 Il existe (a1, b) appartenant à R1 tel que a1 = a2} Autrement dit : b appartient à R3 si et seulement si Il n’existe pas de a2 appartenant à R2 tel qu’ Il n’existe pas de (a1, b) appartenant à R1 tel que a1 = a2. En conclusion, la division relationnelle se traduit par la succession de 2 opérateurs NOT EXISTS. Exemple : Liste des comptes et des clients qui possèdent un compte de chaque intitulé SELECT P3.numcli, P3.numcom, intitule FROM possede P3, compte R3 WHERE P3.numcom = R3.numcom and not exists (SELECT intitule from compte R2 Where not exists (SELECT P1.numcli, P1.numcom, R1.intitule FROM possede P1, compte R1 WHERE P1.numcom = R1.numcom AND R2.intitule = R1.intitule AND P3.numcli = P1.numcli) ) numcli ----------1 1 1 ALSI / S25 numcom ----------1 2 3 SGBD R Support de Cours 2TSIG intitule -------------------------------------------------compte cheque livret d'epargne plan epargne logement D:\582659791.doc ALSI S25 SQL Avancé et administration d’un SGBD Relationnel STS2 IG Application à SQL Server 6.5 Le 16/04/17 page 22 2ème solution Une autre façon de traduire la division est basée sur l’utilisation de la fonction de comptage COUNT. Soit 2 tables R1(A,B) et R2(A) On compte de nombre d’éléments a dans R2. On compte le nombre de a différents pour chaque b de R1. On compare les 2. En cas d’égalité, on retient b dans R3. Exemple : Liste des clients qui possèdent un compte de chaque intitulé SELECT P3.numcli FROM possede P3, compte R3 WHERE P3.numcom = R3.numcom GROUP BY P3.numcli HAVING COUNT(DISTINCT P3.numcom) = (SELECT COUNT(distinct intitule) FROM compte) numcli ----------1 7.2.12 Sous interrogation ramenant 1 ligne Elle permet de comparer une valeur à la valeur retournée par un ordre SELECT. Décomposition de la sous-interrogation : 1. La sous-interrogation est indépendante de l’interrogation principale 2. Le noyau évalue la sous-interrogation puis l’interrogation principale avec le résultat trouvé. Exemple : Liste des opérations dont le montant est supérieur au plus petit solde de compte positif SELECT numcli, numcom, montant FROM opere WHERE montant > (SELECT min(solde) FROM possede WHERE solde > 0) numcli ----------1 1 1 3 3 3 1 2 numcom ----------1 1 1 10 10 12 1 5 montant ----------500 1000 800 9500 1000 3000 936 1560 7.2.13 Sous interrogation ramenant n lignes Dans ce cas, il faut utiliser un opérateur permettant de comparer une valeur à une liste de valeurs : IN. L’opérateur IN peut être nié par NOT. Exemple : Numéro, nom et villes des agences qui n’ont pas d’employé SELECT numage, nomage, vilage FROM agence WHERE numage NOT IN (SELECT numage FROM employe) numage ----------2903 2904 nomage -------------------------------------------------quimper meable quimper centre vilage -------------------------quimper quimper 7.2.14 Sous interrogation synchronisée La sous-interrogation fait référence à une colonne de l’interrogation principale. Ceci nécessite la réévaluation de la sous-interrogation pour chaque ligne principale. Dans certains cas, il est nécessaire d’utiliser des alias pour renommer une des tables. ALSI / S25 SGBD R Support de Cours 2TSIG D:\582659791.doc ALSI S25 SQL Avancé et administration d’un SGBD Relationnel STS2 IG Application à SQL Server 6.5 Le 16/04/17 page 23 Exemple : Liste des directeurs d’agence qui ne travaillent pas dans leur agence SELECT numdir FROM agence A WHERE A.numage != (SELECT numage FROM employe E WHERE A.numdir = E.numemp) numdir ----------4 Pour chaque directeur, la sous-interrogation est réévaluée. Sous interrogation testant l’existence Une des formes particulières de sous-interrogation synchronisée est celle testant l’existence de lignes de valeurs répondant à une condition. Le mot-clé EXIST est placé à cet effet devant une sous-interrogation. Cet opérateur renvoie le résultat VRAI si la sous-interrogation ramène au moins 1 ligne de valeurs, faux sinon. Dans ce cas, l’interrogation principale s’exécute. L’opérateur EXIST peut être nié par NOT. 7.2.15 Exemple : Liste des agences qui ont des comptes SELECT numage, nomage FROM agence A WHERE EXISTS (SELECT numage FROM compte WHERE A.numage = compte.numage) numage ----------2901 2902 7.2.16 nomage -------------------------------------------------brest centre quimper gare Requètes de création de tables Il est possible de créer une nouvelle table à partir d’une requête en utilisant la syntaxe : SELECT … INTO nom_table FROM … La nouvelle table aura le schéma correspondant aux colonnes extraites ; dans le cas de colonnes calculées, il faut donner un alias de colonne. Si le nom de la table est précédé de #, la table devient temporaire locale. Elle n’est accessible que par la session qui l’a créé et disparaît à la déconnexion. Si le nom de la table est précédé de ##, la table devient temporaire globale. Elle est accessible par toutes les sessions et elle est supprimée à la fin de la dernière session qui l’a utilisée. Les tables temporaires sont stockées dans la base tempdb. ALSI / S25 SGBD R Support de Cours 2TSIG D:\582659791.doc ALSI S25 SQL Avancé et administration d’un SGBD Relationnel STS2 IG Application à SQL Server 6.5 Le 16/04/17 page 24 7.3 SQL : Langage de définition de données 7.4 SQL : Langage de contrôle de données ALSI / S25 SGBD R Support de Cours 2TSIG D:\582659791.doc 8 ALSI S25 SQL Avancé et administration d’un SGBD Relationnel STS2 IG Application à SQL Server 6.5 Le 16/04/17 page 25 COMPOSANTS D’UNE BASE DE DONNEES RELATIONNELLE (RAPPELS) 8.1 Table Les données sont stockées sous la forme de tables composée de lignes et de colonnes, chaque colonne représente un attribut de la relation, chaque ligne une occurrence ou enregistrement (n-uplet). Le nombre de ligne n’est limité que par la capacité du disque. 8.2 Index Ce sont des tables dont le rôle est d’accélérer les recherches de données. Le moteur SQL utilise ces tables selon les besoins de la requête. Le recours à un nombre d’index trop important dégrade les performances car il faut mettre à jour ces tables lors des opérations d’insertion ou de suppression, il faut donc trouver le bon compromis. Il existe plusieurs type de gestion des index : index ISAM (Indexed Sequential Access Method = Accès Seq. Indexé) index HASH (Hash Coding = Index calculé) index B-TREE (Balanced Tree = arbre équilibré) SQL Server utilise une technique d’index de type B-TREE 8.3 Vue Une vue est une table virtuelle définie grâce à une requête SQL utilisant les données d’une table (réelle), elle n’occupe donc pas de place sur disque, elle est souvent utilisée pour limiter l’affichage des données aux utilisateurs. 8.4 Clés et relations Les règles de Codd imposent l’utilisation de clés primaires et étrangères ainsi que des contraintes sur ces clés. (Voir parag. 3.6) La clé primaire assure l’intégrité d’entité c.a.d. que chaque ligne de la table est identifiée de manière unique, la valeur de la clé est donc unique et toujours définie (NULL non autorisé) La clé étrangère quant à elle peut accepter une valeur indéfinie (NULL autorisé), grâce à cette clé la contrainte d’intégrité référentielle est assurée. Une clé étrangère est reliée soit à une clé primaire soit à une clé secondaire 8.5 Autres composants de la base de données D’autres objets viennent s’ajouter à la base de données : les procédures stockées les Types de Données Définis par l’Utilisateur (TDDU) les règles et valeurs par défaut ALSI / S25 SGBD R Support de Cours 2TSIG D:\582659791.doc ALSI S25 SQL Avancé et administration d’un SGBD Relationnel STS2 IG Application à SQL Server 6.5 Le 16/04/17 page 26 8.6 Les différents types d’intégrité La cohérence des informations enregistrées dans la base repose sur des règles d’ingrégrité qui sont mis en oeuvre par le moteur SQL. Quatre types d’intégrité sont gérés : L’intégrité d’entité Vérifie l’unicité de chaque ligne de la table, une ou plusieurs colonnes contiennent des valeurs uniques donc identifiantes (clé primaire). 8.6.1 L’intégrité référentielle Elle concerne les liaisons entre les tables, lors des opérations de mise à jour, d’insertion ou de suppression de ligne. Le mécanisme de référence est assurée en comparant les clés primaires et étrangères. 8.6.2 Cela évite : de supprimer des lignes d’une table parent alors qu’il existe des lignes associées dans la table enfant. (ACCESS autorise la suppression en cascade). Exemple : supprimer une ligne de Client alors qu’il reste des lignes Commande pour ce client. d’insérer des lignes dans une table enfant qui ne posséderait pas de lignes associées dans la table parent. Exemple : insérer des lignes Commande sans relation avec un Client existant. de modifier des colonnes dans la table parent ce qui générerait des « orphelins » dans la table enfant. Exemple : modifier la valeur d’un N°Client qui possède des Commandes en cours. 8.6.3 L’intégrité de domaine Son rôle est de contrôler les valeurs saisies dans les colonnes de table, plusieurs mécanismes coopèrent : le type de donnée, prédéfini, une colonne de type entier ne peut contenir une chaîne de caractères, la valeur par défaut, en l’absence d’une saisie, la colonne prendra une valeur définie afin d’éviter que celle-ci reste indéfinie, la règle de validation, exemple une colonne doit appartenir à l’intervalle 5 à 25%, la clé étrangère, la valeur de la colonne est contrôlée automatiquement en faisant appel à la table référencée. L’intégrité définie par l’utilisateur Elle concerne les contrôles mis en place dans une organisation pour vérifier qu’une donnée est cohérente par rapport à une autre ou à une règle de gestion. Exemple : une entreprise n’acceptera une nouvelle commande d’un client si le compte de celui-ci possède un solde débiteur > 15 ooo frs. 8.6.4 8.7 Mettre en oeuvre l’intégrité Deux possibilités existent : l’intégrité déclarative et l’intégrité procédurale 8.7.1 l’intégrité déclarative La « déclaration » est mis en place lors de la création ou de la modification de structure de la table. l’intégrité procédurale Certains objets externes aux tables sont chargés de contrôles divers, un même objet peut bien sûr, être mis en oeuvre sur plusieurs tables. 8.7.2 ALSI / S25 SGBD R Support de Cours 2TSIG D:\582659791.doc ALSI S25 SQL Avancé et administration d’un SGBD Relationnel STS2 IG Application à SQL Server 6.5 SQL Server et l’intégrité Intégrité déclarative Intégrité de domaine Type de données, contrainte DEFAULT, contrainte CHECK Intégrité d’entité contrainte PRIMARY KEY, contrainte UNIQUE intégrité référentielle Contrainte REFERENCE, FOREIGN KEY Intégrité utilisateur impossible ALSI / S25 SGBD R Support de Cours 2TSIG Le 16/04/17 page 27 intégrité procédurale Règle, valeur par défaut Index unique, déclencheurs Déclencheurs Déclencheurs, procédures stockées, vues D:\582659791.doc 9 ALSI S25 SQL Avancé et administration d’un SGBD Relationnel STS2 IG Application à SQL Server 6.5 Le 16/04/17 page 28 LE MODELE CLIENT-SERVEUR (APPROCHE) Il se distingue des applications fonctionnant en réseau ou en multi-utilisateur par le fait que les clients ne gèrent que la partie logique d’affichage, ils s’adressent au serveur pour effectuer les traitements. 9.1 4.1 Organisation de type Mainframe Organisation des années 70, où l’ordinateur central assurait à la fois la totalité des traitements et le stockage des données. Les utilisateurs avaient à leur disposition des terminaux passifs (consoles clavier-écran) relié au Mainframe par un réseau local. Plus le nombre de terminaux est important moins les performances sont bonnes. Cette architecture est assez coûteuse (coût de fonctionnement et de maintenance). Par contre les systèmes d’exploitation propriétaires sont fiables et puissants. 9.2 4.2 Organisation en serveur de fichiers L’arrivée des micro-ordinateurs (1980) a modifié cette organisation. La possibilité d’utiliser les micro en émulation de terminaux (moins chers) et comme machine autonome pour la Bureautique a séduit les entreprises. Avec eux sont apparus les réseaux locaux et la nécessité de partager et faire circuler l’information. Les systèmes d’exploitation pour réseaux locaux comme Netware de Novel, Lantastic, Windows Workgroups étaient le support privilégié pour les produits dBase, FoxPro, Access, Paradox. Avec cette architecture en serveur de fichiers, les données sont stockées sur le serveur, les applications sur chaque poste client ; dès qu’une requête est émise au serveur, toutes les données sont transmises au poste client afin d’y être traitées. Le réseau est donc encombré inutilement. Aussi pour éviter cet inconvénient, les éditeurs de SGBD ont cherché à transposer leurs moteurs SGBD vers ces serveur qui devenaient serveurs de données. 9.3 4.3 Organisation en serveur de données Les serveurs de données s’inspirent donc de ces deux architectures et les traitements de données sont répartis entre le client et le serveur. Ainsi une requête émise par un client sur une table de 10 000 lignes située sur le serveur, est traitée sur le serveur qui ne renvoit au client que le résultat de cette requête. Ce dernier prenant à sa charge les traitements d’affichage de mise en forme ou de calculs complémentaires. Parmi les produits « micro » seul SQL Server permet cette architecture client-server, les produits comme FoxPro, dBase, Access se comportent en serveur de fichiers lorsqu’ils sont utilisés seuls (car il n’y a pas de système de traitement sur le serveur). Par contre ces produits offrent la possibilité de travailler avec SQL Server grâce aux logiciels appelés middleware c.a.d. médiateur entre le client et le serveur. ALSI / S25 SGBD R Support de Cours 2TSIG D:\582659791.doc ALSI S25 SQL Avancé et administration d’un SGBD Relationnel STS2 IG Application à SQL Server 6.5 Le 16/04/17 page 29 9.4 4.4 Le Middleware C’est la couche logicielle qui assure la communication entre le client et le serveur. Plusieurs objectifs lui sont assignés : Envoyer les requêtes au serveur et transporter les résultats jusqu’au client, Transformer les types de données si nécessaire (convertir les jeux de caractères), Gérer les transactions (unité de base des traitements sur la BdD), Gérer les caches mémoire clients et serveur, Gérer les connexions et les contrôles d’accès utilisateurs. Aujourd’hui les pilotes ODBC (Open Data Base Connectivity) permettent de développer des applications clientes sans connaître le serveur SQL qui sera utilisé. Ces pilotes s’améliorent et offriront la possibilité de gérer les bases de données réparties sur plusieurs serveurs. 9.5 4.5. Bases de données distribuées L’idée d’utiliser plusieurs machines pour répartir les données et réduire les risques en cas de panne est à l’origine des architectures distribuées. Microsoft propose depuis 1997 un produit nommé Microsoft Transaction Server, celui-ci permet de gérer des transactions sur plusieurs serveurs possédant donc une base de données répartie sur des serveurs (qui peuvent être très éloignés grâce aux réseaux étendus). Une nouvelle fois, les produits « grands systèmes » comme CICS ou Tuxedo qui sont des moniteurs transactionnels ont inspiré l’offre micro. Dans SQL Server 6.5, le service MS DTC assure la gestion des transactions distribuées. ALSI / S25 SGBD R Support de Cours 2TSIG D:\582659791.doc ALSI S25 SQL Avancé et administration d’un SGBD Relationnel STS2 IG Application à SQL Server 6.5 Le 16/04/17 page 30 10 LES OUTILS D’ADMINISTRATION SQL SERVER 6.5 Ci-dessous l’interface graphique Entreprise Manager : ALSI / S25 SGBD R Support de Cours 2TSIG D:\582659791.doc ALSI S25 SQL Avancé et administration d’un SGBD Relationnel STS2 IG Application à SQL Server 6.5 Le 16/04/17 page 31 Cette version prend en compte le concept de gestion centralisée de serveurs, cela permet d’administrer tous les serveurs de l’entreprise y compris ceux qui sont à l’extérieur (réseaux étendus), les composants de SQL Server 6.5 sont organisés selon le schéma ci-dessous : SQL Entreprise Manager OLE Automation SQL Server Distributed Management Objects (DMO) Moteur SQL Server SQL Executive Gestionnaire de réplication Gestionnaire de tâches Gestionnaire d’événements Gestionnaire d’alerte SQL Server et Windows NT uilisent des outils communs : l’observateur d’événements, l’analyseur de performances, le gestionnaire de services, le registre, etc. SQL Server est multithread, chaque processus en cours sur le serveur possède des zones de mémoire et des priorités indépendantes des autres threads. Structure DMF Distributed Management Framework est un ensemble de services et objets nécessaires à l’administration de SQL Server qui se décompose en : SQL Entreprise Manager (SQLEW.EXE) Interface graphique d’administration DMO Distributed Management Objects interface d’accès au moteur = SQL DMO et OLE Automation. Transact-SQL qui est une extension à SQL permet d’administrer complètement les serveurs, il regroupe : le langage de définition des données (DDL) : définir les bases, tables, index, vues, ... le langage de manipulation des données (DML) : sélection, mise à jour, ... le langage de contrôle des données (DCL) : gestion des droits d’accès à l’information, le langage de programmation : écriture des procédures stockées et déclencheurs. Services SQL Executive (réplication, tâches, événements, alertes) Gestionnaire de Services SQL (SQLMGR.EXE) :interface « feu rouge » pour le démarrage, l’arrêt, la reprise du serveur Gestionnaire de sécurité SQL (SQSECMGR.EXE) : gestion des comptes utilisateurs pour la sécurité intégrée à N.T. ALSI / S25 SGBD R Support de Cours 2TSIG D:\582659791.doc ALSI S25 SQL Avancé et administration d’un SGBD Relationnel STS2 IG Application à SQL Server 6.5 Le 16/04/17 page 32 ISQL_W : interface graphique permettant de lancer des requêtes et d’afficher les résultats. On peut lancer tous les types de requêtes (DDL, DML, DCL) et procédures stockées et analyser les requêtes. Analyseur de performances SQL (PERFMON.EXE de Win. N.T.) : mesure l’activité et les performances du serveur. SQL Trace (SQLTRACE.EXE) : permet de suivre l’activité du serveur en temps réel MS Query (MSQRY32.EXE) : interface graphique de gestion des requêtes à travers ODBC Assistant Web SQL (WEBWIZ.EXE) : outil de création de pages HTLM Titres en ligne SQL Server (INFOVIEW.EXE) : documentation en ligne Pilotes Microsoft ODBC et fichier d’aide pour SQL Server Objets de gestion distribuée SQL Server : aide sur SQL DMO Fichiers exécutables depuis la ligne de commande : BCP.exe : transfert de données entre fichiers systèmes et SQL Server ISQL.exe : exécution de scripts en Transact-SQL SQLSERVR.exe : exécutable de MSSQLSERVER SQLMAINT.exe : programme pour la maintenance de bases de données MAKEPIPE.exe, READPIPE.exe : verifie le fonctionnement des cannaux nommés ALSI / S25 SGBD R Support de Cours 2TSIG D:\582659791.doc ALSI S25 SQL Avancé et administration d’un SGBD Relationnel STS2 IG Application à SQL Server 6.5 Le 16/04/17 page 33 11 ALLOCATION ET GESTION DE L’ESPACE DE STOCKAGE La première étape à réaliser lors de la mise en place d’une base de données consiste à réserver un espace disque destiné au stockage de toutes les données de la base. Avec SQL Server, il est nécessaire de pré-allouer l’espace de stockage c’est à dire qu’il faut calculer et réserver un espace disque suffisant pour y stocker la base. SQL Server utilise l’architecture suivante : Unité de Base de Données Base de données Segment Unité d’allocation (512 Ko) Extension (16 Ko) Page (2 Ko) 11.1 Unité de Base de Données C’est l’entité de base créée par le système d’exploitation (instruction Disk Init).Un fichier physique est alors créé, il possède un nom logique d’unité, un nom physique (de fichier), une taille et un numéro. Une unité peut contenir : une ou plusieurs bases de données, un ou plusieurs journaux de transactions. A l’installation, SQL Server génère trois unités de base : MASTER.DAT, MSDBDATA.DAT, MSDBLOG.DAT 11.2 Segment Un segment est un ensemble nommé de parties de disque. Il s'agit d'un sous-ensemble d'une ou de plusieurs unités de base de données mises à la disposition d'une base de données particulière. Par défaut, un segment prend toute la place allouée à la base de donnée sur l’unité de base de donnée. Le même segment peut occuper plusieurs unités de base de données. Les informations sur les segments sont obtenues par la fonction sp_helpegment «NomSegment ». Lors de la création d'une base de données, les segments suivants sont créés automatiquement pour cette base de données : Nom de segment Fonction SYSTEM Stocke les tables système. LOGSEGMENT Stocke le journal des transactions. DEFAULT Stocke tous les autres objets de base de données, sauf si vous créez d'autres segments. Si vous ne spécifiez pas de segment lors de la création de la table ou en utilisant la procédure système sp_placeobject, les objets de base de données seront stockés sur ce segment. 11.3 Unité d’allocation Lorsque la base à été placée dans une unité de base, elle est découpée en unités d’allocation valant chacune 512Ko. ALSI / S25 SGBD R Support de Cours 2TSIG D:\582659791.doc ALSI S25 SQL Avancé et administration d’un SGBD Relationnel STS2 IG Application à SQL Server 6.5 Le 16/04/17 page 34 11.4 Extension Il existe 32 extensions par unité d’allocation, une extension vaut donc 1/32 ème de 512 K, soit 16 Ko. Chaque table ou index est affecté d’une extension lors de sa création : l’extension initiale. A mesure que la table augmente de volume, le système lui attribue de nouvelles extensions : les extensions supplémentaires. C’est l’unité de stockage minimum d’une table ou d’un index. Il ne peut y avoir qu’une table ou un index par extension. 11.5 Page Chaque extension contient 8 pages de données, c’est dans cet espace que sont stockées les lignes des tables et index. La taille d’une page est de 2048 octets (dont 2016 octets utilisables), cependant la longueur maxi d’un enregistrement (hors champs text et image) est 1962 octets. Il est important de bien calculer la longueur des enregistrements lors de la conception. Exemple : si un enregistrement occupe 1040 octets, cette longueur ne permet pas de stocker 2 enregistrements par page (2*1040 = 2080), de ce fait chaque enregistrement occupera une page, ce qui représente un gaspillage de près de 50% de l’espace La procédure sp_estspace permet de calculer la taille d’une table en fonction de sa structure et du nombre d’enregistrements estimés. 11.6 Décomposition d’une unité d’allocation Le tableau ci-dessous présente l’organisation d’une unité d’allocation 0 8 9 240 248 1 241 249 2 3 4 5 6 7 10 11 12 13 14 15 242 250 243 251 244 252 245 253 246 254 247 255 extension 0 (pages 0 à 7) extension 1 (pages 8 à 15) extension 30 (pages 240 à 247) extension 31 (pages 248 à 257) 11.7 Estimation de la taille d’une table 11.7.1 Remarques préliminaires Les calculs diffèrent un peu selon que les champs sont de longueurs fixes (longueur fixe et défini avec l’option NOT NULL) ou de longueur variable (longueur variable ou longueur fixe et défini avec l'option NULL). Dans le second cas, il faut faire les calculs avec la longueur moyenne du champ et la formule de calcul tient compte du nombre de champs de longueur variable dans une ligne. On simplifie ici, en prenant la taille maxi de chaque colonne. On prend le cas particulier d’un index ordonné : les feuilles d’un index ordonné sont les pages de données elles-même. Dans le cas d’un index non ordonné, il y a un niveau d’indexation supplémentaire et le nombre d’octets réservé pour les servitudes logicielles diffère un peu. 11.7.2 Etape 1 : Calcul de la taille d’une ligne de données 2 + (Somme des octets de toutes les colonnes) = Sous-total Sous-total + ((Sous-total / 256) + 1) + (Nombre de colonnes de longueur variable + 1) + 2 = Taille de la ligne de données La valeur 1 et 2 correspondent aux servitudes logicielles que SQL Server mobilise pour le stockage interne. ALSI / S25 SGBD R Support de Cours 2TSIG D:\582659791.doc ALSI S25 SQL Avancé et administration d’un SGBD Relationnel STS2 IG Application à SQL Server 6.5 11.7.3 Le 16/04/17 page 35 Etape 2 : Calcul du nombre de pages de données Pour calculer le nombre de pages de données: 2 016 / (Taille de la ligne de données) = Nombre de lignes de données par page (Nombre de lignes) / (Nombre de lignes de données par page) = Nombre de pages de données requises. 11.7.4 Etape 3 : Calcul de la taille des lignes d'un index ordonné 5 + (Somme des octets des clés d'index )) = Sous-total (Sous-total) + ((Sous-total / 256) + 1) + (Nombre de colonnes de longueur variable + 1) + 2 = Taille d'une ligne d'index ordonné Les valeurs 1, 2 et 5 correspondent aux servitudes logicielles que SQL Server mobilise pour le stockage interne. 11.7.5 Etape 4 : Calcul du nombre de pages d'un index ordonné Après avoir calculé la taille d'une ligne de l'index ordonné, vous pouvez calculer le nombre de pages requises par celui-ci. (2 016 / Taille d'une ligne de l'index ordonné) 2 = Nombre de lignes d'index ordonné par page (Nombre de pages de données) / (Nombre de lignes d'index ordonné par page) = Nombre de pages d'index au niveau 0 Si le résultat obtenu est supérieur à 1, répétez les étapes de division en utilisant chaque fois le quotient obtenu précédemment comme nouveau dividende, jusqu'à ce que vous obteniez un résultat égal à 1. Dès que vous aurez obtenu un quotient égal à 1, vous aurez atteint le niveau racine de l'index. (Nombre de pages d'index au dernier niveau) / (Nombre de lignes d'index ordonné par page) = Nombre de pages d'index au niveau suivant 11.7.6 Etape 5 : Calcul du nombre total de pages Pour calculer le nombre total de pages de données: (Nombre de pages de données) + (Nombre de pages d'index au niveau 0) + (Nombre de pages d'index au niveau suivant) + (Nombre de pages d'index au niveau suivant) [...] = Nombre total de pages de données 11.8 Calcul de la taille d'une table de 9 millions de lignes dotée d'un index ordonné L'exemple suivant illustre comment calculer la taille (en nombre de pages de 2 Ko) des données et de l'index ordonné d'une table présentant les caractéristiques suivantes: 9 millions de lignes Somme des octets des colonnes de longueur fixe = 100 Somme des octets de deux colonnes de longueur variable = 50 Clé d'index ordonné de longueur fixe = 4 octets ALSI / S25 SGBD R Support de Cours 2TSIG D:\582659791.doc ALSI S25 SQL Avancé et administration d’un SGBD Relationnel STS2 IG Application à SQL Server 6.5 Le 16/04/17 page 36 Procédez comme suit: 1. Calculez la taille d'une ligne de données: 4 (Servitudes logicielles) + 100 Somme des octets de toutes les colonnes de longueur fixe + 50 Somme des octets de toutes les colonnes de longueur variable 154 Sous-total 154 + 1 + 3 + 2 160 Sous-total (Sous-total / 256) + 1 (Servitudes logicielles) Nombre de colonnes de longueur variable + 1 (Servitudes logicielles) Taille d'une ligne de données 2. Calculez le nombre de pages de données: 2 016 / 160 = 12 lignes de données par page 9 000 000 / 12 = 750 000 pages de données 3. Calculez la taille des lignes de l'index ordonné: 5 Servitudes logicielles +4 Somme des octets des clés d'index de longueur fixe 9 Taille des lignes de l'index ordonné 4. Calculez le nombre de pages de l'index ordonné: (2 016 / 9) - 2 = 222 lignes d'index ordonné par page 750 000 / 222 = 3 378 pages d'index (Niveau 0) 3 378 / 222 = 15 pages d'index (Niveau 1) 15 / 222 = 1 page d'index (Niveau 2) 5. Calculez le nombre total de pages: Totaux: Niveau 2 (racine) Niveau 1 Niveau 0 Données Nombre total de pages de 2 Ko ALSI / S25 SGBD R Support de Cours 2TSIG Pages 1 15 3 378 750 000 753 394 Lignes 15 3 378 750 000 9 000 000 D:\582659791.doc ALSI S25 SQL Avancé et administration d’un SGBD Relationnel STS2 IG Application à SQL Server 6.5 Le 16/04/17 page 37 12 UNITE ET BASE DE DONNEES SQL SERVER 6.5 12.1 Création d’une unité de base de données Cette opération peut se réaliser avec l’interface Entreprise Manager ou avec du code Transact-SQL. Avec E. M. cliquez sur le dossier Unité de base de données, choisissez Créez une nouvelle unité (bouton droit de la souris). La fenêtre Nouvelle unité de base de données apparaît : La taille de l’unité est ajustée avec le curseur d’accroissement Avec Transct-SQL, exemple : DISK INIT Name = ‘’FFMC’’ Physname = ‘’C:\MSSQL\DATA\CASMOTO.DAT’’ Vdevno = 10, Size = 51200 12.2 Modification de la taille d’une unité Avec E. M. cliquez sur le dossier Unité de base de données, choisissez Edition (bouton droit de la souris). La fenêtre Edition unités de base de données apparaît. Le bouton d’accroissement permet la modification, la zone centrale montre l’utilisation de l’espace de l’unité. ALSI / S25 SGBD R Support de Cours 2TSIG D:\582659791.doc ALSI S25 SQL Avancé et administration d’un SGBD Relationnel STS2 IG Application à SQL Server 6.5 Le 16/04/17 page 38 Avec Transct-SQL, exemple : DISK RESIZE Name = ‘’FFMC’’ Physname = ‘’C:\MSSQL\DATA\CASMOTO.DAT’’ Size = 52224 12.3 Suppression d’une unité de base de données La suppression d’une unité entraîne la suppression des bases et des journaux de transactions qu’elle contient. Avec E. M. il faut supprimer ‘à la main’ le fichier physique correspondant. Avec Transct-SQL, exemple : sp_dropdevice ‘’FFMC’’, DELFILE 12.4 Création d’une base de données Cette opération peut se réaliser avec l’interface E. M. ou avec du code Transact-SQL. Avec Entreprise Manager, cliquez sur le dossier Base de données, choisissez Nouvelle Base (bouton droit de la souris). La fenêtre Nouvelle base de données apparaît. Le premier cadre indique le nom de l’unité de données et le nom d’unité de jour- ALSI / S25 SGBD R Support de Cours 2TSIG D:\582659791.doc ALSI S25 SQL Avancé et administration d’un SGBD Relationnel STS2 IG Application à SQL Server 6.5 Le 16/04/17 page 39 nal de transaction ainsi que leurs tailles respectives. La partie inférieure indique les unités existantes et la place disponible sur chacune d’elles. Avec Transact-SQL. Exemple : CREATE DATABASE MOTO on FFMC = 10 ALSI / S25 SGBD R Support de Cours 2TSIG D:\582659791.doc ALSI S25 SQL Avancé et administration d’un SGBD Relationnel STS2 IG Application à SQL Server 6.5 Le 16/04/17 page 40 12.5 Extension d’une base de données L’extension de la base est possible, cette opération peut se faire dans l’unité initiale ou sur d’autres unités. Le terme désigné en SQL Server est ‘développement de base de données’ Double-cliquez sur le nom de la base de données, puis sur le bouton Développement, la fenêtre ci-dessous apparaît : Avec Transact-SQL. Exemple : ALTER DATABASE MOTO on FFMC = 5 12.6 7.6 Réduction d’une base de données Même opération que pour l’extension, choisir le bouton Réduire, une fenêtre indique la taille minimale en dessous de laquelle on ne peut descendre. ALSI / S25 SGBD R Support de Cours 2TSIG D:\582659791.doc ALSI S25 SQL Avancé et administration d’un SGBD Relationnel STS2 IG Application à SQL Server 6.5 Le 16/04/17 page 41 Avec Transact-SQL. Exemple : DBCC SHRINKDB (MOTO, 496) 12.7 Suppression d’une base de données Les bases de données utilisateurs (et non les bases système master, model, tempdb) peuvent être supprimées. Avec l’interface E. M. cliquez sur le nom de la base, choisissez Supprimer (bouton droit de la souris). Cette opération supprime à la fois la base désignée mais aussi tous les objets qu’elle contient (pas de récup. possible !!!). Avec Transact-SQL. Exemple : DROP DATABASE MOTO 12.8 Lire les infos. d’une base de données Avec Entreprise Manager, double-cliquez sur le nom de la base, la fenêtre Edition informe sur la date de création, le propriétaire, la taille des données et du journal de transactions et l’espace disponible. ALSI / S25 SGBD R Support de Cours 2TSIG D:\582659791.doc ALSI S25 SQL Avancé et administration d’un SGBD Relationnel STS2 IG Application à SQL Server 6.5 Le 16/04/17 page 42 12.9 Le journal de transaction Il occupe une place importante dans le système de sécurité car il contient la trace de toutes les modifications apportées à la base. Chaque base possède son journal de transaction, celui-ci est repésenté par la table syslogs. Le mécanisme de la transaction est le suivant : une transaction (une ou plusieurs opérations SQL) est effectuée par un utilisateur les lignes qui doivent être modifiées sont chargées en MEV (cache de donnée), elles restent en MEV, la transaction est ensuite validée (ordre COMMIT) et placée dans le journal de transaction sur disque. Si un incident survenait à ce moment la MEV (cache mémoire) serait effacée mais la transaction enregistrée dans le journal permettrait de réappliquer les modifications grâce au mécanisme de restauration automatique. 12.10 Rôles des bases de données système Quatre bases ‘système’ sont implantées lors de l’installation de SQL Server ALSI / S25 SGBD R Support de Cours 2TSIG D:\582659791.doc ALSI S25 SQL Avancé et administration d’un SGBD Relationnel STS2 IG Application à SQL Server 6.5 Le 16/04/17 page 43 master, base indispensable au fonctionnement du moteur SQL, model, base exemple servant de modèle aux nouvelles bases créées, tempdb, base de stockage temporaire, msdb, base utilisée par SQL Executive ALSI / S25 SGBD R Support de Cours 2TSIG D:\582659791.doc ALSI S25 SQL Avancé et administration d’un SGBD Relationnel STS2 IG Application à SQL Server 6.5 Le 16/04/17 page 44 La base système master assure la sécurité d’accès, le suivi des connexions, le suivi des bases et unités, la gestion des verrous. Master occupe 17 Mo et comporte 13 tables systèmes. 12.10.1 12.10.2 Résumé des tables systèmes de la base master Nom de la table système Description syscharsets jeux de caractères, ordres de tri sur le serveur sysconfigures informations de configuration modifiables syscurconfigs copie de sysconfigures sysdatabases références de toutes les bases sysdevices références de toutes les unités de bases syslanguages indications des langues installées / serveur syslocks références des verrous actifs syslogins table des noms d’accès au serveur sysmessages messages erreurs et d’avertissement de SQL Server sysprocesses références des connexions avec SQL Server sysremotelogins table des noms d’accès distants au serveur sysservers références des serveurs distants accessibles sysusages unités d’allocation affectées / base de données La base système model joue le rôle de base exemple pour les nouvelles bases créées. Elle comporte 18 tables système ainsi que tous les objets (tables, TDDU, règles, valeurs par défaut, procédures stockées...) définis par l’utilisateur. Ces éléments seront recopiés lors de la création d’une base de données. Sa taille est de 1Mo. 12.10.3 Résumé des tables systèmes de la base model Nom de la table système sysalternates contient les noms d’allias sysarticles informations des articles à publier (réplication) syscolumns références de toutes les colonnes(tables, vues, ALSI / S25 Description SGBD R Support de Cours 2TSIG D:\582659791.doc ALSI S25 SQL Avancé et administration d’un SGBD Relationnel STS2 IG Application à SQL Server 6.5 Le 16/04/17 page 45 etc.) syscomments code Transact-SQL des vues, règles, valeurs par déf. déclencheurs et procédures stockées sysconstraints références des contraintes de type PK, FK, CHECK, DEFAULT, UNIQUE et utilisation dans les tables. sysdepends dépendances fonctionnelles entre objets. sysindexes une ligne par index (cluster ou non) syslogs c’est le journal des transactions sysobjects contient les références des tables de la BdD arbre d’exécution des vues,valeurs par déf., sysprocedures règles, ... sysprotects droits d’utilisation des objets syspublications contient les publications pour la réplication sysreferences une ligne par contrainte de type FK syssegments références des segments existants sur la base syssubscriptions systypes sysusers ALSI / S25 références des publications et articles (abonnement du serveur) contient les types système et TDDU références des groupes et utilisateurs (lien avec la table syslogins SGBD R Support de Cours 2TSIG D:\582659791.doc ALSI S25 SQL Avancé et administration d’un SGBD Relationnel STS2 IG Application à SQL Server 6.5 Le 16/04/17 page 46 La base système msdb est utilisée par le service SQL Executive pour la gestion des alertes, le suivi des sauvegardes et restaurations. 12.10.4 Résumé des tables systèmes de la base msdb Nom de la table système sysalerts Description références des alertes syshistory historique des tâches déclenchées et des alertes sysnotifications liaisons entre les alertes et les opérateurs sysoperators liste des opérateurs devant être prévenus systasks liste des tâches automatisées sysservermessages complément des messages erreurs propre au serveur sysibackupdetail références des sauvegardes réalisées par unité sysbackuphistory une ligne par opération de sauvegarde sysrestorehistory une ligne par opération de restauration sysrestoredetail références des sauvegardes réalisées par unité La base système tions suivantes : tempb est une base temporaire utilisée pour le stockage des données lors des opéra- tris (order by) sous-requêtes imbriquées ou corrélées regroupement (group by, having) calculs et fonctions (AVG, MIN, SUM, ...) création de procédures stockées (ODBC, ...) Par défaut la taille de tempdb est fixée à 2 Mo, cette taille peut s’avérer insuffisante et avoir des répercussions sur les performances de la base. ll convient alors d’augmenter la taille de celle-ci. ALSI / S25 SGBD R Support de Cours 2TSIG D:\582659791.doc ALSI S25 SQL Avancé et administration d’un SGBD Relationnel STS2 IG Application à SQL Server 6.5 Le 16/04/17 page 47 12.11 Les options d’une base de données L’onglet Options de la fenêtre Edition de la base de données fait apparaître une série d’options (cases à cocher) que l’on peut activer ou non Select into / bulkcopy : Cette option activée permet de ne pas écrire dans le journal de transaction, certaines opérations comme bcp ou SELECT INTO. Par défaut elle est désactivée. Colonnes NULL par défaut : Avec cette option, les colonnes ne spécifiant pas NULL ou NOT NULL (lors des opérations CREATE ou ALTER) acceptent la valeur NULL. Aucune synchronisation lors de la récupération : Si cette option est activée aucun enregistrement de synchronisation (entre des serveurs secondaires et le serveur primaire) n’est ajouté. L’option doit être activée pour permettre la restauration des journaux de transactions en provenance du serveur primaire. Lecture seule : Permet de déclarer la base en lecture seule, donc pas d’écriture possible. Utilisateur unique : Avec cette option, un seul utilisateur (n’importe lequel) peut avoir accès à la base, cette option est à distiguer de « Réservé au DBO » Réservé au DBO Le DBO est le propriétaire de la base, avec cette option, seul le DBO peut accéder à la base. Tronquer le journal lors de la synchronisation Lorsque cette option est activée, le journal des transactions est validé au moment des points de synchronisation (chaque minute) est vidé. Cela représente un risque de ne pouvoir reconstruire les données perdues. Options activées par la procédure sp_dboption Offline : utilisée pour les bases se trouvant sur un support amovible comme le CD-ROM. ALSI / S25 SGBD R Support de Cours 2TSIG D:\582659791.doc ALSI S25 SQL Avancé et administration d’un SGBD Relationnel STS2 IG Application à SQL Server 6.5 Le 16/04/17 page 48 Published : permet à une base d’être ‘éditeur’ (lors d’une réplication). Subscribed : permet à une base d’être abonné’ d’une autre base. ALSI / S25 SGBD R Support de Cours 2TSIG D:\582659791.doc ALSI S25 SQL Avancé et administration d’un SGBD Relationnel STS2 IG Application à SQL Server 6.5 Le 16/04/17 page 49 8. Création des objets de la base SQL Server 6.5 Comme pour les opérations précédentes, la création des objets peut se faire via l’interface graphique (Entreprise Manager) ou bien grâce au code Transact-SQL. Nous utiliserons de préférence le mode graphique (plus rapide et agréable), néanmoins il est possible de générer les scripts correspondants afin de les étudier ou de les rejouer lorsque cela est nécessaire. Le groupe Objets de la fenêtre précédente comprend six sous-groupes : Tables Vues Procédures stockées Règles Défauts Type de données utilisateur L’interface grafique permet (clic droit de la souris) de créer, modifier, supprimer facilement les objets de la base. ALSI / S25 SGBD R Support de Cours 2TSIG D:\582659791.doc ALSI S25 SQL Avancé et administration d’un SGBD Relationnel STS2 IG Application à SQL Server 6.5 Le 16/04/17 page 50 12.12 Table 12.12.1 Création d’une table La fenêtre de création de table comprend une zone destinée à la définition des champs de la table (Clé, identité, Nom de colonne, Type de donnée, Taille, Valeurs Null, Par défaut). La seconde zone comprend quatre onglets destinés à la définition des clés primaires et étrangères ainsi que les contraintes d’unicité et de validation. Une table peut contenir 250 colonnes au maximum, le nombre de lignes n’est limité que par la capacité du serveur ; une base peut contenir 2 milliards de tables. 12.12.2 8.1.2 Modification d’une table il est aisé de créer une table par l’interface Entreprise Manager, par contre il faut penser à enregistrer le script de création afin de le rejouer ou d’apporter des modifications. ALSI / S25 SGBD R Support de Cours 2TSIG D:\582659791.doc ALSI S25 SQL Avancé et administration d’un SGBD Relationnel STS2 IG Application à SQL Server 6.5 Le 16/04/17 page 51 12.12.3 8.1.3 Types de données pré-définis Il existe 19 types de données fournis pas le système Les types de données système sont: Binaire binary[(n)] varbinary[(n)] Caractère char[(n)] varchar[(n)] Date et heure datetime smalldatetime Numérique exact decimal[(p[, s])] numeric[(p[, s])] Numérique approché float[(n)] real Entier int smallint tinyint Monétaire money smallmoney Spécial bit timestamp Texte et image text image ALSI / S25 SGBD R Support de Cours 2TSIG D:\582659791.doc ALSI S25 SQL Avancé et administration d’un SGBD Relationnel STS2 IG Application à SQL Server 6.5 Le 16/04/17 page 52 12.12.4 8.1.4 Types de Données Définis par l’Utilisateur (TDDU) Comme son nom l’indique, cette possibilité permet d’affiner la définition de certaines colonnes, un TDDU est lié à une base de données. Comme pour tous les objets d’une base de données un TDDU sera défini soit par l’interface E.M. comme ci-dessous, soit par code. ALSI / S25 SGBD R Support de Cours 2TSIG D:\582659791.doc ALSI S25 SQL Avancé et administration d’un SGBD Relationnel STS2 IG Application à SQL Server 6.5 ALSI / S25 SGBD R Support de Cours 2TSIG Le 16/04/17 page 53 D:\582659791.doc ALSI S25 SQL Avancé et administration d’un SGBD Relationnel STS2 IG Application à SQL Server 6.5 Le 16/04/17 page 54 TDDU défini par code comme ci-dessous. Exemple 1 : un type Code-Règlement (entier compris entre 1 et 5) Sp_addtype CodRglType, smallint NOT NULL Exemple 2° : un type Code-Postal (sur 5 caractères) Sp_addtype CodPosType, Char(5) NOT NULL Il n’est pas possible de modifier un TDDU, il faut le supprimer, puis le recréer d’où l’intérêt de rejouer le script apès suppression de l’objet. Sp-droptype CodPost pour bénéficier de ce TDDU dans toutes vos bases de données, il suffit de le créer dans la base model. De plus un TDDU peut posséder une valeur par défaut et une règle de validation. 12.12.5 8.1.5 Les valeurs par défaut Cette possibilité permet de ne pas saisir certaines valeurs de champ en proposant à l’utilisateur une valeur convenue à l’avance. Ces valeurs peuvent être définies soit sur la colonne de la table, soit sur le type de la colonne. Selon les options utilisées la mise en œuvre de l’intégrité des données se fera de manière déclarative ou procédurale. 12.12.6 Contrainte DEFAULT (déclarative) Une colonne ne peut posséder qu’une contrainte DEFAULT c’est à dire une constante texte ou numérique, une fonction niladique (ne possédant pas d’arguments) ou une valeur nulle. Exemple : CREATE TABLE CLIENT ( NumCli int NOT NULL, DateCde DateTime DEFAULT (GETDATE(), Montant Double, CodeRglt smallint, CONSTRAINT DefMontant DEFAULT 0 FOR Montant ) ) On remarque que la première contrainte défaut est déclarée directement sur la colonne DateCde , la seconde contrainte est définie après le mot clé CONSTRAINT. Cette possibilité permet d’ajouter une contrainte même si la table est déjà constituée exemple : ALTER TABLE CLIENT ADD CONSTRAINT DefCodeRglt DEFAULT 1 FOR CodeRglt 12.12.7 CREATE DEFAULT (procédurale) La valeur par défaut est créée sans être attachée immédiatement à une colonne, cet objet est alors considéré comme les autres tables ou index. Ce type de valeur par défaut sera attaché soit à une colonne, soit à un TDDU. Dans ce cas la colonne créée avec ce type hérite de la valeur par défaut. La fenêtre suivante présente le mécanisme CREATE DEFAULT : ALSI / S25 SGBD R Support de Cours 2TSIG D:\582659791.doc ALSI S25 SQL Avancé et administration d’un SGBD Relationnel STS2 IG Application à SQL Server 6.5 Le 16/04/17 page 55 création d’une valeur par défault, association de colonnes ou de types de données la contrainte DEFAULT se trouvant dans la structure de table est vérifiée en premier. L’intérêt des va- leurs par défaut réside dans la possibilité de les associer aux TDDU. Création d’une valeur par défaut avec E.M. ALSI / S25 SGBD R Support de Cours 2TSIG D:\582659791.doc ALSI S25 SQL Avancé et administration d’un SGBD Relationnel STS2 IG Application à SQL Server 6.5 Le 16/04/17 page 56 Association d’une valeur par défaut à une colonne avec E.M. Association d’une valeur par défaut à TDDU avec E.M. ALSI / S25 SGBD R Support de Cours 2TSIG D:\582659791.doc ALSI S25 SQL Avancé et administration d’un SGBD Relationnel STS2 IG Application à SQL Server 6.5 12.12.8 Le 16/04/17 page 57 8.1.6 Les règles de validation Elles assurent l’intégrité de domaine et permettent des contrôles : en limitant les valeurs saisies dans un intervalle de valeurs en iimposant un format de saisie Deux possibilités de création sont offertes (code ou E.M.) pour chacun des deux contrôles : la contrainte de type CHECK ou la règle de validation RULE. 12.12.9 Contrainte CHECK (déclarative) La création peut se faire par code Exemple codé 1°: ( CREATE TABLE CLIENT NumCli int NOT NULL, CodPost char(5), CONSTRAINT CSCodPo CHECK (CodPost LIKE ‘ [0-9] [0-9] [0-9] [0-9] [0-9] ‘ ) ) Exemple codé 2° ALTER TABLE JOUR ADD CONSTRAINT CSJour CHECK ( Jour IN ‘Lundi’, ‘Mardi’, …)) Exemple codé 3° ALTER TABLE CLIENT ADD CONSTRAINT CSRemis CHECK ( Remise <= 30) ALSI / S25 SGBD R Support de Cours 2TSIG D:\582659791.doc ALSI S25 SQL Avancé et administration d’un SGBD Relationnel STS2 IG Application à SQL Server 6.5 Le 16/04/17 page 58 12.12.10 Contrainte CHECK (déclarative) suite La création peut se faire aussi par l’interface E.M. 12.12.11 CREATE RULE (procédurale) Comme pour les valeurs par défaut, il est possible de créer des règles de validation indépendantes des colonnes. La syntaxe de la condition est identique à celle d’une condition WHERE (excepté les SELECT imbriqués). Les exemples suivants présentent quelques règles réalisées par code ou avec l’interface E.M. Exemple codé 1°: CREATE RULE CodPostRule AS @codpo LIKE ‘ [0-9] [0-9] [0-9] [0-9] [0-9] ‘ ) L’utilisation de la variable @codpo permettra le passage du nom de la colonne ou du TDDU lors de la liaison avec la règle. Exemple codé 2°: CREATE RULE RemisRule AS @Taux >=0 AND @Taux <=40 ALSI / S25 SGBD R Support de Cours 2TSIG D:\582659791.doc ALSI S25 SQL Avancé et administration d’un SGBD Relationnel STS2 IG Application à SQL Server 6.5 Le 16/04/17 page 59 12.12.12 Attachement avec la règle (par code) liaison de la règle CodPostRule à la colonne CodPost Sp-bindrule CodPostRule, ‘MaBase.CodPost’ liaison de la règle CodPostRule au TDDU CodPostType Sp-bindrule CodPostRule, CodPosType CHECK et RULE visent le même objectif, quelques différences existent cependant : la contrainte CHECK fait partie de la table, elle la suit lors d’une procédure d’export ou de de réplication. la contrainte CHECK peut référencer plusieurs colonnes et permet de comparer des colonnes d’une même table., une contrainte CHECK et une règle peuvent être associées à une même colonne (la contrainte est vérifiée en premier). la règle RULE est associable à un TDDU, ce qui permet de définir des types génériques utilisables par tous les développeurs d’une même équipe. Comme pour les TDDU, la création de celles-ci automatiquement dans toute nouvelle base créée. règles dans la base model intégrera Définition d’une règle par l’interface E. M. ALSI / S25 SGBD R Support de Cours 2TSIG D:\582659791.doc ALSI S25 SQL Avancé et administration d’un SGBD Relationnel STS2 IG Application à SQL Server 6.5 Le 16/04/17 page 60 Association d’une règle à une colonne par l’interface E. M. 12.12.13 Association d’une règle à un type de donnée par l’interface E. M. 12.12.14 12.12.15 ALSI / S25 SGBD R Support de Cours 2TSIG D:\582659791.doc ALSI S25 SQL Avancé et administration d’un SGBD Relationnel STS2 IG Application à SQL Server 6.5 12.12.16 Le 16/04/17 page 61 8.1.7 Les clés primaires et étrangères Elles jouent un rôle essentiel dans la définition : de l’intégrité d’entité (vérification que chaque ligne est identifiée de manière unique) de l’intégrité référentielle (vérification que la clé étrangère possède une corresondance avec la clé primaire de la table référencée) Les clés primaires et étrangères sont référencées dans la table système syskeys qui gère la structure de la base de données. Dans la version 6.5, ces clés sont considérées comme des contraintes de la structure des tables. 12.12.17 Les clés primaires La contrainte PRIMARY KEY indique que la table possède une ou plusieurs colonnes permettant l’identification unique de chacune des lignes qui la composent. La contrainte UNIQUE permet également cette contrainte. Avec l’interface E.M. / fenêtre Gestion de tables / onglet Clé primaire La création d’une clé primaire implique la création d’un index unique. La colonne ou le groupe de colonne ne doit pas avoir « Valeurs Null » coché. ALSI / S25 SGBD R Support de Cours 2TSIG D:\582659791.doc ALSI S25 SQL Avancé et administration d’un SGBD Relationnel STS2 IG Application à SQL Server 6.5 Le 16/04/17 page 62 Avec le code Transact-SQL Exemple codé 1°: 12.12.17.1.1.1 CREATE TABLE PROF NumProf int PRIMARY KEY Une clé primaire est créée son nom est généré par la système Exemple codé 2°: CREATE TABLE PROF NumProf int CONSTRAINT PKNumProf PRIMARY KEY CLUSTERED 12.12.17.1.1.2 Une clé primaire est créée son nom est PKNumProf, l’index associé est de type CLUSTERED c.a.d. trié selon la table. 12.12.17.1.1.3 Exemple codé 3°: 12.12.17.1.1.4 CREATE TABLE PROF ( NomProf CHAR(25), PréProf CHAR(20), CONSTRAINT PKProf PRIMARY KEY (NomProf, PréProf) ) Une clé primaire composée est créée son nom est PKProf 12.12.18 Les clés étrangères La vérification de l’intégrité référentielle passe par la mise en œuvre des clés étrangères, cela évite l’utilisation de déclencheurs. (sauf s’il s’agit de mise à jour et suppression en cascade). Comme pour la clé étrangère les deux modes (codé ou interface E.M.) sont disponibles, il faut cependant vérifier l’existence d’une PRIMARY KEY ou une contrainte UNIQUE avant de créer une clé étrangère, un index UNIQUE dans la table parent ne suffit pas. Avec le code Transact-SQL Exemple codé 1°: 12.12.18.1.1.1 ALSI / S25 CREATE TABLE ENFANT-SALARIE NumSal int REFERENCE SALARIE(NumSal) Une clé étrangère est créée à partir de la colonne NumSal de la table SALARIE SGBD R Support de Cours 2TSIG D:\582659791.doc ALSI S25 SQL Avancé et administration d’un SGBD Relationnel STS2 IG Application à SQL Server 6.5 Exemple codé 2°: 12.12.18.1.1.2 Le 16/04/17 page 63 CREATE TABLE ENFANT-SALARIE NomSal CHAR(25), PréSal CHAR(20), CONSTRAINT CléEtrEnfant FOREING KEY (NomSal ,PréSal) REFERENCE SALARIE(Nom ,Prénom) Une clé étrangère composite est créée à partir des colonnes Nom et Prénom de la table SALARIE Exemple de clé étrangère définié avec l’interface E.M. ALSI / S25 SGBD R Support de Cours 2TSIG D:\582659791.doc ALSI S25 SQL Avancé et administration d’un SGBD Relationnel STS2 IG Application à SQL Server 6.5 Le 16/04/17 page 64 La contrainte d’unicité La clé primaire possède par défaut la propriété UNIQUE, pour les autres clés (secondaires) ou attributs auxquels on souhaite affecter la contrainte unique on utilise la contrainte UNIQUE. 12.12.19 Exemple codé : ALTER TABLE Produits ADD CONSTRAINT CUDésign_Prix UNIQUE CLUSTERED (Désignation, PUHT) Avec l’interface E.M. onglet Contraintes d’unicité : ALSI / S25 SGBD R Support de Cours 2TSIG D:\582659791.doc ALSI S25 SQL Avancé et administration d’un SGBD Relationnel STS2 IG Application à SQL Server 6.5 Le 16/04/17 page 65 12.12.20 8.2 Vue Une vue est une table virtuelle (c.a.d. sans existence physique sur disque) issue d’une ou de plusieurs tables, son intérêt réside dans la possibilité de présenter sous une forme adaptée (après sélection et projection) certaines informations au niveau des postes clients. Exemple une vue nommée VUE-CDE-CLI est créée à partir des tablesCLIENT, PRODUIT, COMMANDE : Table CIENT N RaiSoc Ville umCli 4 1025 Dupont & dupond 4 1203 Compagnie des Indes 4 Valenciennes Nante s Chez Gustave Per- 1852 pignan efProd 1045 4512 3078 Table PRODUIT R Désignation 2 UC 486 DX 33 2 EC 17P Sony 2 UC P166 MMX VUE-CDE-CLI Dési- Raisonsociale EC 17P Chez Gustave Sony UC 486 Compagnie Indes UC P166 MMX pond umCde 72041 73042 86014 des Dupont & du- Table COMMANDE N D ateCde TEi 9 1 2/02/97 9 0 8/03/97 5 9 1 9/07/98 Q éfProd 5 4512 1 1045 6 3078 3 520 3 120 4 500 T OTAL HT 15 600 52 800 27 000 gnation DX 33 P rix R N umCli 2 4 1852 2 4 1203 2 4 1025 Avec le code Transact-SQL 12.12.20.1.1.1.1 CREATE VIEW VUE-CDE-CLI AS SELECT Désignation, RaiSoc, ‘TOTAL HT’ = QTE * Prix FROM CLIENT, COMMANDE, PRODUIT WHERE COMMANDE.NumCli = CLIENT.NumCli AND COMMANDE.RéfProd = PRODUIT.RéfProd ALSI / S25 SGBD R Support de Cours 2TSIG D:\582659791.doc ALSI S25 SQL Avancé et administration d’un SGBD Relationnel STS2 IG Application à SQL Server 6.5 Le 16/04/17 page 66 certaines instructions ne sont pas autorisées lors de la création d’une vue : COMPUTE, COMPUTE BY, ORDER BY, SELECT INTO, UNION. ALSI / S25 SGBD R Support de Cours 2TSIG D:\582659791.doc ALSI S25 SQL Avancé et administration d’un SGBD Relationnel STS2 IG Application à SQL Server 6.5 Le 16/04/17 page 67 12.12.21 Utilisation d’une vue Une vue s’utilise comme une table mais avec quelques restrictions : Les instructions UPDATE, INSERT, DELETE ne s’appliquent qu’à une seule table sous-jacente à la vue. Il est impossible de mettre à jour une colonne calculée (comme le TOTAL HT). Il est impossible d’ajouter des enregistrements dans une vue contenant des champs calculés. L’insertion d’un enregistrement dans une vue respecte les mêmes règles que l’insertion d’un enregistrement dans une table (contrainte, valeurs NULL). 12.13 8.3 Index Les index permettent un accès rapide aux colonnes d'une table en fonction des valeurs d'une ou de plusieurs colonnes. Les index accélèrent considérablement l'exécution des instructions SQL grâce aux critères de sélection qui font référence aux colonnes indexées. L'utilisation d'index est appropriée pour les colonnes qui sont fréquemment utilisées avec des critères de sélection. Elle s'impose également dans des tables pour lesquelles les requêtes sont plus fréquentes que les insertions et les mises à jour. SQL Server offre deux types d'index : les index ordonnés et non ordonnés. Un index ordonné (CLUSTERED) est un index dans lequel l'ordre logique des valeurs clé est identique à l'ordre physique des lignes correspondantes dans la table principale. Une table ne peut contenir qu'un seul index ordonné. Un index non ordonné (NONCLUSTER) est un index dans lequel l'ordre logique de l'index ne correspond pas à l'ordre physique des lignes sur le disque. Les index ordonnés permettent généralement un accès plus rapide aux données que les index non ordonnés. SQL Server crée automatiquement un index pour les contraintes PRIMARY KEY et UNIQUE. Si vous désirez d'autres index, vous devez les créer. 12.13.1 Création d’un index Dans la fenêtre du Gestionnaire de serveur de SQL Enterprise Manager, sélectionnez la table appropriée, appuyez sur le bouton droit de la souris et choisissez ensuite «Index». Ou Utilisez l'instruction CREATE INDEX. Par exemple: CREATE UNIQUE CLUSTERED INDEX UPKCL_auidind ON auteurs (id_auteur) crée un index sur la colonne id_auteur de la table auteurs pour assurer l'unicité des valeurs introduites dans cette colonne. 12.13.2 Visualiser les index Pour visualiser qui existent sur une table, utilisez la procédure système sp_helpindex. Un maximum de huit index seront affichés. La table système sysindexes contient des informations sur tous les index. Voici un exemple de rapport à propos de la table auteurs : sp_helpindex auteurs ALSI / S25 SGBD R Support de Cours 2TSIG D:\582659791.doc ALSI S25 SQL Avancé et administration d’un SGBD Relationnel STS2 IG Application à SQL Server 6.5 Le 16/04/17 page 68 index_name index_description index_keys ----------------------------------------------------------UPKCL_auidind clustered, unique, primary key located on default id_auteur aunmind nonclustered located on default nom_auteur, pn_auteur (1 ligne(s) affectée(s)) Lorsqu'elle est utilisée avec le nom d'une table, la procédure système sp_help établit également un rapport sur les index d'une table spécifique. Lorsque vous n'avez plus besoin d'un index, vous pouvez l'enlever d'une base de données et récupérer la place réservée à son stockage en le supprimant. Par exemple, envisagez de supprimer un index si vous ne l'utilisez pas pour la plupart de vos requêtes ou pour toutes vos requêtes. Remarque Seul le propriétaire de l'index peut le supprimer. Le propriétaire ne peut pas transmettre une permission de suppression à d'autres utilisateurs. 12.13.3 Supprimer un index Dans la fenêtre du Gestionnaire de serveur de SQL Enterprise Manager, sélectionnez la table appropriée, appuyez sur le bouton droit de la souris, choisissez «Index» dans la liste déroulante; choisissez ensuite le bouton «Supprimer». Ou Utilisez l'instruction DROP INDEX. Par exemple: DROP INDEX auteurs.UPKCL_auidind supprime l'index UPKCL_auidind de la table auteurs. 12.14 8.4 Les procédures stockées Une procédure stockée est un programme qui à pour objet un traitement itératif ou ensembliste (SQL standard), ce traitement agit sur les données de la base. Le langage utilisé est Transact SQL. Ces programmes peuvent recevoir des paramètres, renvoyer des valeurs, être exécutés à distance et posséder des droits d’accès. Une procédure stockée peut être lancée depuis un client, ou depuis une autre procédure stockée ou être exécutée automatiquement par le serveur. Contrairement à une requête SQL classique, elle est pré-compilée et optimisée pour en améliorer les performances. ODBC utilise nombre de procédures stockées, SQL Server dispose quand à lui de centaines de procédures systèmes (préfixe sp_) 12.14.1 Création d’une procédure stockée L’interface Gestion de procédures stockées propose une feuille de requête pour la création ou la modification du code. Tout comme une vue ou un déclencheur une procédure ne peut se modifier directement, il faut la supprimer puis la recréer. On trouve en tête de l’instruction DROP destinée à la suppression. L’ensemble des instructions SQL est accessible à condition de ne pas dépasser 65000 caractères par procédure. Exemple 1 : création d’une procédure stockée de suppression d’un article CREATE PROCEDURE Suppres_Article (@RéfArt INT) AS IF NOT EXISTS (SELECT * FROM ARTICLE WHERE Référence = @RéfArt ) BEGIN PRINT « Cet Article n’existe pas dans la Base ! » RETURN END ALSI / S25 SGBD R Support de Cours 2TSIG D:\582659791.doc ALSI S25 SQL Avancé et administration d’un SGBD Relationnel STS2 IG Application à SQL Server 6.5 Le 16/04/17 page 69 IF EXISTS (SELECT * FROM COMMANDE WHERE Référence = @RéfArt ) BEGIN PRINT « Attention cet Article est concerné par des commandes !! » RETURN END DELETE FROM ARTICLE WHERE Référence = @RéfArt GO ALSI / S25 SGBD R Support de Cours 2TSIG D:\582659791.doc ALSI S25 SQL Avancé et administration d’un SGBD Relationnel STS2 IG Application à SQL Server 6.5 Le 16/04/17 page 70 Exemple 2 : utilisation d’une procédure stockée de suppression d’un article EXECUTE Suppres_Article 41245 Syntaxe générale de l’instruction de création de procédure : CREATE PROCedure nom_procédure [ ;numéro] [(paramètre1 [,paramètre2] … paramètre255] ) } [{ FOR REPLICATION } | { WITH RECOMPILE } ] [ WITH ENCRYPTION ] AS instruction_SQL nom_procédure nom unique dans la base, précédé d’un signe #, la procédure sera locale et temporaire, avec deux ## elle sera globale et temporaire numéro numéro d’ordre pour les procédures ayant le même nom Paramètre de la forme @nom type [ = valeur ] [OUTPUT], pouvant être passé à la procédure. OUTPUT permet d’indiquer un paramètre retorné par la procédure. FOR REPLICATION Permet de préciser que la procédure sera utilisée lors de la réplication. WITH RECOMPILE La procédure est recompilée à chaque exécution WITH ENCRYPTION Le code sera crypté dans les tables système. 12.14.2 UtIlisation d’une procédure stockée Les procédures stockées sont utilisées dans les cas suivants : Mise en œuvre des règles d’entreprise Traitements des mises à jour ou suppression en cascade Sécurité d’exécution Enchaînement d’instructions Manipulation des données système 12.15 8.5 Les déclencheurs ou TRIGGER Un déclencheur est un type particulier de procédure stockée qui entre en action lorsque vous modifiez des données dans une table spécifique. Les déclencheurs sont habituellement créés pour assurer la cohérence des règles de gestion des données liées logiquement dans différentes tables. L'avantage des déclencheurs est qu'ils s'exécutent automatiquement (ils fonctionnent quelle que soit la raison de la modification des données, des données entrées par un employé ou l'action d'une application). Chaque déclencheur est spécifique à une ou plusieurs opérations de modification des données: UPDATE, INSERT ou DELETE. Un déclencheur ne s'exécute qu'une fois par instruction SQL, il s'exécute immédiatement après l'achèvement des instructions de modification de données. Le déclencheur et l'instruction qui le déclenche sont traités comme une seule transaction qui peut être annulée à partir du déclencheur. Si une erreur grave est détectée, toute la transaction est automatiquement annulée. ALSI / S25 SGBD R Support de Cours 2TSIG D:\582659791.doc ALSI S25 SQL Avancé et administration d’un SGBD Relationnel STS2 IG Application à SQL Server 6.5 Le 16/04/17 page 71 Les déclencheurs sont utiles dans les cas suivants: Pour effectuer des changements en cascade dans des tables liées de la base de données. Par exemple, un déclencheur DELETE associé à la colonne id_titre de la table titres provoque une suppression équivalente de lignes correspondantes dans d'autres tables, en utilisant la colonne titre_id comme clé unique pour localiser des lignes dans les tables titreauteur, ventes et droits_prévus. Pour empêcher ou annuler les changements qui violent l'intégrité référentielle de la base, en annulant la tentative de modification des données en question. Un déclencheur de ce type peut entrer en action si vous essayez de modifier une clé étrangère et que la nouvelle valeur ne correspond pas à sa clé primaire. Par exemple, vous pouvez créer un déclencheur INSERT sur titreauteur.id_titre, qui annule toute insertion si la nouvelle valeur ne correspond pas à une valeur dans titres.id_titre. (Cependant, l'intégrité référentielle déclarative (DRI) est souvent employée dans ce but). Quand cela est possible, il est préférable de laisser agir la DRI. Pour assurer l'application de restrictions plus complexes que celles définies à l'aide de contraintes CHECK. Contrairement aux contraintes CHECK, les déclencheurs peuvent faire référence à des colonnes dans d'autres tables. Par exemple, un déclencheur peut annuler des mises à jour visant à augmenter le prix d'un livre de plus d'un pour-cent de son avance sur droits d'auteur. Il peut être contrôler au moyen d'une instruction SELECT portant sur une autre table. Pour trouver la différence entre l'état d'une table avant et après une modification des données, et accomplir une ou plusieurs actions en fonction de cette différence. Remarque A l'exception du déclencheur deltitle, les déclencheurs traités dans ce chapitre ne font pas partie de la base de données pubs. Pour utiliser les exemples, vous devez créer chaque déclencheur avec l'instruction CREATE TRIGGER. Attention : Chaque nouveau déclencheur associé à une table ou une colonne pour le même type d'opération (INSERT, UPDATE, ou DELETE) écrase le précédent sans avertissement. Les déclencheurs étudiés jusqu'à présent considéraient chaque instruction de modification des données comme un tout: si une seule ligne d'une insertion de quatre lignes n'était pas acceptable, c'est l'insertion entière qui n'était pas acceptée, et toute la transaction était annulée. C'est la manière dont fonctionne un déclencheur. Il rejette ou accepte chaque transaction de modification de données en entier. Cependant, vous ne devez pas annuler toutes vos modifications de données parce que certaines ne sont pas valides. En utilisant une sous-requête subordonnée dans un déclencheur, vous pouvez forcer le déclencheur à analyser les lignes modifiées une à une. L'exemple suivant suppose l'existence d'une table nommée nouvelles_ventes. Voici l'instruction CREATE pour créer cette table: CREATE TABLE nouvelles_ventes (id_mag char(4), num_cmd varchar(20), date datetime, qt smallint, modepaiements varchar(12), id_titre tid) Comment analyser chacun des enregistrements que vous essayez d'insérer ? Le déclencheur ins_condition les analyse ligne par ligne, et ensuite supprime les lignes qui n'ont pas de id_titre dans la table titres: CREATE TRIGGER ins_condition ON ventes ALSI / S25 SGBD R Support de Cours 2TSIG D:\582659791.doc ALSI S25 SQL Avancé et administration d’un SGBD Relationnel STS2 IG Application à SQL Server 6.5 Le 16/04/17 page 72 FOR INSERT AS IF (SELECT COUNT(*) FROM titres, inserted WHERE titres.id_titre = inserted.id_titre) <> @@rowcount BEGIN DELETE ventes FROM ventes, inserted WHERE ventes.id_titre = inserted.id_titre AND inserted.id_titre NOT IN (SELECT id_titre FROM titres) PRINT 'Ne sont ajoutées que les ventes dont les id_titre correspondent.' END Le test de déclencheur est identique à celui utilisé dans l'exemple de déclencheur INSERT (déclench_ins) présenté plus haut, mais la transaction n'est pas annulée. Au lieu de cela, le déclencheur supprime les lignes rejetées. Cette capacité de supprimer des lignes qui ont été insérées repose sur l'ordre dans lequel le traitement s'effectue lorsque les déclencheurs s'exécutent. Les premières lignes sont insérées dans la table ventes et dans la table inserted, et le déclencheur s'exécute ensuite. Pour tester le déclencheur conditionnel, insérez quatre lignes dans la table nouvelles_ventes. Les id_titre de deux lignes de cette table ne correspondent pas aux valeurs spécifiées dans la table titres. Les données à insérer sont les suivantes: nouvelles_ventes id_mag ------- num_cmd -------- date qt modepaiements -------------------- id_titre -------- ------- 7066 7066 7067 7131 QA7442.3 Jul 25 1995 8:35AM QA7442.3 Jul 24 1995 8:35AM D4482 Jul 27 1995 12:00AM 10 N914008 Jul 27 1995 12:00AM 75 Net 30 PS1372 75 Net 60 BU7832 Net 30 PSxxxx 20 Net 30 PSyyyy Ensuite, insérez des données de la table nouvelles_ventes dans la table ventes. L'instruction est la suivante: INSERT ventes SELECT * FROM nouvelles_vents Les lignes id_titre PSxxxx et PSyyyy ne correspondent à aucune ligne de la table titres, et le déclencheur ins_condition supprime ces deux lignes des tables ventes et inserted. Deux tables spéciales sont utilisées dans les instructions de déclencheurs: la table deleted et la table inserted. Ces tables temporaires s'utilisent pour les tests de déclencheurs. Elles servent à tester les effets de certaines modifications de données et à fixer les conditions pour les actions des déclencheurs. Vous ne pouvez pas modifier directement les données contenues dans les tables test d'un déclencheur, mais vous pouvez employer ces tables dans des instructions SELECT pour détecter les effets d'une instruction INSERT, UPDATE, ou DELETE. La table deleted stocke des copies de lignes concernées par les instructions DELETE ou UPDATE. Pendant l'exécution d'une instruction DELETE ou UPDATE, certaines lignes sont supprimées de la table du déclencheur et déplacées vers la table deleted. Cette table et la table du déclencheur n'ont habituellement pas de ligne en commun. La table inserted stocke des copies de lignes concernées par les instructions INSERT et UPDATE. Pendant une transaction INSERT ou UPDATE, de nouvelles lignes sont ajoutées simultanément dans la table inserted et dans la table du déclencheur. Les lignes de la table inserted sont des copies des nouvelles lignes de la table du déclencheur. ALSI / S25 SGBD R Support de Cours 2TSIG D:\582659791.doc ALSI S25 SQL Avancé et administration d’un SGBD Relationnel STS2 IG Application à SQL Server 6.5 Le 16/04/17 page 73 D'un point de vue théorique, une transaction UPDATE est une opération de suppression suivie d'une opération d'insertion; les anciennes lignes sont d'abord copiées dans la table deleted, et les nouvelles lignes sont ensuite copiées dans la table du déclencheur et dans la table inserted. Lorsque vous fixez les conditions d'un déclencheur, utilisez les tables test du déclencheur appropriées pour la modification de données. Vous pouvez faire référence à la table deleted pendant le test d'un déclencheur INSERT, ou à la table inserted pendant le test d'un déclencheur DELETE, mais dans de tels cas, les tables test ne contiendront pas de ligne. Remarque Un déclencheur donné ne s'exécute qu'une fois par instruction. Si l'action d'un déclencheur dépend du nombre de lignes affectées par une modification de données, vous devriez tester les modifications de données multilignes (effectuées au moyen d'une instruction INSERT, DELETE ou UPDATE basée sur une instruction SELECT) à l'aide d'un test comme @@ROWCOUNT, et définir les actions appropriées. Les exemples de déclencheurs présentés dans les sections suivantes contiennent des modifications de données multilignes lorsque c'est nécessaire. La variable @@ROWCOUNT, qui stocke le nombre de lignes affectées par la dernière modification de données, recherche toute insertion, mise à jour ou suppression de plusieurs lignes. Si une instruction SELECT précède le test sur @@ROWCOUNT dans le déclencheur, vous devriez utiliser des variables locales pour stocker la valeur afin de l'analyser par la suite. (Toutes les instructions Transact-SQL qui ne renvoient pas de valeur remettent @@ROWCOUNT à 0). Lorsque des déclencheurs contenant des instructions ROLLBACK TRANSACTION sont exécutés à partir d'un lot d'instructions, ils annulent le lot entier. Dans l'exemple suivant, si l'instruction INSERT active un déclencheur contenant une instruction ROLLBACK TRANSACTION, l'instruction DELETE ne s'exécute pas parce que le lot est annulé: INSERT employé VALUES ('XYZ12345M', 'Nouveau', 'M', 'Employé', 1, 1, '9952', '6/1/95') DELETE employé WHERE id_employé = 'PMA42628M' Si des déclencheurs contenant des instructions ROLLBACK TRANSACTION sont exécutés à partir d'une transaction définie par l'utilisateur, l'instruction ROLLBACK TRANSACTION annule toute la transaction. Dans l'exemple suivant, si l'instruction INSERT active un déclencheur contenant une instruction ROLLBACK TRANSACTION, l'instruction UPDATE est également annulée: BEGIN TRAN UPDATE employé SET date_embauche = '7/1/94' WHERE id_employé = 'VPA30890F' INSERT employé VALUES ('XYZ12345M', 'Nouveau', 'M', 'Employé', 1, 1, '9952', '6/1/95') ALSI / S25 SGBD R Support de Cours 2TSIG D:\582659791.doc ALSI S25 SQL Avancé et administration d’un SGBD Relationnel STS2 IG Application à SQL Server 6.5 Le 16/04/17 page 74 Lorsque des déclencheurs contenant des instructions ROLLBACK TRANSACTION sont exécutés à partir d'un lot d'instructions, ils annulent le lot entier. Dans l'exemple suivant, si l'instruction INSERT active un déclencheur contenant une instruction ROLLBACK TRANSACTION, l'instruction DELETE ne s'exécute pas parce que le lot est annulé: INSERT employé VALUES ('XYZ12345M', 'Nouveau', 'M', 'Employé', 1, 1, '9952', '6/1/95') DELETE employé WHERE id_employé = 'PMA42628M' Si des déclencheurs contenant des instructions ROLLBACK TRANSACTION sont exécutés à partir d'une transaction définie par l'utilisateur, l'instruction ROLLBACK TRANSACTION annule toute la transaction. Dans l'exemple suivant, si l'instruction INSERT active un déclencheur contenant une instruction ROLLBACK TRANSACTION, l'instruction UPDATE est également annulée: BEGIN TRAN UPDATE employé SET date_embauche = '7/1/94' WHERE id_employé = 'VPA30890F' INSERT employé VALUES ('XYZ12345M', 'Nouveau', 'M', 'Employé', 1, 1, '9952', '6/1/95') Comme les déclencheurs sont des objets de base de données, ils sont classés par nom dans la table système sysobjects. La colonne type de la table sysobjects identifie les déclencheurs à l'aide de l'abréviation TR. Les plans d'exécution des déclencheurs sont stockés dans la table sysprocedures. La requête suivante extrait les déclencheurs d'une base de données: SELECT * FROM sysobjects WHERE type = 'TR' name ----------------employé_insmaj déclench_suppr schema -----0 0 refdate ------------------août 9 1995 10:04 août 21 1995 16:07 deltrig ------688005482 416004513 ALSI / S25 id ---------832005995 1392007990 instrig ------0 0 type ---TR TR userstat -------0 0 crdate ------------------août 9 1995 10:04 août 21 1995 16:07 updtrig ------0 0 SGBD R Support de Cours 2TSIG uid --1 1 seltrig ------0 0 indexdel -------0 0 version ------0 0 category -------0 0 cache ----0 0 D:\582659791.doc ALSI S25 SQL Avancé et administration d’un SGBD Relationnel STS2 IG Application à SQL Server 6.5 Le 16/04/17 page 75 Pour afficher des informations sur un déclencheur Exécutez la procédure système sp_help. Par exemple, pour obtenir des informations sur le déclencheur déclench_suppr: sp_help déclench_suppr Name ---déclench_suppr Owner ----dbo Type ------trigger When_created -----------------août 21 1995 16:07 Data_located_on_segment ----------------------not applicable L'instruction CREATE TRIGGER de chaque déclencheur est stockée dans la table système syscomments. Vous pouvez afficher la définition d'un déclencheur en utilisant la procédure système sp_helptext: sp_helptext déclench_suppr text ------------------------------------------create trigger déclench_suppr on ventes for delete as ... Vous pouvez éliminer un déclencheur en le supprimant ou en supprimant sa table. Lorsqu'une table est supprimée, tous les déclencheurs qui lui sont associés sont également supprimés. La permission DROP TRIGGER revient par défaut au propriétaire du déclencheur et n'est pas transmissible. Pour supprimer un déclencheur Utilisez Microsoft SQL Enterprise Manager. Ou Utilisez l'instruction DROP TRIGGER. Par exemple: DROP TRIGGER déclench_suppr supprime le déclencheur déclench_suppr de la table ventes. ALSI / S25 SGBD R Support de Cours 2TSIG D:\582659791.doc ALSI S25 SQL Avancé et administration d’un SGBD Relationnel STS2 IG Application à SQL Server 6.5 Le 16/04/17 page 76 13 9. SECURITE ET CONNEXION A UNE BASE SQL SERVER 6.5 La sécurité SQL Server 6.5 comprend plusieurs éléments qui, ensemble, vous permettent de définir : les utilisateurs autorisés à se connecter à un SQL Server; les utilisateurs autorisés à accèder à chaque base de données sur SQL Server; les objets de base de données (tables, vues, procédures stockées) auxquels chaque utilisateur est autorisé à accéder et/ou qu'il peut modifier; les instructions Transact-SQL que chaque utilisateur est autorisé à effectuer pour chaque base de données à laquelle il a accès. La sécurité de SQL Server protège un serveur et les données stockées sur ce serveur. Elle détermine : les personnes qui peuvent se connecter au serveur, les tâches administratives que les utilisateurs peuvent exécuter, les bases de données, les objets de base de données et les données auxquelles les utilisateurs peuvent avoir accès, etc. 13.1 9.1 Terminologie de la sécurité 13.1.1.1.1.1.1.1 L'administrateur système L'administrateur système est responsable des travaux administratifs et des fonctions opérationnelles qui ne sont pas liés à une application particulière. Il s'agira probablement d'une personne qui possède une vue d'ensemble complète de SQL Server et de l'ensemble de ses applications. L'administration de SQL Server consiste généralement à : installer SQL Server, créer des serveurs et des clients, gérer et surveiller l'utilisation de l'espace disque, la mémoire et les connexions, créer des unités et des bases de données, ouvrir des comptes SQL Server à des utilisateurs et leur accorder des permissions, transférer des données vers et depuis les bases de données SQL Server, sauvegarder et restaurer des bases de données, procéder à l'application et à la maintenance de la réplication, programmer des opérations sous surveillance indirecte, surveiller et régler SQL Server pour optimiser ses performances, diagnostiquer les problèmes relatifs au système. L'administrateur système peut également conseiller les créateurs d'applications à propos des données qui existent déjà sur le système SQL Server, faire des recommandations sur la standardisation des définitions des données dans les applications, etc. L'administrateur système opère en dehors du système de sécurité. Autrement dit, SQL Server ne vérifie jamais les permissions de l'utilisateur reconnu comme administrateur système. Celui-ci est également considéré comme le propriétaire de toute base de données qu'il utilise. Toute personne connaissant le mot de passe de l'administrateur système peut se connecter en tant qu'administrateur et jouir de toutes les prérogatives attachées à cette fonction (sauf si le serveur tourne en mode de sécurité de connexion approuvée). ALSI / S25 SGBD R Support de Cours 2TSIG D:\582659791.doc ALSI S25 SQL Avancé et administration d’un SGBD Relationnel STS2 IG Application à SQL Server 6.5 Le 16/04/17 page 77 13.1.1.1.1.1.1.2 Alias Nom d'utilisateur de base de données partagé par plusieurs noms d'accès. Un alias de base de données vous permet de traiter plusieurs personnes comme un seul utilisateur à l'intérieur d'une base de données, en accordant à toutes les mêmes permissions. N'importe quel nom d'utilisateur dans une base de données peut également servir d'alias. Les alias s'emploient souvent pour autoriser plusieurs utilisateurs à jouer le rôle de propriétaire de base de données. 13.1.1.1.1.1.1.3 Connexions approuvées La sécurité intégrée exige des protocoles de réseau qui gèrent les connexions authentifiées entre les clients et les serveurs. Ces connexions sont désignées sous le nom de connexions approuvées. Les protocoles multiprotocole et canal de communication nommé offrent des connexions approuvées. Notez que les connexions non-approuvées (connexions via d'autres protocoles de réseau qui ne gèrent pas les connexions authentifiées) doivent être gérées à l'aide de la sécurité standard de SQL Server. 13.1.1.1.1.1.1.4 Domaine Dans la sécurité de Windows NT, un domaine est un ensemble d'ordinateurs qui sont regroupés pour des raisons de visualisation et d'administration et qui partagent une base de données de sécurité commune. Groupe Dans SQL Server, un groupe de base de données est un ensemble d'utilisateurs de base de données. Les utilisateurs reçoivent les permissions sur les bases de données accordées au groupe. L'utilisation de groupes simplifie la gestion d'un grand nombre d'utilisateurs de base de données, car les groupes facilitent l'accord et la révocation des permissions pour plusieurs utilisateurs en même temps. Dans Windows NT, un groupe est un ensemble d'utilisateurs de Windows NT. Les utilisateurs ont reçu les droits et les permissions Windows NT accordées au groupe. Ceux-ci offrent un moyen pratique de gérer les possibilités offertes à un grand nombre d'utilisateurs qui ont les mêmes besoins, et ce dans le contexte de sécurité d'un domaine ou d'un ordinateur. ALSI / S25 SGBD R Support de Cours 2TSIG D:\582659791.doc ALSI S25 SQL Avancé et administration d’un SGBD Relationnel STS2 IG Application à SQL Server 6.5 Le 16/04/17 page 78 Mode de sécurité d'accès Le mode de sécurité d'accès détermine le mode de validation d'une demande d'accès par SQL Server. Il existe trois types de sécurité d'accès : intégrée, standard et mixte. Nom d'accès Un nom d'accès est le nom sous lequel SQL Server connaît un utilisateur. Le terme accès remplace parfois le terme nom d'accès. Pour se connecter à un serveur SQL qui utilise la sécurité standard, un utilisateur doit fournir un nom d'accès et un mot de passe valides. Nom d'utilisateur Dans SQL Server, un nom d'utilisateur de base de données est un nom attribué à un nom d'accès en vue de permettre à un utilisateur d'avoir accès à une base de données. Les possibilités dont dispose un utilisateur à l'intérieur d'une base de données dépendent des permissions accordées au nom d'utilisateur (et à des groupes dont le nom d'utilisateur fait partie). Dans Windows NT, un nom d'utilisateur est le nom sous lequel le domaine ou un ordinateur Windows NT individuel connaît l'utilisateur. Un utilisateur se connecte à un domaine ou un ordinateur en fournissant un nom d'utilisateur et un mot de passe valides. Les possibilités dont dispose l'utilisateur dépendent des droits et des permissions Windows NT accordées à ce nom d'utilisateur et aux groupes Windows NT dont le nom d'utilisateur fait partie. Permissions Microsoft SQL Server utilise les permissions pour appliquer la sécurité de la base de données. Le système de permissions de SQL Server spécifie quels sont les utilisateurs qui sont autorisés à utiliser telles ou telles instructions Transact-SQL, des vues et des procédures stockées. La faculté d'accorder des permissions est déterminée par le statut de chaque utilisateur (administrateur système, propriétaire de base de données ou propriétaire d'objet de base de données). Il en existe deux types : les permissions d'objet et les permissions d'instruction. Permissions d'instruction Les permissions d'instruction accordent le privilège d'utiliser certaines instructions Transact-SQL. Les permissions d'instruction ne sont liées à aucun objet spécifique. Ces permissions ne peuvent être accordées que par l'administrateur système (SA) ou le propriétaire de base de données. Les permissions d'instruction s'appliquent aux instructions suivantes : CREATE DATABASE, CREATE DEFAULT, CREATE PROCEDURE, CREATE RULE, CREATE TABLE, CREATE VIEW, DUMP DATABASE et DUMP TRANSACTION. Les permissions d'instruction sont également appelées permissions commande. Permissions d'objet Les permissions d'objet réglementent l'utilisation de certaines instructions sur certains objets de base de données déterminés. Elles sont accordées et révoquées par le propriétaire de l'objet. Propriétaire de base de données Le propriétaire d'une base de données (DBO, Database Owner) est l'utilisateur qui la crée. Il n'y a qu'un seul DBO. Il dispose de toute latitude d'action dans sa base de données et détermine l'accès et les possibilités dont disposent les autres utilisateurs. Dans sa propre base de données, l'utilisateur est reconnu comme DBO; dans les autres bases de données, le propriétaire de base de données est identifié par son nom d'utilisateur de base de données. Le statut de DBO peut être réaffecté à un autre utilisateur. Un seul nom d'accès peut être DBO, même si d'autres noms d'accès peuvent utiliser DBO comme alias. Propriétaire d'objet de base de données On appelle objets de base de données les tables, les index, les vues, les valeurs par défaut, les déclencheurs, les règles et les procédures. L'utilisateur qui crée un objet de base de données devient le propriétaire de l'objet de base de données et reçoit automatiquement toutes les permissions applicables à son objet. Le proprié- ALSI / S25 SGBD R Support de Cours 2TSIG D:\582659791.doc ALSI S25 SQL Avancé et administration d’un SGBD Relationnel STS2 IG Application à SQL Server 6.5 Le 16/04/17 page 79 taire d'objet de base de données peut accorder une permission à d'autres utilisateurs pour qu'ils utilisent cet objet. La propriété d'objet de base de données n'est pas transmissible. Sécurité intégrée La sécurité intégrée permet à un serveur SQL d'utiliser les mécanismes d'authentification de Windows NT pour valider les noms d'accès pour toutes les connexions. Seules les connexions approuvées (multiprotocole ou canaux de communication nommés) sont autorisées. Sécurité mixte La sécurité mixte permet de valider les demandes de connexion à l'aide de la sécurité intégrée ou de la sécurité standard. Il est possible d'établir des connexions approuvées (telles qu'elles sont utilisées par la sécurité intégrée) et des connexions non approuvées (telles qu'elles sont employées par la sécurité standard). Sécurité standard La sécurité standard utilise le processus de validation de noms d'accès de SQL Server pour toutes les connexions. Pour se connecter sur un serveur SQL, chaque utilisateur doit fournir un nom d'accès et un mot de passe valides. Chaque serveur SQL doit être configuré pour l'un des trois modes de sécurité disponibles. La sécurité intégrée permet à un serveur SQL d'utiliser les mécanismes d'authentification Windows NT pour valider les noms d'accès SQL Server pour toutes les connexions. Seules les connexions approuvées (multiprotocole ou canal de communication nommé) sont autorisées. La sécurité standard utilise le propre processus de validation de nom d'accès de SQL Server pour toutes les connexions. La sécurité mixte permet la validation des demandes de connexion de SQL Server à l'aide des méthodes de sécurité intégrée ou standard. Les connexions approuvées (telles qu'elles sont utilisées par la sécurité intégrée) et les connexions non approuvées (telles qu'elles sont employées par la sécurité standard) sont supportées. En outre, quel que soit le mode de sécurité de connexion du serveur, les applications clientes ODBC et DB-library peuvent être configurées de façon à toujours demander une connexion approuvée depuis le serveur. La sécurité intégrée assure l'intégration de la sécurité d'accès SQL Server dans la sécurité Windows NT. Cette intégration permet à un utilisateur du réseau de se connecter à un serveur SQL sans fournir un nom d'accès ou un mot de passe séparés. Les utilisateurs peuvent avoir un même nom d'accès et mot de passe pour Windows NT et pour SQL Server. La sécurité intégrée permet aux applications SQL Server de bénéficier des fonctions de sécurité de Windows NT, à savoir les mots de passe codés, l'expiration du mot de passe, les comptes utilisateur au niveau du domaine et l'administration des utilisateurs sous Windows. (Pour plus d'informations sur ces fonctions, consultez votre documentation sur Windows NT.) SQL Server réalise l'intégration de la sécurité d'accès dans Windows NT en utilisant les attributs de sécurité Windows NT d'un utilisateur de réseau pour contrôler l'accès à SQL Server. Les attributs de sécurité de réseau d'un utilisateur sont définis lors de la connexion sur le réseau et sont validés par Windows NT au moyen d'un mécanisme de codage de mot de passe sophistiqué. Quand un utilisateur de réseau essaie de se connecter à SQL Server, ce dernier utilise les ressources de Windows NT pour déterminer avec certitude le nom d'utilisateur de réseau validé du client. SQL Server autorise ou refuse ensuite l'accès basé sur ce nom d'utilisateur de réseau seul, sans exiger l'envoi d'un nom d'accès et d'un mot de passe séparés dans la demande de connexion du client. L'intégration de la sécurité d'accès fonctionne au moyen de protocoles de réseau qui gèrent les connexions authentifiées entre les clients et les serveurs. Ces connexions sont désignées sous le nom de connexions approuvées. Les connexions approuvées comprennent les sessions multiprotocole et canal de communication nommé provenant d'autres stations de travail tournant sous Windows NT, de clients tournant sous Windows pour Workgroups, de clients Windows 95 et de clients Microsoft LAN Manager tournant sous les systèmes d'exploitation Microsoft Windows ou MS-DOS. L'utilisation de la Net-Library multiprotocole permet de faire les connexions approuvées via le protocole NWLink IPX/SPX à partir de clients Windows 3.1 qui utilisent le logiciel Novell. (Dans ce cas, l'utilisateur sera invité à fournir un nom d'utilisateur et un mot de passe Windows NT lors de la connexion avec SQL ALSI / S25 SGBD R Support de Cours 2TSIG D:\582659791.doc ALSI S25 SQL Avancé et administration d’un SGBD Relationnel STS2 IG Application à SQL Server 6.5 Le 16/04/17 page 80 Server.) Les autres protocoles de réseau ne gèrent pas les connexions authentifiées. Les clients qui utilisent ces protocoles devront donc être gérés suivant la sécurité standard de SQL Server. Quand un utilisateur de la sécurité intégrée se connecte à SQL Server via une connexion approuvée, l'utilisateur est mappé sur un nom d'accès SQL Server, sur un nom d'accès SQL Server par défaut (généralement appelé invité), ou, si l'utilisateur possède des privilèges administratifs, sur l'administrateur système. Une fois que le processus de connexion est terminé, tous les autres contrôles de sécurité SQL Server sont gérés suivant la procédure habituelle. L'accès aux tables SQL Server individuelles, par exemple, est géré au moyen des permissions accordées à l'intérieur d'une base de données SQL Server. Si plusieurs ordinateurs SQL Server participent à un domaine géré par un serveur Windows NT, une seule connexion réseau pour chaque utilisateur suffit pour permettre l'accès à tous les serveurs SQL. Pour les utilisateurs définis sur d'autres domaines, La sécurité standard utilise le processus de validation d'accès SQL Server pour toutes les connexions. Pour se connecter à un serveur SQL, chaque utilisateur doit fournir un nom d'accès et un mot de passe valides. Lorsque le mode de sécurité d'accès d'un serveur est configuré sur standard et qu'un utilisateur essaie de se connecter au serveur, SQL Server cherche le nom d'accès et le mot de passe de l'utilisateur dans la table syslogins. Si le nom d'accès et le mot de passe indiqués sont valides, l'utilisateur est connecté au serveur SQL. Pour obtenir des instructions sur la configuration de la sécurité standard (en commençant par un aperçu de chaque tâche nécessaire pour procéder à la configuration), consultez le chapitre 9, Gestion de la sécurité. La sécurité mixte permet de valider les demandes de connexion SQL Server en utilisant les méthodes de sécurité intégrée ou de sécurité standard. Les connexions approuvées (telles qu'elles sont utilisées par la sécurité intégrée) et les connexions non approuvées (telles qu'elles sont employées par la sécurité standard) sont supportées. Lorsque le mode de sécurité d'accès d'un serveur est configuré sur mixte et qu'un utilisateur essaie de se connecter au serveur via une connexion approuvée (multiprotocole ou canal de communication nommé), SQL Server vérifie le nom d'accès. Si ce nom d'accès correspond au nom d'utilisateur de réseau de l'utilisateur, ou si le nom d'accès est vierge ou contient des espaces, SQL Server utilise les règles de connexion approuvées Windows NT (comme pour la sécurité intégrée). Si le nom d'accès demandé représente toute autre valeur, l'utilisateur doit fournir le mot de passe SQL Server correct et SQL Server utilise son propre processus de validation de connexion (comme pour la sécurité standard). Si la tentative d'accès ne se fait pas via une connexion approuvée, l'utilisateur doit fournir le nom d'accès et le mot de passe corrects pour établir la connexion, et SQL Server utilise son propre processus de validation de connexion (comme pour la sécurité standard). Quel que soit le mode de sécurité d'accès du serveur, il est possible de configurer les applications clientes ODBC et DB-Library de façon à ce qu'elles demandent toujours une connexion approuvée (sécurité intégrée) au serveur. Cette fonction permet à SQL Executive de se connecter à des serveurs distants tant qu'il tourne sur un compte d'utilisateur Windows NT correctement configuré, un compte qui bénéficie de l'accès SA au serveur SQL. Cette fonction assure une connexion approuvée, mais les niveaux de privilège d'utilisateur appropriés doivent exister pour garantir la réussite de l'accès. Si vous le souhaitez, vous pouvez empêcher la connexion via des connexions approuvées demandées par des clients en utilisant la procédure suivante : 1. utilisez l'utilitaire Gestionnaire d'utilisateurs Windows NT pour créer un groupe d'utilisateurs Windows NT local (par exemple SQLAdmins) qui ne contient pas d'utilisateur; 2. utilisez le Gestionnaire de sécurité SQL pour accorder le privilège d'administrateur système à ce groupe vide; 3. utilisez le Gestionnaire de sécurité SQL pour retirer le privilège d'administrateur système au groupe local Administrateurs. La sécurité étant attribuée par utilisateur plutôt que par ressource dans Windows NT, un utilisateur ne doit se souvenir que d'un seul nom de compte utilisateur et d'un seul mot de passe Windows NT pour se connecter et utiliser les ressources locales et les ressources du réseau. Avec la sécurité Windows NT, l'ensemble des ressources et des actions sont protégées par un contrôle d'accès discrétionnaire. Autrement dit, certains utilisateurs peuvent avoir accès à une ressource ou exécuter une action, tandis que d'autres se voient interdire l'accès à la même ressource ou à la même action. La sécurité est très souple, par exemple, différentes permissions pour différents utilisateurs peuvent être ALSI / S25 SGBD R Support de Cours 2TSIG D:\582659791.doc ALSI S25 SQL Avancé et administration d’un SGBD Relationnel STS2 IG Application à SQL Server 6.5 Le 16/04/17 page 81 définies sur différents fichiers d'un répertoire. La sécurité Windows NT s'applique à la fois aux utilisateurs qui travaillent sur l'ordinateur où se trouvent les ressources et aux utilisateurs qui ont accès aux ressources via le réseau. Pour Windows NT, l'unité de base pour la sécurité et l'administration centralisée est le domaine. Un domaine est un ensemble d'ordinateurs qui reconnaissent une base de données de comptes de sécurité commune. Quatre types d'ordinateurs participent à la sécurité des domaines : les contrôleurs de domaine primaires (PDC, Primary Domain Controller), les contrôleurs de domaine de sauvegarde (BDC, Backup Domain Controller), les serveurs et les stations de travail. Chaque domaine possède un PDC qui tient à jour la base de données des comptes de sécurité pour le domaine. Un domaine peut posséder n'importe quel nombre de BDC. Chaque BDC reçoit une copie de la base de données de comptes de sécurité du domaine et assiste le PDC en partageant la charge de l'authentification des connexions de domaine. Les ordinateurs PDC et BDC exécutent toujours le système d'exploitation Windows NT Server. D'autres ordinateurs peuvent être membres du domaine. Un ordinateur membre participe à la sécurité du domaine. Il tient à jour sa propre base de données locale de comptes de sécurité et peut authentifier les accès locaux, mais il peut aussi accepter des authentifications de connexion d'utilisateurs du domaine qui ont été exécutées par le PDC et les BDC du domaine. Un ordinateur qui exécute le système d'exploitation Windows NT Server peut être un serveur membre du domaine. Un ordinateur qui exécute le système d'exploitation Windows NT Workstation peut être une station de travail membre du domaine. D'autres types d'ordinateurs, par exemple les ordinateurs tournant sous Microsoft MS-DOS, ne stockent pas les comptes d'utilisateur et ne participent pas à la sécurité du domaine. Toutefois, de tels ordinateurs possèdent en général un domaine par défaut déclaré pour permettre de parcourir les listes d'ordinateurs. Quand SQL Server est configuré pour l'intégration de la sécurité sous Windows NT, il exploite les possibilités de Windows NT en matière de sécurité. Les utilisateurs Windows NT peuvent être autorisés à se connecter à SQL Server. Les comptes utilisateur Windows NT peuvent être mappés sur les noms d'accès. Ceci permet à un utilisateur de se connecter à SQL Server sans fournir un nom d'accès et un mot de passe séparés. Le nom d'accès d'origine de l'utilisateur pour accéder à Windows NT suffit pour permettre (ou, le cas échéant, pour refuser) l'accès à SQL Server. Avec l'intégration de la sécurité, les utilisateurs conservent un même nom d'accès et mot de passe pour Windows NT et pour SQL Server. Grâce à l'intégration de la sécurité, la sécurité au niveau des bases de données est toujours gérée par le propriétaire de base de données. Les groupes et les utilisateurs de bases de données sont créés de la même façon que n'importe quelle installation SQL Server, et les permissions d'objet et d'instruction sont accordées normalement. L'illustration ci-dessous montre que des éléments de sécurité séparés mais étroitement liés existent au niveau du domaine, de l'ordinateur, de SQL Server et des bases de données. ALSI / S25 SGBD R Support de Cours 2TSIG D:\582659791.doc ALSI S25 SQL Avancé et administration d’un SGBD Relationnel STS2 IG Application à SQL Server 6.5 Le 16/04/17 page 82 Il peut y avoir plusieurs domaines Windows NT sur un réseau ou dans une entreprise. Les relations d'approbation sont des accords de sécurité passés entre les domaines. Ces accords permettent une émulation de l'authentification de l'accès d'utilisateur. Les relations d'approbation et l'émulation d'authentification permettent à un utilisateur de n'avoir qu'un seul compte utilisateur dans un domaine tout en ayant accès à l'ensemble du réseau. Quand deux domaines sont configurés pour s'approuver, un utilisateur d'un domaine peut se voir accorder (ou refuser) l'accès aux ressources et aux actions pour les ordinateurs de l'autre domaine. Le domaine d'approbation accepte comme les authentifications d'accès qu'il reçoit du domaine approuvéde la même manière qu'un ordinateur membre d'un domaine accepte comme valides les authentifications d'accès qu'il reçoit des PDC et des BDC de son propre domaine. ALSI / S25 SGBD R Support de Cours 2TSIG D:\582659791.doc ALSI S25 SQL Avancé et administration d’un SGBD Relationnel STS2 IG Application à SQL Server 6.5 Le 16/04/17 page 83 13.2 9.2 Mise en œuvre de la sécurité La gestion de la sécurité de SQL Server consiste à : définir le mode de sécurité d'accès au serveur, autoriser l'accès des utilisateurs Windows NT à SQL Server, gérer les noms d'accès SQL Server, gérer les utilisateurs de bases de données, gérer les permissions objet et instruction, modifier les propriétaires de bases de données, manipuler les outils de gestion de la sécurité fournis par SQL Server Les options de sécurité permettent de déterminer le mode sécurisé d'accès au serveur, le niveau d'audit des connexions, et le mappage des caractères des noms d'utilisateurs de Windows NT sur les caractères disponibles sous SQL Server. Vous pouvez utiliser le programme d'installation de SQL Server ou SQL Enterprise Manager pour définir ou modifier ces options de sécurité. Les procédures décrites dans cette section supposent que vous utilisiez SQL Enterprise Manager. 13.2.1 9.2.1 Définir les options de sécurité du serveur 1. Lancez SQL Enterprise Manager à partir du groupe de programmes de Microsoft SQL Server 6.5 2. Ouvrez un groupe de serveurs dans la fenêtre Gestionnaire de serveurs, puis sélectionnez le serveur à administrer. 3. Sélectionnez l'option «Configurations» dans le menu Serveur. 4. Choisissez l'onglet Options de sécurité dans la boîte de dialogue Configuration/Options serveur. La fenêtre Options de sécurité affiche la configuration courante des options. ALSI / S25 SGBD R Support de Cours 2TSIG D:\582659791.doc ALSI S25 SQL Avancé et administration d’un SGBD Relationnel STS2 IG Application à SQL Server 6.5 Le 16/04/17 page 84 5. Visualisez et modifiez les options selon vos besoins. Une explication de chaque option vous est proposée à la suite de cette procédure. 6. Après avoir configuré les options de sécurité, choisissez «OK». SQL Server 6.5 vous permet de choisir parmi trois modes sécurisés d'accès. Votre choix aura une influence non négligeable sur la façon dont le serveur gérera la sécurité. Les informations qui suivent se bornent à résumer chaque mode de sécurité d'accès (standard, intégré, ou mixte). 13.2.2 13.2.3 Sécurité mode Standard Le mode Standard est la valeur par défaut. En mode Standard, SQL Server gère son propre processus de validation des connexions pour toutes les connexions (sauf pour les applications clientes qui requièrent explicitement la sécurité intégrée sur les connexions approuvées). Remarque Le serveur peut être configuré de façon à refuser les connexions approuvées requises par le client, mais alors, les applications et les fonctions qui utilisent des connexions approuvées forcées (telles que SQL Enterprise Manager et la réplication)connaîtront des restrictions. Pour plus de détails sur le sujet, consultez Refus de connexions approuvées demandées par un client. 13.2.4 Sécurité mode Intégré à Windows NT Le mode Intégré utilise les mécanismes d'authentification de Windows NT pour toutes les connexions. SQL Server n'admet que les connexions approuvées. Il ignore toujours le nom d'accès et le mot de passe SQL Server soumis dans la requête de connexion à partir d'une application cliente DB-Library ou Open Database Connectivity (ODBC). Les utilisateurs de réseau bénéficiant de privilèges SQL Server de niveau utilisateur peuvent se connecter à ALSI / S25 SGBD R Support de Cours 2TSIG D:\582659791.doc ALSI S25 SQL Avancé et administration d’un SGBD Relationnel STS2 IG Application à SQL Server 6.5 Le 16/04/17 page 85 l'aide de leur nom d'utilisateur réseau ou du nom d'accès par défaut (si leur nom d'utilisateur réseau ne se trouve pas dans la table syslogins). Les noms d'utilisateurs réseau auxquels est affecté un privilège de niveau administrateur système se connectent en tant que SA. Avec cette option, seuls les clients de type multiprotocole et canaux nommés sont supportés. Cette option n'est pas disponible si vous avez installé des Net-Libraries. De plus, si vous utilisez cette option, vous ne pouvez pas installer d'autres Net-Libraries de serveur. 13.2.5 Sécurité mode Mixte Le mode Mixte, combinaison des modes Intégré et Standard, vous permet d'établir des connexions approuvées et non-approuvées. Pour les connexions approuvées (multiprotocole ou canaux de communication nommés), SQL Server examine le nom d'accès requis tel qu'il est spécifié par l'application cliente DB-Library ou ODBC. Si ce nom d'accès correspond au nom d'utilisateur de réseau de l'utilisateur, ou s'il est nul ou constitué d'espaces, SQL Server tentera tout d'abord d'appliquer les règles de connexion intégrées à Windows NT comme décrit ci-dessus. Si cette opération échoue, SQL Server utilisera les règles standard. Si le nom d'accès requis a une autre valeur, l'utilisateur devra fournir le mot de passe SQL Server correct, et SQL Server traitera la connexion à l'aide des règles standard décrites ci-dessus. Toutes les demandes de connexion issues de connexions non-approuvées sont traitées selon les règles standard. Le mode mixte offre aux utilisateurs l'avantage très commode d'offrir la sécurité intégrée sans forcer pour autant tous les clients et les applications à employer ce mécanisme. Par exemple, les applications existantes qui renferment un mot de passe et un nom d'accès spécifiques pour tous les utilisateurs, continuent de fonctionner comme avant. Les clients qui n'appartiennent pas au monde PC (comme les stations de travail Apple® Macintosh® et UNIX®) peuvent également accéder à un serveur SQL configuré en mode mixte. Les utilisateurs qui se connectent à SQL Server via des connexions approuvées peuvent éviter une validation du mot de passe propre à SQL Server en introduisant leur nom d'utilisateur de réseau ou en introduisant des blancs dans leur requête de connexion. Dans tous les modes de sécurité d'accès, les communications de serveur-à-serveur (procédures stockées distantes) sont gérées à l'aide des mécanismes standard de SQL Server. SQL Server vous laisse également le soin de spécifier les paramètres suivants : 13.2.6 Accès par défaut Nom d'accès SQL Server, utilisé par un utilisateur autorisé sur les connexions approuvées lorsque le nom d'utilisateur réseau de cet utilisateur n'apparaît pas dans la table syslogins. Si cette zone de saisie reste vierge, les utilisateurs dont le nom d'utilisateur réseau ne figure pas dans la table syslogins se verront refuser l'accès au serveur, même si des privilèges utilisateur leur ont été accordés comme décrit dans les pages suivantes. Remarquez que l'administrateur système (SA) doit créer un nom d'accès correspondant au nom spécifié comme défaut. Vous ne créerez pas automatiquement le nom d'accès en introduisant ce nom dans la zone «Accès par défaut». Ce paramètre n'est pas utilisé en mode standard, sauf pour les applications clientes qui requièrent explicitement une connexion approuvée. 13.2.7 Domaine par défaut Nom du domaine Windows NT, spécifié comme valeur par défaut pour établir une correspondance entre les noms d'utilisateur réseau et les noms d'accès SQL Server. Du fait que le même nom d'utilisateur réseau peut être défini dans deux domaines différents pour deux utilisateurs distincts, et que tous deux peuvent bénéficier d'un droit d'accès à SQL Server, ce dernier doit pouvoir faire la distinction entre les deux noms dans le processus de connexion d'une connexion approuvée. Pour les noms d'utilisateur réseau définis dans des domaines différents du domaine par défaut spécifié, SQL Server ajoute le nom du domaine et un caractère de mappage, comme le signe souligné ( _ ), au nom d'utilisateur réseau avant de consulter la table syslogins. Supposons par exemple que le domaine MARKETING est défini comme valeur par défaut de SQL Server, et que le nom d'utilisateur réseau jacques est utilisé par deux utilisateurs différents (l'un dans le domaine MARKETING et l'autre dans le domaine INGÉNIEURS. Si Jacques dans Marketing utilise une connexion approuvée, il accèdera à SQL Server en utilisant le nom d'accès jacques (à condition bien sûr que cette entrée existe dans syslogins). Jacques dans Ingénieurs accèdera au même serveur SQL en utilisant le nom d'accès INGÉNIEURS_ Jacques. Si la majorité de vos utilisateurs appartient à un domaine bien particulier, définissez celui-ci comme Domaine par Défaut. ALSI / S25 SGBD R Support de Cours 2TSIG D:\582659791.doc ALSI S25 SQL Avancé et administration d’un SGBD Relationnel STS2 IG Application à SQL Server 6.5 Le 16/04/17 page 86 Si votre ordinateur serveur ne fait pas partie d'un domaine, donnez au Domaine par Défaut le nom de l'ordinateur serveur. Ce paramètre n'est pas utilisé en mode standard, sauf pour les applications clientes qui requièrent explicitement une connexion approuvée. ALSI / S25 SGBD R Support de Cours 2TSIG D:\582659791.doc ALSI S25 SQL Avancé et administration d’un SGBD Relationnel STS2 IG Application à SQL Server 6.5 Le 16/04/17 page 87 13.2.8 Modifier le nom d'hôte en nom d'utilisateur Détermine si le nom d'hôte de l'enregistrement de la connexion cliente est remplacé par le nom d'utilisateur réseau Windows NT pour les utilisateurs sous connexions approuvées. Si cette option est sélectionnée, le nom d'utilisateur réseau apparaîtra, par exemple, dans la sortie de la procédure système sp_who. Par défaut, cette option ne fait pas la substitution. 13.2.9 Niveau d'audit Les tentatives d'accès effectuées par les utilisateurs peuvent être enregistrées avec les autres informations du journal de SQL Server. L'audit peut être activé pour les trois modes de sécurité; il permet d'enregistrer des informations à la fois sur les connexions approuvées et non-approuvées. Vous pouvez choisir de ne pas effectuer l'audit (valeur par défaut), ou d'enregistrer les tentatives d'accès réussies, les tentatives d'accès infructueuses, ou même les deux à la fois. L'enregistrement de ces événements apparaît dans le journal des événements de Windows NT ou dans le journal des erreurs de SQL Server, ou dans ces deux programmes, selon la façon dont vous avez configuré la consignation de ces événements pour votre serveur SQL. Pour plus d'informations sur la configuration des opérations de consignation d'événements dans SQL Server, consultez le chapitre 3, Configuration des serveurs. 13.2.10 13.2.11 Mappage Les noms d'utilisateur de Windows NT comprennent certains caractères qui ne sont pas valides dans les noms d'accès SQL Server (comme par exemple, les tirets, les espaces et le point). Lorsque vous utilisez des options de sécurité intégrées ou les connexions approuvées requises par le client, les mappages vous permettent d'indiquer comment traiter ces caractères dans SQL Server. Par exemple, le nom d'utilisateur Windows NT t-Jacques, qui ne serait pas valide par SQL Server, peut être mappé sur t_Jacques en mappant le signe souligné (_) de SQL Server sur le tiret (-) de Windows NT. Les caractères de mappage admis sont le séparateur de domaine (\), l'espace ( ), le tiret (), le point (.), le guillemet simple ('), le point d'exclamation (!), l'arrobas (@), le signe de pourcentage (%), le signe d'insertion (^), le et commercial (&), et la valeur «inutilisé» (qui indique qu'il n'y a pas de mappage). SQL Server vous laisse la possibilité de mapper des caractères spéciaux sur le signe souligné (_), le signe dièse (#), ou le signe dollar ($), de la façon suivante : Map _ Détermine quel caractère de Windows NT sera mappé sur le caractère souligné (_) valide dans SQL Server. La valeur par défaut est le séparateur de domaine (\). Map # Détermine quel caractère de Windows NT sera mappé sur le caractère dièse (#) valide dans SQL Server. La valeur par défaut est le tiret (-). Map $ Détermine quel caractère de Windows NT sera mappé sur le caractère dollar ($) valide dans SQL Server. La valeur par défaut est l'espace ( ). Lorsqu'un serveur est configuré de façon à fonctionner en mode sécurité intégrée ou mixte, après avoir défini ses options de sécurité, vous créerez les groupes et utilisateurs Windows NT qui seront autorisés à accéder à ce serveur SQL, puis leur affecterez les droits d'accès appropriés à ce serveur. Pour gérer les groupes et utilisateurs Windows NT, utilisez le Gestionnaire des utilisateurs Windows NT. Affectez-leur des droits d'accès à SQL Server en utilisant le Gestionnaire de sécurité SQL. Pour bénéficier de la sécurité mixte ou intégrée dans SQL Server, vous devez d'abord créer les groupes et utilisateurs Windows NT qui seront autorisés à se connecter à SQL Server. Le Gestionnaire des utilisateurs, inclus dans le logiciel du système d'exploitation Windows NT, est l'outil qui vous permet de réaliser cette opération. Lancez le Gestionnaire des utilisateurs en sélectionnant son icône dans le groupe de programmes Outils d'administration. Pour plus de précisions sur l'utilisation de cet outil, consultez l'Aide en ligne du gestionnaire des utilisateurs. Si vous n'avez pas accès à ce gestionnaire, demandez à un Administrateur Windows NT de le faire à votre place. ALSI / S25 SGBD R Support de Cours 2TSIG D:\582659791.doc ALSI S25 SQL Avancé et administration d’un SGBD Relationnel STS2 IG Application à SQL Server 6.5 Le 16/04/17 page 88 Un groupe d'Administrateurs est créé dès l'installation du système d'exploitation Windows NT. Quand SQL Server est installé, tous les utilisateurs de ce groupe d'Administrateurs reçoivent des privilèges d'administrateurs système (SA) sur le serveur SQL. La procédure recommandée pour établir la sécurité intégrée de SQL Server consiste à créer deux groupes définis localement pour accéder à SQL Server. Vous avez, par exemple, la possibilité d'utiliser le Gestionnaire des utilisateurs pour créer un groupe local que vous nommez UtilisateursSQL, et auquel vous accordez des privilèges de niveau utilisateur, ainsi qu'un second groupe que vous nommez AdminSQL et auquel vous accordez des privilèges d'administrateur système. Vous pouvez ensuite affecter de nouveaux utilisateurs individuels à ces groupes. Les membres des groupes locaux peuvent être des utilisateurs définis localement, des utilisateurs définis dans le domaine, ou des groupes globaux définis dans le domaine. Si vous utilisez la sécurité appliquée au domaine, vous souhaiterez certainement ajouter les noms d'utilisateurs définis dans le domaine, afin d'éviter de devoir gérer un jeu séparé de comptes Windows NT sur l'ordinateur Windows NT qui exécute SQL Server. Les indications suivantes vous permettront de configurer des comptes à l'aide du Gestionnaire des utilisateurs Windows NT, sans que cela ne pose de problèmes. Ces comptes pourront ensuite être mappés sur les noms d'accès SQL Server : Lorsque vous créez des noms pour les groupes et utilisateurs Windows NT, il est conseillé de n'utiliser que des identificateurs valides dans SQL Server. N'employez ni l'espace, ni le point, ni tout autre caractère que Windows NT accepte mais que SQL Server ne reconnaît pas, et limitez la taille du nom de groupe à 30 caractères maximum. De plus, n'introduisez pas le souligné (_), le signe dollar ($), ou le signe dièse (#) dans les noms de groupe ou d'utilisateur car SQL Server utilise ces caractères comme caractères spéciaux de mappage. Evitez de placer les utilisateurs Windows NT dans plus d'un groupe Windows NT ayant un droit d'accès à SQL Server, car SQL Server ne permet pas aux utilisateurs d'appartenir à des groupes qui se chevauchent au sein des bases de données. En veillant à maintenir vos utilisateurs Windows NT dans un groupe unique bénéficiant du privilège d'accès à SQL Server, vous pourrez utiliser le Gestionnaire de sécurité SQL pour conserver la cohérence entre les groupes d'utilisateurs de base de données et les groupes Windows NT. Créez un groupe de niveau administrateur et un ou plusieurs groupe(s) de niveau utilisateur pour les comptes qui auront accès à SQL Server. Les groupes doivent correspondre aux niveaux de sécurité que vous voulez accorder à vos bases de données SQL Server (par exemple, SaisieCommandes et CadresSaisieCommandes). Si vous désirez que vos administrateurs Windows NT soient les mêmes que vos administrateurs système dans SQL Server, vous ne devrez pas modifier les permissions par défaut créées par le programme d'installation. Cependant, vous pouvez créer un groupe administrateurs indépendant de SQL Server et lui accorder des privilèges administratifs à la fois sur Windows NT et sur SQL Server. Après avoir créé un groupe distinct d'administrateurs pour les administrateurs système de SQL Server, vous pourrez révoquer les privilèges au groupe d'administrateurs Windows NT. Le Gestionnaire de sécurité SQL présente une interface graphique vous permettant de mapper les groupes et utilisateurs Windows NT sur les noms d'accès de SQL Server pour la sécurité mixte ou intégrée. (Si vous utilisez la sécurité standard, employez SQL Enterprise Manager pour configurer les noms d'accès.) Le Gestionnaire de sécurité SQL vous permet également d'accorder ou de révoquer des privilèges SQL Server aux groupes Windows NT, en définissant des mots de passe et des noms d'accès SQL Server pour le groupe ou en ajoutant des utilisateurs aux bases de données SQL Server, par exemple. En outre, vous pouvez utiliser le Gestionnaire de sécurité SQL pour rechercher les permissions d'accès SQL Server accordées à un compte Windows NT donné. Avant de pouvoir gérer les comptes à sécurité intégrée, vous devez lancer le Gestionnaire de sécurité SQL et vous connecter à un serveur SQL. Pour lancer le Gestionnaire de sécurité SQL et vous connecter à un serveur SQL 1. Server 6.0. ALSI / S25 Choisissez l'icône Gestionnaire de sécurité SQL dans le groupe de programmes de Microsoft SQL SGBD R Support de Cours 2TSIG D:\582659791.doc ALSI S25 SQL Avancé et administration d’un SGBD Relationnel STS2 IG Application à SQL Server 6.5 Le 16/04/17 page 89 Le Gestionnaire de sécurité SQL démarre et la boîte de dialogue Connexion à un serveur apparaît. 2. Entrez ou sélectionnez le nom du serveur dont vous voulez gérer la sécurité intégrée dans la zone «Serveur». Cette zone «Serveur» contient la liste des cinq derniers serveurs ayant fait l'objet d'une connexion. Pour consulter la liste des serveurs du réseau, choisissez le bouton «Liste de serveurs». 3. Entrez votre nom d'accès dans la zone «Nom d'accès». Saisissez ensuite votre mot de passe dans la zone «Mot de passe». Pour les connexions avec sécurité intégrée, vous n'êtes pas obligé de fournir un nom d'accès ou un mot de passe. 4. Sélectionnez le bouton «Connecter». La fenêtre du Gestionnaire de sécurité SQL s'ouvre et le gestionnaire de sécurité se connecte au serveur. Lorsque vous accordez des privilèges à un groupe Windows NT, vous autorisez l'accès à SQL Server à chaque membre de ce groupe. Vous pouvez accorder soit un privilège utilisateur, soit un privilège administrateur système. ALSI / S25 SGBD R Support de Cours 2TSIG D:\582659791.doc ALSI S25 SQL Avancé et administration d’un SGBD Relationnel STS2 IG Application à SQL Server 6.5 Le 16/04/17 page 90 13.2.12 Pour accorder un privilège utilisateur 1. Choisissez le bouton «Privilège utilisateur». Ou sélectionnez l'option «Privilège utilisateur» dans le menu Affichage . 2. Sélectionnez Accorder nouveau dans le menu Sécurité. La boîte de dialogue Accord du privilège utilisateur apparaît. 3. Dans la zone «Accord de privilège», sélectionnez le groupe qui aura accès à SQL Server. Choisissez «Groupes locaux» pour visualiser tous les groupes locaux sur l'ordinateur Windows NT, et «Groupes du domaine par défaut» pour visualiser tous les groupes du domaine par défaut. La zone «Ajout d'un nom d'accès pour les membres du groupe» est activée, pour spécifier que vous voulez créer un nom d'accès à SQL Server pour chaque utilisateur de ce groupe. 4. Si vous ne souhaitez pas affecter un nom d'accès SQL Server individuel à chaque membre du groupe, désactivez la case à cocher «Ajout d'un nom d'accès pour les membres du groupe». Si vous n'attribuez pas un nom d'accès individuel à chaque utilisateur, ils ne pourront accéder à SQL Server qu'en utilisant le nom d'accès par défaut (habituellement invités). Sil s'agit de la configuration de sécurité pour laquelle vous avez opté, assurez-vous de bien avoir spécifié un nom d'accès par défaut lorsque vous avez défini les options de sécurité à l'aide de SQL Enterprise Manager. 5. Pour ajouter les utilisateurs du groupe à une base de données, et en faire leur base de données par défaut lorsqu'ils se connectent à SQL Server, activez la case «Ajout d'utilisateurs à la base de données», puis choisissez la base de données dans la liste proposée. Le Gestionnaire de sécurité SQL tentera de créer, dans la base de données, un groupe SQL Server qui corresponde au nom du groupe Windows NT et il y inclura tous les nouveaux utilisateurs de la base de données. Il est recommandé d'affecter les utilisateurs à une base de données par défaut autre que master, afin de les empêcher de créer des objets de base de données dans master. Si vous n'associez pas les utilisateurs à une base de données par défaut, master deviendra leur base de données par défaut. 6. Choisissez le bouton «Accorder». 13.2.13 Pour accorder un privilège administrateur système 1. Choisissez le bouton «Privilège SA» ou sélectionnez Privilège administrateur système dans le menu Affichage. ALSI / S25 SGBD R Support de Cours 2TSIG D:\582659791.doc ALSI S25 SQL Avancé et administration d’un SGBD Relationnel STS2 IG Application à SQL Server 6.5 Le 16/04/17 page 91 2. Sélectionnez Accorder nouveau dans le menu Sécurité, La boîte de dialogue Accord du privilège d'administrateur système (sa) apparaît. 3. Sélectionnez le groupe qui aura accès à SQL Server dans la zone «Accord de privilège», Choisissez «Groupes locaux» pour visualiser tous les groupes locaux sur l'ordinateur Windows NT, et «Groupes du domaine par défaut» pour visualiser tous les groupes du domaine par défaut. Remarquez que lorsque vous accordez un privilège administrateur système, les zones «Ajout d'un nom d'accès pour les membres du groupe» et «Ajout d'utilisateurs à la base de données» apparaissent comme estompées. La raison en est simple : quand vous accordez un privilège d'accès administrateur système à SQL Server à un groupe, les utilisateurs de ce groupe sont automatiquement mappés sur le nom d'accès SA, et master est définie comme base de données par défaut. ALSI / S25 SGBD R Support de Cours 2TSIG D:\582659791.doc ALSI S25 SQL Avancé et administration d’un SGBD Relationnel STS2 IG Application à SQL Server 6.5 4. Le 16/04/17 page 92 Choisissez le bouton «Accorder». Remarque Si vous accordez une permission au groupe Utilisateurs de domaine sur le domaine par défaut, vous verrez s'afficher, en guise de membres du domaine, tous les comptes d'ordinateur Windows NT (se terminant par un $), ainsi que tous les comptes utilisateur définis pour le domaine. Comme les comptes d'ordinateur n'ont pas besoin de permissions SQL Server pour se connecter, il est préférable de créer un groupe séparé dans le domaine, contenant seulement les comptes utilisateur valides, et de lui accorder ensuite une permission. Lorsque vous ouvrez le Gestionnaire de sécurité SQL, une arborescence des groupes ajoutés à SQL Server s'affiche. Vous pouvez visualiser la liste des utilisateurs jouissant d'un privilège utilisateur. Pour visualiser les utilisateurs dotés d'un privilège utilisateur 1. Choisissez le bouton «Privilège utilisateur» ou sélectionnez Privilège utilisateur dans le menu Affichage. 2. Les groupes bénéficiant d'un privilège utilisateur s'affichent. Pour visualiser la liste des utilisateurs appartenant à un groupe, cliquez deux fois sur le nom du groupe. 3. Cliquez à nouveau deux fois sur le nom du groupe pour faire disparaître une liste de noms d'utilisa- teur. Vous pouvez obtenir des détails sur un groupe ou un utilisateur inscrit dans un groupe. Pour un utilisateur individuel, vous pouvez ajouter un nom d'accès qui correspond à son nom d'utilisateur mappé, ou supprimer ce nom d'accès correspondant s'il en existe déjà un. Vous pouvez également ajouter ou supprimer un utilisateur d'une base de données ou modifier la base de données par défaut. Pour un compte de groupe donné, ces mêmes actions s'appliquent à tous les membres du groupe. Par exemple, vous pouvez mettre à jour les noms d'accès d'un groupe pour ajouter des noms d'accès correspondant aux noms d'utilisateur mappés des membres du groupe, à condition que ce nom d'accès n'existe pas encore. ALSI / S25 SGBD R Support de Cours 2TSIG D:\582659791.doc ALSI S25 SQL Avancé et administration d’un SGBD Relationnel STS2 IG Application à SQL Server 6.5 Le 16/04/17 page 93 13.2.14 Pour visualiser les détails d'un compte utilisateur 1. Choisissez le bouton «Privilège utilisateur» ou sélectionnez Privilège utilisateur dans le menu Affichage. 2. Cliquez deux fois sur le nom du groupe qui contient l'utilisateur à propos duquel vous voulez obtenir des informations. La liste des utilisateurs appartenant à ce groupe s'affiche à l'écran. 3. Sélectionnez l'utilisateur de votre choix, puis choisissez Détail de compte dans le menu Sécurité. Ou bien cliquez deux fois sur le nom de l'utilisateur. La boîte de dialogue Détail de compte apparaît. Le nom de compte Windows NT de l'utilisateur s'affiche, ainsi que le nom d'utilisateur mappé de celui-ci. 4. 5. ALSI / S25 Modifiez les informations de compte, selon vos besoins. Choisissez le bouton «Fermer». SGBD R Support de Cours 2TSIG D:\582659791.doc ALSI S25 SQL Avancé et administration d’un SGBD Relationnel STS2 IG Application à SQL Server 6.5 Le 16/04/17 page 94 13.2.15 Pour visualiser les détails d'un groupe 1. Choisissez le bouton «Privilège utilisateur» ou sélectionnez Privilège utilisateur dans le menu Affichage. Les groupes jouissant d'un privilège utilisateur s'affichent. 2. Sélectionnez un groupe, puis choisissez Détail de compte dans le menu Sécurité. Ou bien appuyez sur la touche CTRL et cliquez deux fois sur le nom du groupe . La boîte de dialogue Détail de compte apparaît. Les informations de compte Windows NT du groupe s'affichent à l'écran, ainsi que le nom mappé du Serveur SQL du groupe. 3. 4. Modifiez les informations de compte selon vos besoins. Choisissez le bouton «Fermer». Lorsque vous révoquez des privilèges, tous les utilisateurs du groupe auquel vous révoquez les permissions sont supprimés des bases de données SQL Server, et leurs noms d'accès sont éliminés de SQL Server. 13.2.16 Pour révoquer des privilèges 1. Choisissez le bouton «Privilège utilisateur» ou le bouton «Privilège SA». Ou bien choisissez Privilège utilisateur ou Privilège administrateur système dans le menu Affichage. Tous les groupes dotés de ce privilège s'affichent à l'écran. 2. Choisissez le nom du groupe dont vous voulez révoquer le privilège. 3. Choisissez Révoquer dans le menu Sécurité. Un message apparaît, vous demandant de confirmer. 4. Choisissez «Oui». ALSI / S25 SGBD R Support de Cours 2TSIG D:\582659791.doc ALSI S25 SQL Avancé et administration d’un SGBD Relationnel STS2 IG Application à SQL Server 6.5 Le 16/04/17 page 95 Si vous voulez refuser un accès SQL Server à un membre d'un groupe bénéficiant d'un privilège SQL Server, utilisez le Gestionnaire des utilisateurs pour supprimer cet utilisateur du groupe. Le nom d'accès SQL Server et tous les noms d'utilisateur de base de données associés à ce compte Windows NT seront conservés dans SQL Server mais deviendront inaccessibles à cet utilisateur. Vous pouvez, périodiquement, éliminer ces noms d'accès et d'utilisateur en faisant appel à l'option «Trouver les noms d'accès SQL orphelins» dans la boîte de dialogue Recherche d'informations sur un compte. Il vous est possible d'afficher des informations sur les comptes de chaque utilisateur individuel. Ces informations comprennent les chemins de permission d'un compte utilisateur donné. Un chemin de permission indique comment un compte utilisateur est autorisé à accéder à SQL Server (par exemple, en faisant partie d'un groupe local à qui le privilège utilisateur a été accordé). Un compte utilisateur donné peut appartenir à plusieurs groupes auxquels un privilège utilisateur ou SA a été accordé. Quand un utilisateur qui présente ces caractéristiques se connecte, SQL Server permet au compte d'accéder au serveur via un chemin de permission qui lui donne le privilège d'accès maximal. Si vous souhaitez supprimer un compte utilisateur Windows NT donné de tous les groupes qui ont accès à SQL Server, vous pouvez faire appel à l'option qui permet de répertorier tous les chemins de permission de l'utilisateur en question. Exécutez ensuite l'application Gestionnaire des utilisateurs pour supprimer le compte utilisateur de tous ces groupes. Vous pouvez également visualiser les noms d'accès SQL Server des utilisateurs qui existent dans SQL Server mais qui n'existent plus dans aucun groupe Windows NT doté d'une permission d'accès. 13.2.17 Pour rechercher des informations de compte sur un utilisateur 1. Choisissez Rechercher dans le menu Sécurité. La boîte de dialogue Recherche d'informations sur un compte apparaît. 2. Entrez le nom d'un utilisateur dans la zone «Compte». 3. Choisissez le type de recherche approprié : Activez la case «Vérifier les permissions du compte» pour connaître le chemin de permission maximal affecté à ce compte. Activez la case «Trouver toutes les permissions du compte» pour connaître tous les chemins de permissions que ce compte utilise pour accéder à SQL Server. 4. ALSI / S25 Choisissez le bouton «Rechercher». SGBD R Support de Cours 2TSIG D:\582659791.doc ALSI S25 SQL Avancé et administration d’un SGBD Relationnel STS2 IG Application à SQL Server 6.5 Le 16/04/17 page 96 Les résultats de cette opération s'affichent à l'écran en indiquant le nom complet du compte, la permission SQL Server maximale accordée à l'utilisateur, et les chemins de permissions par lesquels l'utilisateur peut accéder à SQL Server. 5. Choisissez le bouton «Annuler». 13.2.18 Pour rechercher les noms d'accès SQL Server qui n'ont pas de comptes Windows NT correspondants 1. Choisissez Rechercher dans le menu Sécurité. La boîte de dialogue Recherche d'informations sur un compte apparaît. 2. Activez la case «Trouver les noms d'accès SQL orphelins». 3. Choisissez le bouton «Rechercher». Les résultats de la recherche s'affichent à l'écran. 4. Choisissez le bouton «Supprimer» pour éliminer les noms d'accès SQL Server (autres que sa, probe, repl_publisher, ou repl_subscriber) qui ne correspondent à aucun utilisateur Windows NT dotés de permissions valides. 5. Choisissez le bouton «Annuler». 13.2.19 9.2.2 Définir les utilisateurs Avant qu'un utilisateur puisse exploiter une base de données, il vous faudra, dans cette base de données, attribuer un nom d'utilisateur à son nom d'accès. Le nom d'utilisateur peut être le nom d'accès de l'utilisateur, ou le nom d'utilisateur d'un autre utilisateur de la base de données (ou alias). Si vous affectez un utilisateur à une base de données à l'aide d'un alias, il ne pourra utiliser aucun autre nom d'utilisateur pour accéder à la base de données. Lorsque vous ajoutez un utilisateur à une base de données, vous pouvez également spécifier le nom de son groupe. Par défaut, les nouveaux utilisateurs sont placés dans le groupe intégré public. Les utilisateurs peuvent être ajoutés à un autre groupe. Les utilisateurs autorisés à se connecter à une base de données doivent ensuite obtenir la permission d'y effectuer des opérations. Pour plus d'informations concernant la configuration des permissions, consultez Gestion des permissions objet et Gestion des permissions instruction. ALSI / S25 SGBD R Support de Cours 2TSIG D:\582659791.doc ALSI S25 SQL Avancé et administration d’un SGBD Relationnel STS2 IG Application à SQL Server 6.5 Le 16/04/17 page 97 Un groupe de base de données est un ensemble d'utilisateurs de base de données. La formation de groupes vous permet de simplifier la gestion d'un grand nombre d'utilisateurs de base de données. Elle constitue un moyen très pratique d'accorder ou de révoquer des permissions à tout un ensemble d'utilisateurs en même temps. Tout nouvel utilisateur est ajouté par défaut au groupe public intégré. Chaque utilisateur peut être membre d'un autre groupe en plus du groupe public. Vous pouvez créer des groupes à tout moment. Créez des groupes avant d'ajouter des utilisateurs à une base de données. Si vous utilisez la sécurité intégrée et si vous avez créé des groupes à l'aide de Windows NT, ces groupes ne seront pas automatiquement liés aux groupes de base de données. Si vous voulez que tous les membres d'un groupe Windows NT soient affectés à un groupe de base de données, vous devrez tout d'abord attribuer un nom d'accès explicite à chaque utilisateur du groupe, puis ajouter tous ces noms d'accès en tant qu'utilisateurs dans la base de données; enfin, vous devrez affecter ces utilisateurs au groupe de base de données que vous créez. Le Gestionnaire de sécurité SQL peut créer automatiquement des noms d'accès et un groupe SQL Server pour un groupe Windows NT sélectionné. 13.2.20 13.2.21 Ajouter un groupe à une base de données 1. A l'aide de SQL Enterprise Manager, sélectionnez un serveur dans la fenêtre Gestionnaire de serveurs, puis ouvrez le dossier Bases de données de ce serveur. La liste des bases de données de ce serveur s'affiche. 2. Sélectionnez une base de données, puis choisissez Groupes dans le menu Gérer. Ou bien, ouvrez l'arborescence de cette base de données (choisissez le bouton «» ), utilisez le bouton droit de la souris pour choisir le dossier Groupes/utilisateurs, et choisissez Nouveau Groupe dans le menu contextuel qui apparaît. La boîte de dialogue Gestion de groupes apparaît pour la base de données sélectionnée. 3. Entrez le nom du groupe dans la zone «Groupe». Si la zone «Groupe» comporte déjà un nom, choisissez «Nouveau Groupe» dans la liste, puis entrez le nom du groupe. Le nom de groupe peut comporter un maximum de 30 caractères et doit être unique dans la base de données. Les caractères peuvent être alphanumériques, mais le premier caractère doit obligatoirement être une lettre, le signe dièse (#) ou le signe (_) (par exemple, DATAOPS ou OPERS8). ALSI / S25 SGBD R Support de Cours 2TSIG D:\582659791.doc ALSI S25 SQL Avancé et administration d’un SGBD Relationnel STS2 IG Application à SQL Server 6.5 Le 16/04/17 page 98 4. En option, sélectionnez l'utilisateur à ajouter au groupe dans la liste Utilisateurs, puis choisissez le bouton «Ajouter» dans le cadre Utilisateurs de base de données. Le nom d'utilisateur passe dans la liste Membres. Répétez l'opération pour chaque utilisateur que vous souhaitez ajouter au groupe. 5. Choisissez le bouton «Ajouter» à droite de la zone «Groupe». Le groupe est ainsi ajouté à la base de données. Avant qu'un utilisateur puisse utiliser une base de données, vous devez définir un nom d'utilisateur pour le nom d'accès de cet utilisateur dans la base de données. Les possibilités offertes aux utilisateurs de la base de données dépendent des permissions accordées au nom d'utilisateur (et à tous les groupes dont l'utilisateur fait partie). Vous n'aurez peut-être pas besoin de recourir à la procédure suivante pour ajouter des utilisateurs à la base de données. En effet, lorsque vous ajoutez un nom d'accès à SQL Server, vous disposez d'une option vous permettant de choisir d'ajouter, pour chaque nom d'accès, un nom d'utilisateur dans chaque base de données. Vous pouvez également employer la procédure qui suit pour ajouter l'utilisateur invités à une base de données, ou pour ajouter un utilisateur au nom d'accès par défaut. 13.2.22 Ajouter un utilisateur à une base de données 1. A l'aide de SQL Enterprise Manager, sélectionnez un serveur dans la fenêtre Gestionnaire de serveurs, puis ouvrez le dossier Bases de données de ce serveur. La liste des bases de données du serveur s'affiche à l'écran. 2. Sélectionnez une base de données, puis choisissez Utilisateurs dans le menu Gérer. Ou bien, ouvrez l'arborescence de cette base de données (choisissez le bouton «» ), puis choisissez le dossier Groupes/Utilisateurs avec le bouton droit de la souris; choisissez enfin Nouvel Utilisateur dans le menu contextuel qui apparaît. La boîte de dialogue Gestion des utilisateurs apparaît. 3. Entrez un nom d'utilisateur dans la zone «Nom d'utilisateur». Il peut être identique au nom d'accès. Si la zone «Nom d'utilisateur» n'est pas vide, choisissez <Nouvel utilisateur> dans la liste, puis saisissez le nom d'utilisateur. Le nom d'utilisateur peut comporter un maximum de 30 caractères et doit être unique dans la base de données. Les caractères peuvent être alphanumériques, mais le premier caractère doit obligatoirement être une lettre, le signe dièse (#) ou le signe (_) (par exemple, CEDRIC ou UTILISATEUR8). Si vous ne saisissez aucun nom d'utilisateur, le nom d'utilisateur sera identique au nom d'accès. ALSI / S25 SGBD R Support de Cours 2TSIG D:\582659791.doc ALSI S25 SQL Avancé et administration d’un SGBD Relationnel STS2 IG Application à SQL Server 6.5 Le 16/04/17 page 99 4. Dans la liste de la zone «Connexion», sélectionnez le nom d'accès auquel vous voulez affecter un nom d'utilisateur de base de données. 5. En option, pour ajouter l'utilisateur à un groupe, sélectionnez un groupe dans la liste de la zone «Groupe». Tous les utilisateurs font automatiquement partie du groupe public. Si vous le souhaitez, vous pouvez ajouter l'utilisateur à un deuxième groupe. 6. Choisissez le bouton «Ajouter». L'utilisateur s'ajoute à la base de données et le bouton «Ajouter» est remplacé par le bouton «Modifier». 7. Il vous est possible, en option, de créer un alias pour l'utilisateur. A cet effet, sélectionnez un alias dans la liste Connexions disponibles, choisissez «Ajouter», puis «Modifier». ALSI / S25 SGBD R Support de Cours 2TSIG D:\582659791.doc ALSI S25 SQL Avancé et administration d’un SGBD Relationnel STS2 IG Application à SQL Server 6.5 Le 16/04/17 page 100 13.2.23 Gérer l'adhésion d'un utilisateur à un groupe Après avoir créé un groupe, vous pouvez, à tout moment, y ajouter de nouveaux utilisateurs. Dans chaque base de données, chaque utilisateur ne peut appartenir qu'à un seul groupe en plus du groupe public. Vous pouvez supprimer les utilisateurs de n'importe quel groupe (sauf du groupe public) à tout moment. Vous ne pouvez supprimer aucun utilisateur du groupe public. Pour gérer l'adhésion d'un utilisateur à un groupe 1. Sélectionnez un serveur dans la fenêtre Gestionnaire de serveurs, puis ouvrez le dossier Bases de données. La liste des bases de données de ce serveur s'affiche à l'écran. 2. Sélectionnez une base de données et ouvrez le dossier Groupes/Utilisateurs de cette base de don- nées. Les groupes et utilisateurs de cette base de données s'affichent. 3. Cliquez deux fois sur un groupe. Ou bien, utilisez le bouton droit de la souris pour choisir le nom du groupe, puis choisissez Edition dans le menu contextuel qui apparaît. La boîte de dialogue Gestion de Groupes apparaît; elle contient des informations sur ce groupe. 4. Pour ajouter un utilisateur à ce groupe, sélectionnez le nom d'utilisateur à ajouter dans la liste Utilisateurs, puis choisissez le bouton «Ajouter». Le nom d'utilisateur s'ajoute à la liste Membres. 5. Pour supprimer un utilisateur du groupe, sélectionnez le nom d'utilisateur à supprimer dans la liste Membres, puis choisissez le bouton «Supprimer». Le nom d'utilisateur passe ainsi dans la liste Utilisateurs. 6. ALSI / S25 Choisissez le bouton «Modifier». SGBD R Support de Cours 2TSIG D:\582659791.doc ALSI S25 SQL Avancé et administration d’un SGBD Relationnel STS2 IG Application à SQL Server 6.5 Le 16/04/17 page 101 13.2.24 Supprimer un utilisateur d'une base de données En supprimant un utilisateur vous l'éliminez de la base de données concernée. Vous ne pouvez supprimer les utilisateurs qui possèdent des objets. Etant donné qu'il n'existe pas de commande permettant de transférer la propriété des objets, vous devez supprimer les objets avant de pouvoir supprimer le nom d'utilisateur. Pour refuser l'accès à un utilisateur propriétaire d'objets, vous pouvez changer son mot de passe SQL Server. Pour supprimer un utilisateur d'une base de données 1. Sélectionnez un serveur dans la fenêtre Gestionnaire de serveurs, puis ouvrez le dossier Bases de données de ce serveur. La liste des bases de données de ce serveur s'affiche à l'écran. 2. Sélectionnez une base de données et ouvrez le dossier Groupes/Utilisateurs. La liste des groupes et utilisateurs de cette base de données s'affiche. 3. Sélectionnez un nom d'utilisateur, et appuyez sur la touche SUPPR. Vous pouvez également utiliser le bouton droit de la souris pour choisir le nom d'utilisateur, puis choisir Supprimer dans le menu contextuel qui apparaît. Le nom d'utilisateur est ainsi éliminé de la liste et l'utilisateur ne peut plus avoir accès à la base de données. 13.2.25 Supprimer un groupe d'une base de données Lorsque vous supprimez un groupe, tous les utilisateurs de ce groupe sont automatiquement éliminés de ce groupe. Les utilisateurs appartenant à ce groupe supprimé restent cependant utilisateurs de la base de données et demeurent membres du groupe public. Pour supprimer un groupe d'une base de données 1. Sélectionnez un serveur dans la fenêtre Gestionnaire de serveurs, puis ouvrez le dossier Bases de données de ce serveur. La liste des bases de données de ce serveur s'affiche à l'écran. 2. Sélectionnez une base de données et ouvrez le dossier Groupes/Utilisateurs de cette base de don- nées. La liste des groupes et utilisateurs de cette base de données s'affiche. 3. Sélectionnez un groupe, et appuyez sur la touche SUPPR. Vous pouvez également utiliser le bouton droit de la souris pour choisir le nom du groupe, puis choisir Supprimer dans le menu contextuel qui apparaît. Le groupe est ainsi supprimé de la liste. 13.2.26 9.2.3 Gérer les permissions objet Les permissions objet contrôlent l'utilisation de certaines instructions sur certains objets de base de données. C'est le propriétaire de l'objet qui les accorde et les révoque. Les permissions objet s'appliquent aux instructions et objets suivants : Instruction SELECT UPDATE INSERT DELETE REFERENCE EXECUTE Objet Table, vue, colonnes Table, vue, colonnes Table, vue Table, vue Table Procédure stockée Dans SQL Server 6.0, la permission REFERENCE assure la compatibilité ANSI pour les contraintes référentielles. Elle permet de créer des références à une table donnée sans avoir de permission SELECT sur cette table. ALSI / S25 SGBD R Support de Cours 2TSIG D:\582659791.doc ALSI S25 SQL Avancé et administration d’un SGBD Relationnel STS2 IG Application à SQL Server 6.5 Le 16/04/17 page 102 Cette permission est vérifiée lors de la création de la référence ainsi qu'au moment de l'exécution. Lorsque la référence est vérifiée, l'utilisateur qui crée la table doit avoir soit la permission SELECT, soit la permission REFERENCE sur toutes les tables référencées. (Créer une référence à une table suppose que la table référencée dispose de permissions qui permet de vérifier toutes les références renvoyées à la table dans l'instruction CREATE). Dans l'interface du gestionnaire SQL Enterprise Manager, la permission REFERENCE est mentionnée sous le terme «DRI». SQL Enterprise Manager vous permet d'administrer les permissions objet par utilisateur (c'est à dire les permissions objet accordées à un utilisateur ou à un groupe), ou par objet (autrement dit, les utilisateurs ou les groupes disposant de permissions pour cet objet). Seul l'administrateur système (SA) ou le propriétaire d'une base de données (DBO) peut administrer les permissions objet. L'administrateur système ou le propriétaire d'une base de données peut accorder des permissions instruction permettant aux groupes ou à des utilisateurs individuels d'effectuer les tâches suivantes sur des bases de données : création d'une base de données ; création de règles et de valeurs par défaut sur une base de données ; création de tables et de vues sur une base de données ; création de procédures stockées ; sauvegarde de la base de données ; Chaque base de données possède son propre système de permissions indépendant. Les autres bases de données ne seront nullement influencées par l'accord d'une permission d'utiliser telle instruction dans telle base de données. Seul un administrateur système (SA) ou un propriétaire de base de données (DBO) est habilité à gérer des permissions instruction. Pour gérez les permissions instruction, sélectionnez ou désélectionnez les cases à cocher correspondantes. Indicateur de case à cocher Signification Vide Pas de changement à la permission déjà acquise. Marque bleue Permission accordée. Marque rouge Permission révoquée (annule un accord donné). Marque verte Accord en attente. (La permission est accordée si vous choisissez le bouton «OK».) Cercle rouge barré Révocation en attente. (La permission est révoquée si vous choisissez le bouton «OK».) 13.2.27 Accorder ou révoquer des permissions instruction à un utilisateur ou à un groupe 1. Ouvrez la boîte de dialogue Edition de la base de données pour la base de données qui fera l'objet d'une gestion de permissions instruction. Pour ce faire, sélectionnez le nom du serveur dans la fenêtre Gestionnaire de serveurs, ouvrez le dossier Bases de données et cliquez deux fois sur la base de données concernée. La boîte de dialogue Edition de la base de données apparaît. 2. Choisissez l'onglet Permissions. La fenêtre Permissions apparaît. Les marques bleues apparaissant dans les cases à cocher indiquent les permissions existantes. ALSI / S25 SGBD R Support de Cours 2TSIG D:\582659791.doc ALSI S25 SQL Avancé et administration d’un SGBD Relationnel STS2 IG Application à SQL Server 6.5 Le 16/04/17 page 103 3. Pour accorder une permission, activez la case concernée. Une marque verte apparaît dans la case à cocher dès qu'une permission est sélectionnée, Remarque Si vous accordez une permission à un groupe, vous n'avez pas besoin de l'accorder individuellement à chaque utilisateur membre de ce groupe. 4. Pour supprimer une permission, désactivez la case à cocher concernée. Lorsque vous sélectionnez la révocation d'une permission, un cercle rouge barré apparaît sur la case à cocher concernée. 5. Choisissez «OK». Les permissions ne seront réellement accordées ou révoquées que lorsque vous aurez choisi «OK». Pour obtenir une description de chaque permission instruction, consultez la section Synthèse des permissions instruction. Vous trouverez ci-après une brève description de chaque permission instruction. Elles ne sont pas spécifiques aux objets. Elles ne peuvent être accordées que par un administrateur système (SA) ou un propriétaire de base de données (DBO) 13.2.27.1.1.1.1.1.1 Créer une BdD L'utilisateur peut créer une base de données. Cette permission ne peut être accordée que par un administrateur système (SA), et uniquement aux utilisateurs de la base de données master. 13.2.27.1.1.1.1.1.2 Créer une table L'utilisateur peut créer une table. 13.2.27.1.1.1.1.1.3 Créer une vue L'utilisateur peut créer une vue. 13.2.27.1.1.1.1.1.4 Créer une PS L'utilisateur peut créer une procédure stockée pour la base de données. 13.2.27.1.1.1.1.1.5 Créer un défaut L'utilisateur peut créer une valeur par défaut. (II s'agit d'une valeur que SQL Server insère dans une colonne si l'utilisateur n'en saisit pas une explicitement.) ALSI / S25 SGBD R Support de Cours 2TSIG D:\582659791.doc ALSI S25 SQL Avancé et administration d’un SGBD Relationnel STS2 IG Application à SQL Server 6.5 Le 16/04/17 page 104 13.2.27.1.1.1.1.1.6 Créer une règle L'utilisateur peut créer une règle. (Une règle détermine ce qu'un utilisateur peut entrer dans une colonne spécifiée, ou dans toute colonne dotée d'un certain type de données défini par l'utilisateur). 13.2.27.1.1.1.1.1.7 Sauvegarder une BdD L'utilisateur peut sauvegarder la base de données. 13.2.27.1.1.1.1.1.8 Sauvegarder une transaction L'utilisateur peut sauvegarder le journal des transactions. Vous pouvez modifier le propriétaire d'une base de données. Vous supprimerez ainsi les alias des utilisateurs disposant des mêmes prérogatives que l'ancien propriétaire (DBO) sur la base de données. Vous pouvez envisager de changer le propriétaire de la base de données,par exemple, à la création d'une nouvelle base de données dont vous voulez affecter les droits de propriété à un autre utilisateur. Le nouveau propriétaire ne doit pas encore être reconnu en tant qu'utilisateur dans la base de données, ni posséder un alias. Il sera peut être nécessaire de supprimer un utilisateur d'une base de données ou d'un alias avant de modifier le propriétaire d'une base de données. Vous devez vous placer dans la base de données dont vous voulez changer le propriétaire. 13.2.28 13.2.29 Modifier le propriétaire d'une base de données sp_changedbowner nom_d'accès [, true] nom_d'accès Nom du nouveau propriétaire de la base de données courante. Le nouveau propriétaire ne doit pas encore être reconnu en tant qu'utilisateur dans la base de données, ni posséder un alias dans cette base de données. true (vrai) Transfère les alias et leurs permissions au nouveau propriétaire de la base de données. Par exemple, pour que maried devienne propriétaire de la base de données courante, et pour supprimer les alias des utilisateurs disposant des mêmes prérogatives que l'ancien propriétaire (DBO) sur la base de données, entrez : sp_changedbowner maried Vous ne pouvez pas modifier le propriétaire de la base de données master. Pour plus d'informations sur la façon d'utiliser la procédure système sp_changedbowner, consultez le Manuel de référence Transact-SQL . ALSI / S25 SGBD R Support de Cours 2TSIG D:\582659791.doc