Tema 3 Gestion de Cuentas de Usuarios Permisos y Vistas
Tema 3 Gestion de Cuentas de Usuarios Permisos y Vistas
Tema 3 Gestion de Cuentas de Usuarios Permisos y Vistas
Se encarga de establecer quien puede conectarse al servidor y asegurar que cada usuario ejecute solamente las operaciones que tenga permitida. Como usuario, cuando nos conectamos aun servidor MySQL, nuestra identidad se determina mediante el equipo desde el que nos conectamos y el nombre de usuario. Es decir el servidor trabaja con cuentas (equipo + usuario + contrasea) que tiene ciertos permisos o privilegios. Dichas cuentas y permisos se encuentran organizados en la BD mysql El acceso al servidor tiene lugar en dos etapas: en a primera comprueba nuestra identidad en la segunda nuestros permisos. Para ello consulta las tablas de permisos Las tablas user y host determina los permisos de la primera fase de conexin en la que comprueba si la cuenta puede acceder al servidor adems de los permisos globales. Las tablas db, tables-priv y column-priv proporcionan permisos a nivel de base de datos de tabla y de columna. Los permisos de la tabla user son globales es decir se aplican a toda la base de datos. Si tenemos un permiso a Y en un permiso de dicha tabla podemos hacer la operacin, por ejemplo: Drop, sobre cualquier tabla de cualquier base de datos de nuestro sistema. Si por el contrario esta a N pasamos a siguiente nivel es decir a la tabla db y as sucesivamente con el resto de tablas. El servidor usa las tablas de permisos de la siguiente manera: las columnas user y host de la tabla user determina si se rechazan o permiten las conexiones entrantes. Para conexiones permitidas cualquier privilegio otorgado en la tabla user indica los privilegios globales del usuario (sper usuario). Esto privilegio se aplican a toda la base de datos. Las columnas de la tabla db determinan que usuario pueden acceder a que base de datos y desde que equipo. La columna de privilegios determina que operaciones se permiten. Un privilegio otorgado a este nivel se aplica la base de datos y todas sus tablas. La tabla host usa en conjunto con la tabla db cuando queremos que un registro de la tabla db se aplique a varios equipos por ejemplo: Si queremos que un usuario sea capaz de usar una Base de datos desde varios equipos podemos dejar el valor de host vaco en la tabal db y luego rellenamos la tabla host con un registro para cada uno de los equipos. Las tablas tables-priv y columns_priv son similares a la tabla db pero ms detallada: Se aplican a nivel de tabla y de columna en lugar de a nivel de Base de datos u privilegio otorgado a nivel de tabla se aplica a la tabla y a todas sus
columnas. Un privilegio otorgado a nivel de columna se aplica solo a la columna o columnas especificadas. El servidor MySQL lee los contenidos de estas tablas cuando arranca. Podemos decirle que la vuelva a leer mediante FLUSH PRIVILEGES o mysqladmin u root p flushprivileges o tambin mysqladmin .... reload . Para consultar los permisos de una cuenta: SHOW GRANT FOR pepe@localhost; SHOW PRIVLEGES;
3.2.
Gestin de recursos.
3.2.1.
LEE el contenido de las tablas de la BD MYSQL cuando se inicia y lo deja en memoria lo relee cuando le indicamos con mysqladmin o si ya estoy dentro con FLUSH PRIVILEGES; o automticamente cuando ejecutamos GRAN, REVOKE O SET PASSWORD
3.2.2. Usuarios en MySQL.
To list the privileges granted to the account that you are using to connect to the server, you can use any of the following statements:
SHOW GRANTS; SHOW GRANTS FOR CURRENT_USER; SHOW GRANTS FOR CURRENT_USER();
select * from mysql.user; This shows all the users defined in the MySQL server, together with their global privileges.
3.2.2.
USUARIO MYSQL:
Se pueden asignar o conceder permisos o privilegios a usuarios de dos formas, primero con GRANT (omitiendo el campo IDENTIFIED) Insertando directamente en las tablas de la BD mysql
NOTA: Existen permisos globales administrador del servidor ejemplo shutdown, + Los permisos globales se guardan en la tabla USER Existen permiso a nivel de Base de Datos se guarda en DB, afectan a las bases de datos y todas sus tablas hay que indicar Bd.*. Existen permisos a nivel de tabla se guarda en tables_priv afecta a esta tabla de esta base de datos BD.tabla. Existen permisos a nivel de comunas se guarda en column_priv afectan a las columnas de una tabla en concreto BD.tabla (lista_columnas) los permisos para una tabla o columna se generan de manera ADITIVA con OR lgica de los permisos de cada uno de los 4 NIVELES de permiso (nivel de , bd, columnas) Ejemplo si un usuario tiene privilegios a nivel global no se le puede negar a
Global_privileges OR (database_privileges AND host_privileges) OR table_privileges OR columns_privileges. Y
Tambin existen permisos a nivel de rutina: afectan a las rutinas almacenadas y son: CREATE ROUTINE, ALTER ROUTINE, EXECUTE, GRANT Se pueden dar a nivel global y a nivel de Base de datos. Excepto crate ROUTINE los dems se pueden dar a nivel de rutina para rutina almacenada. Se almacenan en la tabla procs_priv
Para usar GRANT y REVOKE Se Debe tener el permiso GRANT OPTION debemos tener adems ese o estos privilegios que queremos dar. Cuando el servidor recarga las tablas GRANT(Tablas de la BD de mysql) los privilegios para las conexiones existentes afectan:
Cambia el privilegios de talba y columnas(talbles_priv, column_priv) Cambio el privilegio de Base de datos, toman efecto en la siguiente sentencia: use nombre_BD Los cambios en privilegios globales y en las claves
Para eliminar usuarios: o DROP USER nombre_user [,nombre_otrouser]; o Borrar en las tablas con DELETE de la tabla USER de la base de datos mysql. DELETE en user.
o
Para usarlo debemos tener el permiso GLOBAL (Por lo tanto en la tabla USER) CREATE USER.
Para renombrar cuentas: Usaremos el comando: RENAME USER antiguo_nombre TO nuevo_nombre; O modificar la tabla USER: UPDATE en user; Para usarlo hay que tener el privilegio CREATE USER y UPDATE en mysql
Las sintaxis es parecida a GRANT: REVOKE priv_type [,(columns_priv)] [,(columns_priv)] ON {*.*|bd.*| bd.tabla|* FROM user[,user..];
Para quitar todos los permisos globales a nivel de base de datos y de tablas para los usuarios indicados se usa: REVOKE ALL PRIVILEGES, GRAN OPTION FROM [usuarios]. Es necesario tener privilegio CREATE USER (Privilegios global) o el UPDATE en la base de datos MYSQL SI yo quiero ver mis permisos SHOW GRANTS; o SHOW GRANTS FOR CURRENT_USER(); QUE nos se puede hacer con los sistemas de privilegios de mysql: especificar explcitamente que a un usuario se le niegue el acceso.
Que tenga privilegios para crear o eliminar tablas en una BD pero no pueda crear o eliminar esa base de datos
3.2.3. Limitar recursos de cuentas. Una forma de limitar los recursos de los servidores MySQL es con una variable de sistema: max_user_connections. Con un valor distinto a cero. Pero es global y no me sirve para cuentas individuales adems solo limita el numero de conexiones limitadas usando una cuenta y no las que el usuario pueda hacer una vez conectado. Podemos limitar los siguientes recueros para cuentas individuales: Numero de consultas que una cuenta puede hacer por hora. Numero de actualizaciones (comandos que modifiquen BD o tabla) por hora. Numero de veces que una cuenta pude conectar con el servidor por hora. Numero de conexiones simultneas por cuenta.
Cuenta(es un registro de la tabla user,.) Son las 4 ltimas que tenemos: max_connections, max_user_conexion.. Para limitar los recursos usamos el comando GRANT. GRANT .. WITH max_queries_per_hour n Max_updates_per_hour n Max_connections_per_hour n Max_user_connections n; El nmero debe ser un entero. No importa el orden si a uno le ponemos el 0 significa es ilimitado si no indicamos nada para la variable es max_user_connections. PARA Inicializar lmites de una cuenta existente (sin afectar a los permisos existentes, o sea sin poner permisos nuevos) debemos usar: GRANT USAGE ON *.* MAX_QUERIES_PER_HOURS = 10
Flush user_resoruces; flush privileges; flush reload; 3.24 Asignar contraseas a las cuentas. Se pueden asignar contraseas:
a) Desde la lnea de comandos del DOS: mysqladmin u user h equipo password
nueva_contrasea; la cuenta que cambia es la que tenga la tabla user y el equipo el que corresponda. b) Desde MySQL: SET PASSWORD FOR user@host = PASSWORD(nueva_contrasea); Solo el usuario root con permiso de modificacin en la BD mysql puede cambiar contraseas en la BD. Si no estamos conectados como un usuario annimo podemos cambiar la password quitando la clausula FOR: mysql>SET PASSWORD=PASSWORD(nueva_contrasea); Tambin podemos usar GRANT USAGE, globalmente (*.*) para asignar una contrasea a una cuenta sin afectar a los permisos actuales de la cuenta. Tambin aunque menos recomendable, podemos modificar la tabla USER manualmente.
1. Borrar al usuario Carmen1 (para hacerlo tenemos que tener privilegios de crear o borrar) 2. Borrar al usuario pepe directamente en las tablas
3. Cambiarle el nombre a mara por maria1, y a continuacin entrar como maria1
Juan __> ALL BD.empresa -insertar departamento -insertar empleados 3.3.3. Limitar recursos de cuentas.
Es una tabla sin contenido, totalmente visual que devuelve las filas resultantes de ejecutar una consulta SQL una SELECT. Son objetos de la BD que mediante una consulta incluye un subconjunto de datos, es decir mediante una SELECT agrupa o selecciona un conjunto de datos, mediante el uso de vistas podemos filtrar mucha informacin. Su uso es algo cotidiano ya que permiten por un lado que el administrador de la BD pueda proteger los accesos directos a las tablas. Y por otro lado permite que los usuarios puedan ver solamente aquello que necesita. Las vistas admiten el uso de ms de una tabla, otras vistas subconsultas y JOINs, UNIN. Las vistas reflejan instantneamente los cambios producidos en las tablas Algunas vistas son actualizables es decir se pueden cambiar datos con sentencias como UPDATE, INSERT O DELETE para actualizar el contenido de la tabla subyacente o tabla base. Para que una vista se actualizable debe haber una relacin 1 a 1 entre los registros de la vista y los registros de la tabla subyacente. Hay otros elementos que impiden que una vista se actualizable: Que se usen tablas temporales
Usar clausulas GROUP BY, HAVING, distinct y ORDER BY
Usar UNION
USAR consultas correlacionadas(es una sub-consulta que contiene una
referencia a un tabla que aparece en la consulta exterior) ejemplo SELECT * FROM T1 SELECT(C1 FROM T2 WHERE T2.C1=T1.C5) Funciones agregadas: MAX, MIN, COUNT. Una vista no actualizable en la clausula FROM