MySQL SHOW GRANTS
muestra los permisos del usuario actual.
¿Hay alguna manera de iniciar sesión como root y mostrar los permisos de todos los usuarios?
mysql
permissions
Adam Matan
fuente
fuente
ERROR 1146 (42S02): Table 'common_schema.sql_show_grants' doesn't exist
information_schema.user_privileges
?EDITAR:
Como lo mencionó Shlomi Noach:
fuente
information_schema.user_privileges
solo enumera los privilegios a nivel de usuario, comoSUPER
,RELOAD
etc. También enumera las concesiones DML completas comoSELECT
. No , no la lista, tabla, sepcific, privilegios de rutina específicos específicos de la columna-base de datos específica. Por lo tanto, la subvenciónGRANT SELECT ON mydb.* TO myuser@localhost
no se muestrainformation_schema.user_privileges
. Lacommon_schema
solución presentada anteriormente agrega datos deuser_privileges
y otras tablas para darle una imagen completa.Este fragmento de shell de Linux recorre todos los usuarios de MySQL y realiza un SHOW GRANTS para cada uno:
Funciona mejor si puede conectarse a MySQL sin una contraseña.
La salida está formateada para que pueda ejecutarse en un shell de MySQL. Precaución: ¡La salida también contiene los permisos de usuario raíz y la contraseña de MySQL! Elimine esas líneas si no desea que se cambie el usuario raíz de MySQL.
fuente
mysql --defaults-file=/auth/root-mysql.cnf --batch --skip-column-names --execute "SELECT User, Host from mysql.user" | while read user host; do echo "SHOW GRANTS FOR '${user}'@'${host}';"; done | mysql --defaults-file=/auth/root-mysql.cnf --batch | sed 's/^Grants for/-- Grants for/'
select * from mysql.user;
Puede darle la lista de usuarios y los privilegios asignados a cada uno de ellos, requiere acceso a la
mysql.user
tabla y elroot
usuario la tiene.fuente
mysql.db
. Los privilegios en tablas específicas están enmysql.tables_priv
, y así sucesivamente. Entonces no es tan simple.select * from mysql.user
al crackstation.net y ver la salida sin troceo.Un forro (cambiar
-uroot
a-u$USER_NAME
para su uso con otro usuario) en una fiesta de Unix (debido a los acentos abiertos):o sin backticks y con contraseña en línea (el espacio delante del comando lo excluye del historial de Bash en Ubuntu):
En Windows:
fuente
Si puede ejecutar las siguientes instrucciones SELECT sin error:
entonces siéntase libre de usar el siguiente código (abajo), escrito en sintaxis .sql.
Diseñé esta consulta en un intento de reconstruir las declaraciones GRANT para todos los permisos existentes (para el mantenimiento frecuente durante la migración de la base de datos). Hay algunos problemas que se deben resolver, como la vinculación de contraseña de usuario, pero debido a que frecuentemente actualizamos las contraseñas, eso no estaba en el alcance de este proyecto.
Encantado de responder / verificar cualquier pregunta o inquietud
fuente
Esto te dará una mejor vista ...
fuente
El comando
SHOW GRANTS [FOR user]
puede mostrar cualquier usuario que desee. Ver aquí para más detalles.fuente
Como se menciona en esta respuesta , puede ejecutar el siguiente conjunto de comandos para enumerar los privilegios específicos de la base de datos, de la tabla, de la columna y de la rutina de todos los usuarios. Tenga en cuenta que debe ejecutar esto desde el shell, no desde el símbolo del sistema MySQL.
La ventaja de este enfoque es que no necesita instalar software adicional.
fuente
Si está administrando bases de datos con frecuencia, es probable que desee mantener privilegios estrictos. Puede usar un procedimiento almacenado para ejecutar rápidamente una verificación. Este ejemplo funciona en mariadb podría necesitar un ajuste para funcionar con la versión estándar de mysql.
Usando la respuesta de Mansur Ali con un pequeño ajuste reordenando las columnas y agregando algunos ordenamientos para organizar mejor la salida.
Usando un inicio de sesión raíz:
En su lugar, puede cambiar el procedimiento para verificar la tabla mysql.user.
Uso, utilizando un inicio de sesión raíz:
Usé mysql workbench en Ubuntu para ejecutar la parte del procedimiento de creación de esta respuesta.
Como un aparte y un poco fuera del tema aquí, pero también podría tener un procedimiento para mostrar hosts o usuarios desconocidos. Un ejemplo para hosts desconocidos:
Nota de uso: proporcione una cadena de hosts separados por comas para que solo se use un conjunto de '':
También puede hacer que la columna sea variable al incluir otro parámetro en el procedimiento y llamarlo con ShowUnknownHosts (usuario, 'usuario1, usuario2'); por ejemplo.
fuente