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

101

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

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

La documentación dice que el USAGEprivilegio significa "sin privilegios", por lo que estoy infiriendo que las concesiones funcionan jerárquicamente y tal vez un usuario debe tener algún tipo de privilegio para todas las bases de datos, ¿entonces esto sirve como un truco?

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

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
John M Naglick
fuente
¿Puede decirnos la subvención que ha ejecutado
Pentium10

Respuestas:

144

Como dijiste, en MySQL USAGEes sinónimo de "sin privilegios". Del Manual de referencia de MySQL :

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

USAGEes una forma de decirle a MySQL que existe una cuenta sin conferir ningún privilegio real a esa cuenta. Simplemente tienen permiso para usar el servidor MySQL, por lo tanto USAGE. Corresponde a una fila de la `mysql`.`user`tabla sin privilegios establecidos.

La IDENTIFIED BYcláusula indica que se establece una contraseña para ese usuario. ¿Cómo sabemos que un usuario es quien dice ser? 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 la `mysql`.`user`mesa. Si el usuario no tiene ningún otro privilegio ON *.*, se le otorgan USAGE ON *.*y el hash de su contraseña se muestra allí. Suele ser un efecto secundario de una CREATE USERdeclaración. Cuando se crea un usuario de esa manera, inicialmente no tiene privilegios, por lo que simplemente se le otorgan USAGE.

Espresso_Boy
fuente
10
Creo que es porque se les permite autenticarse. Si lo intenta con un usuario o contraseña incorrectos, no podrá autenticarse. Un usuario con privilegios de USO puede ejecutar ciertos comandos SQL como 'seleccionar 1 + 1' y 'mostrar lista de procesos'.
Mircea Vutcovici
11

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

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

Cuando otorgue privilegios con GRANT, se agregarán nuevos privilegios encima.

5 años más tardeDBA
fuente
3

Además, las contraseñas de mysql cuando no se usa la IDENTIFIED BYcláusula, pueden ser valores en blanco, si no están en blanco, pueden estar encriptadas. Pero sí USAGEse usa para modificar una cuenta otorgando limitadores de recursos simples como MAX_QUERIES_PER_HOUR, nuevamente, esto se puede especificar también usando la cláusula WITH, junto con GRANT USAGE(sin privilegios agregados) o GRANT ALL, también puede especificar GRANT USAGEa nivel global, nivel de base de datos, nivel de mesa, etc ....

s1los
fuente