Diferencia entre revisiones de «Mysql Entendiendo el sistema de permisos»
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)):
- Usuarios: CREATE USER, ALTER USER, DROP USER
- Gestión de permisos: GRANT, REVOKE
- 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:
- 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'.
- 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.
- 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).