2010-01-24 21 views
60

Soy nuevo en el lado administrativo de DBMS y estaba configurando una nueva base de datos esta noche (usando MySQL) cuando noté esto. Después de la concesión de un usuario un privilegio por primera vez, se crea otra subvención que se parece a¿Por qué se crea un "USO GRANT" la primera vez que concedo privilegios de usuario?

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

La documentación dice que el USAGE privilegio significa "sin privilegios", por lo que estoy infiriendo thats subvenciones funcionan jerárquicamente y tal vez una el usuario debe tener algún tipo de privilegio para todas las bases de datos, por lo que esto sirve como una trampa para todos?

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

Editar: Lo siento por no decir esto en un principio, las subvenciones eran

GRANT ALL PRIVILEGES ON database.* TO admin_user 
GRANT SELECT, INSERT, UPDATE, DELETE ON database.* TO user 
+0

por favor díganos la concesión que ha ejecutado – Pentium10

Respuesta

94

Como usted ha dicho, en MySQL USAGE es sinónimo de "no hay privilegios". Desde MySQL Reference Manual:

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

USAGE es una manera de decir a MySQL que existe una cuenta sin otorgar privilegios reales a esa cuenta. Simplemente tienen permiso para utilizar MySQL, de ahí USAGE. Corresponde a una fila en la tabla `mysql`.`user` sin privilegios establecidos.

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

La contraseña de 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 tabla `mysql`.`user`. Si el usuario no tiene otros privilegios ON *.*, se les otorga USAGE ON *.* y su hash de contraseña se muestra allí. Suele ser un efecto secundario de una declaración CREATE USER. Cuando se crea un usuario de esa manera, inicialmente no tienen privilegios, por lo que simplemente se otorgan USAGE.

+5

Extraño: ¿por qué llamarlo USO cuando significa NINGÚN PRIVILEGIO ... – robsch

+3

Creo que es porque se les permite autenticarse. Si intenta con un usuario y/o contraseña incorrectos, no puede autenticarse. Un usuario con privilegio USAGE puede ejecutar ciertos comandos SQL como 'seleccionar 1 + 1' y 'mostrar lista de procesos'. –

3

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 estar encriptadas. Pero sí USAGE se utiliza para modificar una cuenta mediante la concesión de limitadores de recursos simples como MAX_QUERIES_PER_HOUR, de nuevo esto también se puede especificar por usando la cláusula WITH, en conjunción con GRANT USAGE (sin privilegios añadidos) o GRANT ALL, también puede especificar GRANT USAGE en el nivel global, nivel de base de datos, nivel de tabla, etc. ....

5

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

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

Cuando subvención privilegio con GRANT, se añadirá nuevo privilegio s en la parte superior de la misma.

Cuestiones relacionadas