¿Por qué se crea un "USO DE CONCESIÓN" la primera vez que otorgo privilegios de usuario?


Soy nuevo en el lado de administración de DBMS y estaba configurando una nueva base de datos esta noche (usando MySQL) cuando me di cuenta de esto. Después de otorgar un privilegio a un usuario por primera vez, se crea otra concesión que se parece a

GRANT USAGE on *.* TO user IDENTIFIED BY PASSWORD password

La documentación dice que el privilegio USAGE significa "sin privilegios", por lo que estoy inferiendo que otorga trabajo jerárquicamente y tal vez un usuario debe tener algún tipo de privilegio para todas las bases de datos, por lo que esto sirve como un catch all?

Tampoco entiendo por qué esta línea tiene una cláusula IDENTIFIED BY cuando la concesión que creé no tiene una (principalmente porque no entiendo para qué sirve la cláusula IDENTIFIED BY).

Editar: Lo siento por no decir esto originalmente, las subvenciones fueron

GRANT ALL PRIVILEGES ON database.* TO admin_user
GRANT SELECT, INSERT, UPDATE, DELETE ON database.* TO user
Author: JakeGould, 2010-01-24

3 answers

Como usted ha dicho, en MySQL USAGE es sinónimo de "sin privilegios". Del Manual de Referencia de MySQL :

El especificador de privilegios de USO significa "sin privilegios."Se utiliza a nivel global con GRANT para modificar atributos de cuenta como límites de recursos o características SSL sin afectar los privilegios de cuenta existentes.

USAGE es una forma de decirle a MySQL que existe una cuenta sin conferir privilegios reales a esa cuenta. Le tener simplemente permiso para usar MySQL, por lo tanto USAGE. Corresponde a una fila en la tabla `mysql`.`user` sin privilegios establecidos.

La cláusula IDENTIFIED BY indica que se establece una contraseña para ese usuario. ¿Cómo sabemos que un usuario es quien dice ser? Ellos se identifican enviando la contraseña correcta para su cuenta.

La contraseña de un usuario es uno de esos atributos de cuenta de nivel global que no está vinculado a una base de datos o tabla específica. También vive en el `mysql`.`user` tabla. Si el usuario no tiene ningún otro privilegio ON *.*, se le concede USAGE ON *.* y su hash de contraseña se muestra allí. Esto es a menudo un efecto secundario de una declaración CREATE USER. Cuando se crea un usuario de esa manera, inicialmente no tiene privilegios, por lo que simplemente se le otorga USAGE.

 101
Author: Espresso_Boy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-10-19 20:02:29

Estaba tratando de encontrar el significado de GRANT USAGE on *.* TO y lo encontré aquí. Puedo aclarar que GRANT USAGE on *.* TO user IDENTIFIED BY PASSWORD password se concederá cuando cree el usuario con el siguiente comando (CREATE):

CREATE USER 'user'@'localhost' IDENTIFIED BY 'password'; 

Cuando conceda privilegios con GRANT, se agregarán nuevos privilegios encima de ellos.

 6
Author: 5YrsLaterDBA,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-12-06 15:15:23

Además, las contraseñas de mysql cuando no se utiliza la cláusula IDENTIFIED BY, pueden ser valores en blanco, si no están en blanco, pueden ser cifradas. Pero sí USAGE se usa para modificar una cuenta otorgando limitadores de recursos simples como MAX_QUERIES_PER_HOUR, una vez más esto se puede especificar también usando la cláusula WITH, en conjunción con GRANT USAGE (sin privilegios añadidos) o GRANT ALL, también puede especificar GRANT USAGE a nivel global, a nivel de base de datos, a nivel de tabla,etc....

 3
Author: s1los,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-12-06 15:10:46