Diferencia entre revisiones de «Mysql Entendiendo el sistema de permisos»

De MediaWiki
Ir a la navegación Ir a la búsqueda
(Página creada con « <br> -- Ángel D. Fernández González -- (2017).»)
 
Línea 1: Línea 1:
 +
=Niveles de seguridad=
 +
 +
* Parece lógico que si queremos acceder a información guardada en una base de datos, tengamos establecido algún sistema de permisos que especifique que operaciones van a poderse realizar con los datos guardados.
 +
: Además, el servidor Mysql también va a permitir gestionar ciertos permisos administrativos sobre el propio gestor.
 +
 +
 +
* Las operaciones que vamos a poder realizar las podemos agrupar en las siguientes categorías:
 +
:* DATOS (conformaría el Lenguaje de Manipulación de Datos => DML (Data Manipulation Language), componente de un Sistema de Gestión de Base de Datos):
 +
::* Manipulación de datos: INSERT, UPDATE, DELETE aplicadas a tablas/vistas dentro de una base de datos.
 +
::* Consulta de datos: SELECT aplicada a tablas/vistas dentro de una base de datos.
 +
::* Vistas: CREATE VIEW, ALTER VIEW, DROP VIEW.
 +
::* [https://dev.mysql.com/doc/refman/5.7/en/sql-syntax-data-manipulation.html Resto de órdenes DML].
 +
 +
:* GESTIÓN (conformaría el Lenguaje de Definición de Datos => DDL (Data Definition Language), componente de un Sistema de Gestión de Base de Datos):
 +
::* Base de datos: CREATE DATABASE, ALTER DATABASE, DROP DATABASE
 +
::* Tablas: CREATE TABLE, ALTER TABLE, DROP TABLE
 +
::* Procedimientos almacenados: CREATE PROCEDURE, ALTER PROCEDURE, DROP PROCEDURE, EXECUTE
 +
::* Triggers: CREATE TRIGGER, ALTER TRIGGER, DROP TRIGGER
 +
::* [https://dev.mysql.com/doc/refman/5.7/en/sql-syntax-data-definition.html Resto de órdenes DDL].
 +
 +
:* SEGURIDAD (conformaría un sub-lenguaje del Lenguaje de Definición de Datos, denominado Lenguaje de Control de Datos (Data Control Language => DCL)):
 +
::* Usuarios: CREATE USER, ALTER USER, DROP USER
 +
::* Gestión de permisos: GRANT, REVOKE
 +
::* [https://dev.mysql.com/doc/refman/5.7/en/sql-syntax-server-administration.html Resto de órdenes DCL].
 +
 +
 +
* Mysql incorpora un sistema de seguridad en el que con las órdenes definidas en el DCL, especifica qué permisos DDL y DML va a tener un usuario.
 +
 +
* Para ello debemos pasar por diferentes niveles de seguridad.
 +
 +
==Primer Nivel: Mysql==
 +
 +
* El primer nivel lo compone el propio Mysql.
 +
: Debemos de determinar qué usuarios tienen permiso de conexión al servidor Mysql.
 +
 +
* La información que va a guardar Mysql para determinar si un usuario tiene permiso de conexión es:
 +
:* Nombre del usuario
 +
:* Password del usuario
 +
:* Dirección IP/Nombre del host desde el que el usuario está intentando conectarse al servidor.
 +
 +
* Toda esa información está guardada en la tabla '''user''' de la base de datos Mysql.
 +
 +
* Si ejecutamos la orden SQL: '''desc mysql''' podemos observar lo siguiente:
 +
 +
[[Imagen:Mysql_seguridad_1.jpg|500px|center]]
 +
 +
:* Host: Indica la dirección ip/nombre del host desde el cual el usuario va a poder conectarse.
 +
:: Recordar que por defecto, Mysql no permite conexiones remotas utilizando TCP/IP, por lo que tendríais que comentar la [[https://dev.mysql.com/doc/refman/5.7/en/server-options.html#option_mysqld_bind-address bind-address] variable del sistema bind-address] en su archivo de configuración.
 +
:: Los valores más comunes para este campo suelen ser:
 +
::* localhost/127.0.0.1: esto implica que el usuario sólo puede conectarse vía ssh o estando físicamente en la misma máquina donde se encuentra el servidor Mysql.
 +
:* User: El nombre del usuario que tiene acceso al servidor.
 +
:* Password: El password del usuario. Está encriptada.
 +
 +
 +
* '''Importante:''' Recordar que los usuarios del servidor Mysql <u>no tienen nada que ver</u> con los usuarios creados a nivel del sistema operativo.
 +
 +
 +
* Una vez creado un usuario, éste puede conectarse al Mysql, '''pero no puede realizar ninguna acción''' ya que no tiene establecido ningún tipo de permiso.
 +
 +
 +
==Segundo Nivel: Bases de datos==
 +
 +
* Una vez creado el usuario debemos otorgarle permisos.
 +
: Los más comunes son los que le van a permitir realizar operaciones sobre una base de datos.
 +
 +
* Cuando creamos un usuario podemos otorgarle permisos a nivel de 'todas las bases de datos' o a nivel de 'una base de datos en particular'.
 +
 +
* Los '''permisos globales''' (los que se aplican a todas las bases de datos) están definidos en la propia tabla 'user' de la base de datos 'mysql'.
 +
 +
[[Imagen:Mysql_seguridad_2.jpg|500px|center]]
 +
 +
: En la imagen podemos observar las columnas de la tabla user: 'select_priv','update_priv','delete_priv','insert_priv'.
 +
: Estas columnas pueden tener un valor 'Y' o 'N' y por defecto, el valor predeterminado es 'NO'. Un usuario que tenga puesto a 'YES' el valor de estas columnas, tendría como consecuencia que podría realizar operaciones SQL de SELECT, UPDATE, DELETE e INSERT <u>sobre todas las tablas de todas las bases de datos</u> de Mysql.
 +
 +
[[Imagen:Mysql_seguridad_3.jpg|500px|center]]
 +
 +
* En la imagen podemos observar como el usuario 'root' tiene permisos mientras que un usuario creado en una práctica anterior ('user1') no tiene dicho permiso.
 +
 +
 +
* Los '''permisos locales''' a nivel de una base de datos en particular se encuentran guardados en la tabla
 +
  
  

Revisión del 12:07 1 nov 2017

Niveles de seguridad

  • Parece lógico que si queremos acceder a información guardada en una base de datos, tengamos establecido algún sistema de permisos que especifique que operaciones van a poderse realizar con los datos guardados.
Además, el servidor Mysql también va a permitir gestionar ciertos permisos administrativos sobre el propio gestor.


  • Las operaciones que vamos a poder realizar las podemos agrupar en las siguientes categorías:
  • DATOS (conformaría el Lenguaje de Manipulación de Datos => DML (Data Manipulation Language), componente de un Sistema de Gestión de Base de Datos):
  • Manipulación de datos: INSERT, UPDATE, DELETE aplicadas a tablas/vistas dentro de una base de datos.
  • Consulta de datos: SELECT aplicada a tablas/vistas dentro de una base de datos.
  • Vistas: CREATE VIEW, ALTER VIEW, DROP VIEW.
  • Resto de órdenes DML.
  • GESTIÓN (conformaría el Lenguaje de Definición de Datos => DDL (Data Definition Language), componente de un Sistema de Gestión de Base de Datos):
  • Base de datos: CREATE DATABASE, ALTER DATABASE, DROP DATABASE
  • Tablas: CREATE TABLE, ALTER TABLE, DROP TABLE
  • Procedimientos almacenados: CREATE PROCEDURE, ALTER PROCEDURE, DROP PROCEDURE, EXECUTE
  • Triggers: CREATE TRIGGER, ALTER TRIGGER, DROP TRIGGER
  • Resto de órdenes DDL.
  • SEGURIDAD (conformaría un sub-lenguaje del Lenguaje de Definición de Datos, denominado Lenguaje de Control de Datos (Data Control Language => DCL)):


  • Mysql incorpora un sistema de seguridad en el que con las órdenes definidas en el DCL, especifica qué permisos DDL y DML va a tener un usuario.
  • Para ello debemos pasar por diferentes niveles de seguridad.

Primer Nivel: Mysql

  • El primer nivel lo compone el propio Mysql.
Debemos de determinar qué usuarios tienen permiso de conexión al servidor Mysql.
  • La información que va a guardar Mysql para determinar si un usuario tiene permiso de conexión es:
  • Nombre del usuario
  • Password del usuario
  • Dirección IP/Nombre del host desde el que el usuario está intentando conectarse al servidor.
  • Toda esa información está guardada en la tabla user de la base de datos Mysql.
  • Si ejecutamos la orden SQL: desc mysql podemos observar lo siguiente:
Mysql seguridad 1.jpg
  • Host: Indica la dirección ip/nombre del host desde el cual el usuario va a poder conectarse.
Recordar que por defecto, Mysql no permite conexiones remotas utilizando TCP/IP, por lo que tendríais que comentar la [bind-address variable del sistema bind-address] en su archivo de configuración.
Los valores más comunes para este campo suelen ser:
  • localhost/127.0.0.1: esto implica que el usuario sólo puede conectarse vía ssh o estando físicamente en la misma máquina donde se encuentra el servidor Mysql.
  • User: El nombre del usuario que tiene acceso al servidor.
  • Password: El password del usuario. Está encriptada.


  • Importante: Recordar que los usuarios del servidor Mysql no tienen nada que ver con los usuarios creados a nivel del sistema operativo.


  • Una vez creado un usuario, éste puede conectarse al Mysql, pero no puede realizar ninguna acción ya que no tiene establecido ningún tipo de permiso.


Segundo Nivel: Bases de datos

  • Una vez creado el usuario debemos otorgarle permisos.
Los más comunes son los que le van a permitir realizar operaciones sobre una base de datos.
  • Cuando creamos un usuario podemos otorgarle permisos a nivel de 'todas las bases de datos' o a nivel de 'una base de datos en particular'.
  • Los permisos globales (los que se aplican a todas las bases de datos) están definidos en la propia tabla 'user' de la base de datos 'mysql'.
Mysql seguridad 2.jpg
En la imagen podemos observar las columnas de la tabla user: 'select_priv','update_priv','delete_priv','insert_priv'.
Estas columnas pueden tener un valor 'Y' o 'N' y por defecto, el valor predeterminado es 'NO'. Un usuario que tenga puesto a 'YES' el valor de estas columnas, tendría como consecuencia que podría realizar operaciones SQL de SELECT, UPDATE, DELETE e INSERT sobre todas las tablas de todas las bases de datos de Mysql.
Mysql seguridad 3.jpg
  • En la imagen podemos observar como el usuario 'root' tiene permisos mientras que un usuario creado en una práctica anterior ('user1') no tiene dicho permiso.


  • Los permisos locales a nivel de una base de datos en particular se encuentran guardados en la tabla












-- Ángel D. Fernández González -- (2017).