Pt51 - Catàleg i DBA

De Lordwektabyte Wiki
Salta a la navegació Salta a la cerca

Guillem Solà i Boeck (host A10BPC22)

Identificar el funcionament d'un diccionari de dades del SGBD

Indicar quin és el catàleg de MariaDB

El catàleg de MariaDB està format per dues bases de dades: mysql i information_schema. Són dues bases de dades importants que es creen en el moment de la instal·lació del SGBD i que, quan fem la posada a punt amb mysql_secure_installation es modifiquen amb els nous paràmetres que haguem triat durant el wizard. Aquest catàleg conté informació arran de les altres bases de dades presents com ara noms de taules que les formen, relacions de claus foranes, camps que formen les claus primàries, etc. Aquest catàleg, com a tal, es troba al directori de dades de MariaDB: /var/lib/mysql on a dins hi haurà tants subdirectoris com bases de dades gestioni aquell SGBD.

Crear un usuari administrador i indicar les taules que es modifiquen

Abans de crear l'usuari

MariaDB [mysql]> select host, user from user; 
+-----------+---------------+
| host      | user          |
+-----------+---------------+
| 127.0.0.1 | root          |
| ::1       | root          |
| localhost | root          |
+-----------+---------------+
3 rows in set (0.00 sec)

Creació de l'usuari

CREATE USER 'administrador'@'localhost' IDENTIFIED BY 'moodle';

Després de crear l'usuari

MariaDB [mysql]> select host, user from user;
+-----------+---------------+
| host      | user          |
+-----------+---------------+
| 127.0.0.1 | root          |
| ::1       | root          |
| localhost | administrador |
| localhost | root          |
+-----------+---------------+
4 rows in set (0.00 sec)

Veiem que ha aparegut a la taula mysql.user el nou usuari creat.

Crear un usuari que tingui tots els permisos sobre la base de dades moodle, indicar les taules que es modifiquen

Primer instal·larem el software moodle segons la documentació de l'annex. Llavors, realitzarem aquesta secció amb la base de dades moodle creada per a allotjar un entorn moodle. La comanda per a crear una base de dades nova moodle és:

CREATE DATABASE moodle;

Llavors crearem l'usuari administrador amb una contrasenya i li donarem tots els privilegis a la BBDD moodle:

GRANT ALL PRIVILEGES ON moodle.* TO 'administrador'@'localhost' IDENTIFIED BY 'moodle' WITH GRANT OPTION;

Crear un usuari que només pugui fer consultes a la base de dades moodle, indicar les taules que es modifiquen

Abans de crear l'usuari

MariaDB [mysql]> select host, user from user; 
+-----------+---------------+
| host      | user          |
+-----------+---------------+
| 127.0.0.1 | root          |
| ::1       | root          |
| localhost | administrador |
| localhost | root          |
+-----------+---------------+
4 rows in set (0.00 sec)

Creació de l'usuari

GRANT SELECT ON moodle.* TO 'moodle_ro'@'localhost' IDENTIFIED BY 'moodlero';

Després de crear l'usuari

MariaDB [mysql]> select host, user from user;
+-----------+---------------+
| host      | user          |
+-----------+---------------+
| 127.0.0.1 | root          |
| ::1       | root          |
| localhost | administrador |
| localhost | moodle_ro     |
| localhost | root          |
+-----------+---------------+
5 rows in set (0.00 sec)

Podem concloure que la taula que es modifica quan creem, esborrem o modifiquem permisos dels usuaris és la de mysql.user ja que si mirem quins camps hi ha obtenim:

MariaDB [mysql]> describe user;
+------------------------+-----------------------------------+------+-----+---------+-------+
| Field                  | Type                              | Null | Key | Default | Extra |
+------------------------+-----------------------------------+------+-----+---------+-------+
| Host                   | char(60)                          | NO   | PRI |         |       |
| User                   | char(16)                          | NO   | PRI |         |       |
| Password               | char(41)                          | NO   |     |         |       |
| Select_priv            | enum('N','Y')                     | NO   |     | N       |       |
| Insert_priv            | enum('N','Y')                     | NO   |     | N       |       |
| Update_priv            | enum('N','Y')                     | NO   |     | N       |       |
| Delete_priv            | enum('N','Y')                     | NO   |     | N       |       |
| Create_priv            | enum('N','Y')                     | NO   |     | N       |       |
| Drop_priv              | enum('N','Y')                     | NO   |     | N       |       |
| Reload_priv            | enum('N','Y')                     | NO   |     | N       |       |
| Shutdown_priv          | enum('N','Y')                     | NO   |     | N       |       |
| Process_priv           | enum('N','Y')                     | NO   |     | N       |       |
| File_priv              | enum('N','Y')                     | NO   |     | N       |       |
| Grant_priv             | enum('N','Y')                     | NO   |     | N       |       |
| References_priv        | enum('N','Y')                     | NO   |     | N       |       |
| Index_priv             | enum('N','Y')                     | NO   |     | N       |       |
| Alter_priv             | enum('N','Y')                     | NO   |     | N       |       |
| Show_db_priv           | enum('N','Y')                     | NO   |     | N       |       |
| Super_priv             | enum('N','Y')                     | NO   |     | N       |       |
| Create_tmp_table_priv  | enum('N','Y')                     | NO   |     | N       |       |
| Lock_tables_priv       | enum('N','Y')                     | NO   |     | N       |       |
| Execute_priv           | enum('N','Y')                     | NO   |     | N       |       |
| Repl_slave_priv        | enum('N','Y')                     | NO   |     | N       |       |
| Repl_client_priv       | enum('N','Y')                     | NO   |     | N       |       |
| Create_view_priv       | enum('N','Y')                     | NO   |     | N       |       |
| Show_view_priv         | enum('N','Y')                     | NO   |     | N       |       |
| Create_routine_priv    | enum('N','Y')                     | NO   |     | N       |       |
| Alter_routine_priv     | enum('N','Y')                     | NO   |     | N       |       |
| Create_user_priv       | enum('N','Y')                     | NO   |     | N       |       |
| Event_priv             | enum('N','Y')                     | NO   |     | N       |       |
| Trigger_priv           | enum('N','Y')                     | NO   |     | N       |       |
| Create_tablespace_priv | enum('N','Y')                     | NO   |     | N       |       |
| ssl_type               | enum('','ANY','X509','SPECIFIED') | NO   |     |         |       |
| ssl_cipher             | blob                              | NO   |     | NULL    |       |
| x509_issuer            | blob                              | NO   |     | NULL    |       |
| x509_subject           | blob                              | NO   |     | NULL    |       |
| max_questions          | int(11) unsigned                  | NO   |     | 0       |       |
| max_updates            | int(11) unsigned                  | NO   |     | 0       |       |
| max_connections        | int(11) unsigned                  | NO   |     | 0       |       |
| max_user_connections   | int(11)                           | NO   |     | 0       |       |
| plugin                 | char(64)                          | NO   |     |         |       |
| authentication_string  | text                              | NO   |     | NULL    |       |
+------------------------+-----------------------------------+------+-----+---------+-------+
42 rows in set (0.02 sec)

On podem llegir-hi select_priv, insert_priv, create_view_priv entre molts altres. Cada privilegi té un camp associat que pot tenir valor Y o N en funció de si aquell usuari té permès aquell permís o no.

Identifica les tasques del DBA i les de la resta d'usuaris d'un SGBD

Com a DataBase Administrators haurem de fer tasques administratives com ara

  • engegar i aturar el sistema gestor de la base de dades
  • crear, eliminar i modificar bases de dades i les seves taules
  • gestionar les còpies de seguretat i poder restaurar-ho en cas necessari
  • auditar la base de dades per a buscar forats de seguretat o, sobretot, problemes de rendiment i fer-ne un diagnòstic de la causa. Una vegada detectat, ser capaços de poder proposar solucions per a mitigar el problema o millorar el rendiment del sistema en general.

Crear un script per a fer una d'aquestes tasques (no backup)

ANNEX

Instal·lació del programari moodle

Des de la pàgina oficial podem descarregar l'últim release del programa (a dia d'avui el 3.5) en format .tar.gz. De manera que podem descarregar-lo amb un wget https://download.moodle.org/download.php/stable35/moodle-3.5.tgz des de la línia de comandes de la màquina virtual que ens farà de servidor.

Procediment

Una vegada descarregat des d'Internet, extreurem l'arxiu tgz a l'arrel del directori /var/www/html de manera que pugui ser servit a través d'Apache. A la primera arrencada, ens surt un missatge que ens obliga a instal·lar PHP7 per a poder-lo utilitzar. Haurem d'afegir primer el repositori EPEL amb

yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm

i el repo REMI:

yum install http://rpms.remirepo.net/enterprise/remi-release-7.rpm

També serà necessari instal·lar una utilitat de yum que permet canviar repositoris per defecte, de manera que quan instal·lem PHP, ens agafi el del repositori EPEL amb la versió 7:

yum install yum-utils

Una vegada instal·lades aquestes utilities, seleccionarem el repositori que volem activar segons la sub-versió que volguem instal·lar de PHP: 7.0, 7.1 o 7.2: En aquest cas, instal·lo la versió 7.2

yum-config-manager --enable remi-php72

Una vegada activat el repo amb la versió de PHP seleccionada, instal·larem la versió 7.2 amb la comanda

yum install php php-mcrypt php-cli php-gd php-curl php-mysql php-ldap php-zip php-fileinfo php-intl
Nota: l'últim paquet php-intl és un requeriment per a versions de Moodle superiors a 3.4.

Per a comprovar la versió de PHP que està instal·lada i en funcionament actualment podem executar un

php -v

I ens donarà una sortida:

PHP 7.2.5 (cli) (built: Apr 24 2018 19:12:06) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies

Això és senyal que s'ha instal·lat i està a punt el PHP 7.2.5. Ara és qüestió de recarregar la configuració del servidor web Apache perquè utilitzi la versió PHP nova.

systemctl reload httpd

Llavors podem tornar a obrir la pàgina web des d'on s'està servint el moodle i tindrem la primera pantalla d'un assistent d'instal·lació.

Moodle1.png


Moodle2.png


La segona pantalla ens fa definir la URL des d'on s'accedirà al moodle i 2 directoris més on el servidor web necessita accés de lectura/escriptura. La solució més pràctica és canviar el propietari de /var/www del root a l'apache:

chown -R apache:apache /var/www

Llavors podrem passar a la tercera pantalla: Triarem el motor de Base de Dades on volem recolzar el programa Moodle. En el nostre cas es tracta d'un MariaDB.

Moodle3.png


Seguirem endavant per a configurar els paràmetres referents a la BBDD. En aquest punt, és on s'ha de tenir en compte l' apartat corresponent. Ho omplirem amb les dades de l'usuari administrador que hem creat amb anterioritat:

Moodle4.png


Acceptarem els termes i condicions

Moodle5.png


Com no podria ser d'altra manera, hem hagut de trobar-nos amb altres incidències que haurem de solventar per a acabar la instal·lació:

Moodle6.png


Tots els punts corresponen a configuració de MariaDB, i el 2n i el 3r estic segur que estan definits al my.cnf. Per tant, des de la consola del CentOS haurem de buscar aquests paràmetres i canviar-los al valor demanat pel Moodle.

nano /etc/my.cnf.d/server.cnf
[server]
innodb_file_per_table=1
innodb_large_prefix=1

Recarregarem la configuració de mariadb i revisarem aquests errors:

Les accions anteriors ja han arreglat 2 dels 3 errors d'obligatorietat que no ens deixen acabar la instal·lació


Per al punt que queda restant, a la documentació de Moodle es diu que s'han d'executar unes comandes des de l'administrador del SGBD on hi ha la BBDD del Moodle

USE Sql790278_1;
SET SESSION sql_mode=STRICT_ALL_TABLES;
SET GLOBAL innodb_file_format=Barracuda;

Finalment, tindrem l'entorn a punt per a acabar la instal·lació: Mentre va instal·lant, tindrem una pantalla estàtica que van apareixent els "mòduls" que es van instal·lant i, si entrem al SGBD i ens hi fixem, veurem que es van creant taules i es van omplint registres inicials.

Una vegada acabat el procés, podrem continuar


Ara és moment de crear l'usuari administrador de l'entorn del Moodle:

Omplirem els camps obligatoris i actualitzarem el perfil


Complimentarem la informació referent a noms del lloc, descripcions, zones horàries...

Moodle10.png


Ja hem acabat la instal·lació. Ara se'ns mostra el tauler d'administració