Configurer la supervision pour une base MS SQL Server Référence : 11588 Version N : 2.2 : Créé par : Téléphone : 0811 656 002
Sommaire 1. Création utilisateur MS SQL Server... 3 2. Configuration de l accès à la base sur VS BOX... 5 2.1. Sécurisation... 5 2.2. Accès aux bases... 5 3. Configuration... 6 4. Suppression de l utilisateur... 7 5. Installation du package FREETDS... 8 6. Compilation et configuration du module mssql_health... 9 Page 2
1. Création utilisateur MS SQL Server Créer l utilisateur sur la base MS SQL Server que vous souhaitez superviser. Cet utilisateur doit avoir le rôle serveradmin. Utiliser un utilisateur de domaine plutôt qu un utilisateur de type SA. Cet utilisateur et son mot de passe seront indiqués dans la configuration du service unitaire dans. Exécuter le script suivant sur l instance MS SQL Server que vous souhaitez superviser après l avoir édité: [Servername Domainname] = à remplacer par une adresse IP ou le domaine Windows Username = à remplacer par le nom de l utilisateur qui a accès à l instance SQL Password = à remplacer par le mot de passe de l utilisateur Rolename = à remplacer par serveradmin Ne pas omettre les double quotes. DECLARE @dbname VARCHAR(255) DECLARE @check_mssql_health_user VARCHAR(255) DECLARE @check_mssql_health_pass VARCHAR(255) DECLARE @check_mssql_health_role VARCHAR(255) DECLARE @SOURCE VARCHAR(255) DECLARE @options VARCHAR(255) DECLARE @backslash INT /*******************************************************************/ SET @check_mssql_health_user = '"[Servername Domainname]\Username"' SET @check_mssql_health_pass = 'Password' SET @check_mssql_health_role = 'Rolename' /******************************************************************* PLEASE CHANGE THE ABOVE VALUES ACCORDING TO YOUR REQUIREMENTS - Example for Windows authentication: SET @check_mssql_health_user = '"[Servername Domainname]\Username"' SET @check_mssql_health_role = 'Rolename' - Example for SQL Server authentication: SET @check_mssql_health_user = 'Username' SET @check_mssql_health_pass = 'Password' SET @check_mssql_health_role = 'Rolename'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! It is strongly recommended to use Windows authentication. Otherwise you will get no reliable results for database usage.!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Page 3
*********** NO NEED TO CHANGE ANYTHING BELOW THIS LINE *************/ SET @options = 'DEFAULT_DATABASE=MASTER, DEFAULT_LANGUAGE=English' SET @backslash = (SELECT CHARINDEX('\', @check_mssql_health_user)) IF @backslash > 0 BEGIN SET @source = ' FROM WINDOWS' SET @options = ' WITH ' + @options END ELSE BEGIN SET @source = '' SET @options = ' WITH PASSWORD=''' + @check_mssql_health_pass + ''',' + @options END PRINT 'CREATE Nagios plugin USER ' + @check_mssql_health_user EXEC ('CREATE LOGIN ' + @check_mssql_health_user + @source + @options) EXEC ('USE MASTER GRANT VIEW SERVER STATE TO ' + @check_mssql_health_user) PRINT 'USER ' + @check_mssql_health_user + ' created.' PRINT '' declare dblist cursor for select name from sysdatabases WHERE name NOT IN ('master', 'tempdb', 'msdb') open dblist fetch next from dblist into @dbname while @@fetch_status = 0 begin EXEC ('USE ' + @dbname + ' print ''GRANT permissions IN the db '' + ''"'' + DB_NAME() + ''"''') EXEC ('USE ' + @dbname + ' CREATE ROLE ' + EXEC ('USE ' + @dbname + ' GRANT EXECUTE TO ' + EXEC ('USE ' + @dbname + ' GRANT VIEW DATABASE STATE TO ' + EXEC ('USE ' + @dbname + ' GRANT VIEW DEFINITION TO ' + EXEC ('USE ' + @dbname + ' CREATE USER ' + @check_mssql_health_user + ' FOR LOGIN ' + @check_mssql_health_user) EXEC ('USE ' + @dbname + ' EXEC sp_addrolemember ' + @check_mssql_health_role + ', ' + @check_mssql_health_user) EXEC ('USE ' + @dbname + ' print ''Permissions IN the db '' + ''"'' + DB_NAME() + ''" GRANTED.''') fetch next from dblist into @dbname end close dblist deallocate dblist Page 4
2. Configuration de l accès à la base sur VS BOX Cette opération est effectuée par Coservit sur chaque Box en production, ou par le partenaire revendeur sur l offre. Editer le fichier /etc/freetds.conf. 2.1. Sécurisation [global] # TDS protocol version # tds version = 4.2 tds version = 8.0 2.2. Accès aux bases [NOM_INSTANCE] host = fqdn ou @IP port = port TCP/IP de l instance instance = nom de l instance (si plusieurs instances sont définies sur le même port) tds version = 8.0 Cette syntaxe permet d accéder à une instance de base de données particulière. NOM_INSTANCE est important : le service unitaire est configuré avec ce paramètre. Page 5
3. Configuration Exemple : configuration du service unitaire MS-MSSQL-database-backup-age ayant l objectif suivant : Le nombre d'heures écoulées depuis la dernière sauvegarde des bases de l'instance de base de données MS SQL Server. Configuration: l'instance de la base, le compte et le mot de passe de l'utilisateur ayant un accès à la base, le nombre d'heures au-dessus duquel l'état passe à ALERTE, le nombre d'heures au-dessus duquel l'état passe à CRITIQUE. L'instance doit être définie sur le serveur de supervision. L'utilisateur doit disposer du rôle serveradmin sur l'instance. Page 6
4. Suppression de l utilisateur Le script suivant permet de supprimer l utilisateur créé en étape 1. 1) DECLARE @dbname VARCHAR(255) 2) DECLARE @check_mssql_health_user VARCHAR(255) 3) DECLARE @check_mssql_health_role VARCHAR(255) 4) 5) SET @check_mssql_health_user = '"[Servername Domainname]\Username"' 6) SET @check_mssql_health_role = 'Rolename' 7) 8) DECLARE dblist cursor FOR 9) SELECT name FROM sysdatabases WHERE name NOT IN ('master', 'tempdb', 'msdb') OPEN dblist 10) fetch NEXT FROM dblist INTO @dbname 11) while @@fetch_status = 0 BEGIN 12) EXEC ('USE ' + @dbname + ' print ''Revoke permissions in the db '' + ''"'' + DB_NAME() + ''"''') 13) EXEC ('USE ' + @dbname + ' EXEC sp_droprolemember ' + @check_mssql_health_role + ', ' + @check_mssql_health_user) 14) EXEC ('USE ' + @dbname + ' DROP USER ' + @check_mssql_health_user) 15) EXEC ('USE ' + @dbname + ' REVOKE VIEW DEFINITION TO ' + 16) EXEC ('USE ' + @dbname + ' REVOKE VIEW DATABASE STATE TO ' + 17) EXEC ('USE ' + @dbname + ' REVOKE EXECUTE TO ' + 18) EXEC ('USE ' + @dbname + ' DROP ROLE ' + 19) EXEC ('USE ' + @dbname + ' print ''Permissions in the db '' + ''"'' + DB_NAME() + ''" revoked.''') 20) fetch NEXT FROM dblist INTO @dbname 21) END 22) close dblist 23) deallocate dblist 24) 25) PRINT '' 26) PRINT 'drop Nagios plugin user ' + @check_mssql_health_user 27) EXEC ('USE MASTER REVOKE VIEW SERVER STATE TO ' + @check_mssql_health_user) 28) EXEC ('DROP LOGIN ' + @check_mssql_health_user) 29) PRINT 'User ' + @check_mssql_health_user + ' dropped.' Page 7
5. Installation du package FREETDS Cette opération est effectuée par Coservit sur chaque Box en production. Le master VSB/VSM inclut déjà les packages logiciels. Voir document http://portail/rd/lists/base%20connaissance%20produit/threaded.aspx?rootfold er=%2frd%2flists%2fbase%20connaissance%20produit%2finstallation%20de%2 0FreeTDS%20et%20Sybase%20pour%20les%20connexion%20Mssql&FolderCTID =0x01200200F08D34864F20EE449C7A0F26295E4123 Page 8
6. Compilation et configuration du module mssql_health Cette opération est effectuée par Coservit sur chaque Box en production. Copier le contenu du package check_mssql_health-1.5.8.2.tar sur la VS BOX : wget http://labs.consol.de/wp-content/uploads/2011/01/check_mssql_health-1.5.8.2.tar.gz Tar xvf Exécuter dans le répertoire check_mssql_health-1.5.8.2 la commande :./configure Exécuter dans le répertoire la commande make Exécuter dans le répertoire la commande make install Vérifier dans /usr/local/nagios/libexec la présence du fichier check_mssql_health Exécuter la commande : chown nagios:nagios /usr/local/nagios/libexec/check_mssql_health Page 9
Siège social Agence Grenoble 13 rue des Trembles 38100 Grenoble Tel : +33 (0) 4 76 70 57 10 Agence is 20 rue du docteur Georges Lafosse 92170 Vanves Tel : +33 (0) 1 41 90 68 30 www.coservit.fr Copyright 2009 Coservit. Tous droits réservés Page 10