usuarios - ver privilegios usuario mysql
Crea un nuevo usuario en MySQL y dale acceso completo a una base de datos (7)
Para crear un usuario y otorgar todos los privilegios en una base de datos.
Inicia sesión en MySQL:
mysql -u root
Ahora crea y concede
GRANT ALL PRIVILEGES ON dbTest.* To ''user''@''hostname'' IDENTIFIED BY ''password'';
Usuario anónimo (solo para pruebas locales)
Alternativamente, si solo desea otorgar acceso completo y sin restricciones a una base de datos (por ejemplo, en su máquina local para una instancia de prueba, puede otorgar acceso al usuario anónimo, por ejemplo)
GRANT ALL PRIVILEGES ON dbTest.* To ''''@''hostname''
Estar atentos
Esto está bien para datos basura en desarrollo. No hagas esto con nada que te importe.
Quiero crear un nuevo usuario en MySQL y darle acceso completo a una sola base de datos, por ejemplo, dbTest
, que creo con un comando como create database dbTest;
. ¿Cuáles serían los comandos de MySQL para hacer eso?
Sintaxis
Para crear un usuario en MySQL / MariaDB 5.7.6 y superior, use la sintaxis CREATE USER
:
CREATE USER ''new_user''@''localhost'' IDENTIFIED BY ''new_password'';
luego, para otorgar todo el acceso a la base de datos (por ejemplo, my_db
), use GRANT
Syntax , por ejemplo
GRANT ALL ON my_db.* TO ''new_user''@''localhost'';
Donde ALL
( priv_type ) puede ser reemplazado por un privilegio específico como SELECT
, INSERT
, UPDATE
, ALTER
, etc.
Luego, para recargar los permisos recién asignados, ejecute:
FLUSH PRIVILEGES;
Ejecutando
Para ejecutar los comandos anteriores, debe ejecutar el comando mysql
y escribirlos en prompt, luego cerrar sesión con el comando quit
o con Ctrl - D .
Para ejecutar desde el shell, use el parámetro -e
(reemplace SELECT 1
con uno de los comandos anteriores):
$ mysql -e "SELECT 1"
o imprimir declaración desde la entrada estándar:
$ echo "FOO STATEMENT" | mysql
Si tiene acceso denegado con lo anterior, especifique los parámetros -u
(para usuario) y -p
(para contraseña), o para el acceso a largo plazo, configure sus credenciales en ~/.my.cnf
, por ejemplo
[client]
user=root
password=root
Integración de shell
Para las personas que no están familiarizadas con la sintaxis de MySQL, aquí hay funciones prácticas de shell que son fáciles de recordar y usar (para usarlas, debe cargar las funciones de shell incluidas más abajo).
Aquí está el ejemplo:
$ mysql-create-user admin mypass
| CREATE USER ''admin''@''localhost'' IDENTIFIED BY ''mypass''
$ mysql-create-db foo
| CREATE DATABASE IF NOT EXISTS foo
$ mysql-grant-db admin foo
| GRANT ALL ON foo.* TO ''admin''@''localhost''
| FLUSH PRIVILEGES
$ mysql-show-grants admin
| SHOW GRANTS FOR ''admin''@''localhost''
| Grants for admin@localhost
| GRANT USAGE ON *.* TO ''admin''@''localhost'' IDENTIFIED BY PASSWORD ''*6C8989366EAF75BB670AD8EA7A7FC1176A95CEF4'' |
| GRANT ALL PRIVILEGES ON `foo`.* TO ''admin''@''localhost''
$ mysql-drop-user admin
| DROP USER ''admin''@''localhost''
$ mysql-drop-db foo
| DROP DATABASE IF EXISTS foo
Para usar los comandos anteriores, necesita copiar y pegar las siguientes funciones en su archivo rc (por ejemplo, .bash_profile
) y volver a cargar su shell o fuente el archivo. En este caso, simplemente escriba source .bash_profile
:
# Create user in MySQL/MariaDB.
mysql-create-user() {
[ -z "$2" ] && { echo "Usage: mysql-create-user (user) (password)"; return; }
mysql -ve "CREATE USER ''$1''@''localhost'' IDENTIFIED BY ''$2''"
}
# Delete user from MySQL/MariaDB
mysql-drop-user() {
[ -z "$1" ] && { echo "Usage: mysql-drop-user (user)"; return; }
mysql -ve "DROP USER ''$1''@''localhost'';"
}
# Create new database in MySQL/MariaDB.
mysql-create-db() {
[ -z "$1" ] && { echo "Usage: mysql-create-db (db_name)"; return; }
mysql -ve "CREATE DATABASE IF NOT EXISTS $1"
}
# Drop database in MySQL/MariaDB.
mysql-drop-db() {
[ -z "$1" ] && { echo "Usage: mysql-drop-db (db_name)"; return; }
mysql -ve "DROP DATABASE IF EXISTS $1"
}
# Grant all permissions for user for given database.
mysql-grant-db() {
[ -z "$2" ] && { echo "Usage: mysql-grand-db (user) (database)"; return; }
mysql -ve "GRANT ALL ON $2.* TO ''$1''@''localhost''"
mysql -ve "FLUSH PRIVILEGES"
}
# Show current user permissions.
mysql-show-grants() {
[ -z "$1" ] && { echo "Usage: mysql-show-grants (user)"; return; }
mysql -ve "SHOW GRANTS FOR ''$1''@''localhost''"
}
El siguiente comando funcionará si desea crear un nuevo usuario, asígnele todo el acceso a una base de datos específica (no todas las bases de datos en su Mysql) en su host local.
GRANT ALL PRIVILEGES ON test_database.* TO ''user''@''localhost'' IDENTIFIED BY ''password'';
Esto otorgará todos los privilegios a una base de datos test_database
(en su caso dbTest
) para ese usuario en localhost.
Verifique qué permisos emitió el comando anterior a ese usuario ejecutando el comando siguiente.
SHOW GRANTS FOR ''user''@''localhost''
Por si acaso, si desea limitar el acceso de los usuarios a una sola tabla
GRANT ALL ON mydb.table_name TO ''someuser''@''host'';
Intenta esto para crear el usuario:
CREATE USER ''user''@''hostname'';
Intenta esto para darle acceso a la base de datos dbTest
:
GRANT ALL PRIVILEGES ON dbTest.* To ''user''@''hostname'' IDENTIFIED BY ''password'';
Si está ejecutando el código / sitio que accede a MySQL en la misma máquina, hostname sería localhost.
Ahora, la ruptura.
GRANT
: este es el comando utilizado para crear usuarios y otorgar derechos a bases de datos, tablas, etc.
ALL PRIVILEGES
: esto le indica que el usuario tendrá todos los privilegios estándar. Sin embargo, esto no incluye el privilegio de usar el comando GRANT.
dbtest.*
: estas instrucciones de MySQL para aplicar estos derechos para su uso en toda la base de datos dbtest. Puede reemplazar el * con nombres de tabla específicos o rutinas de almacenamiento si lo desea.
TO ''user''@''hostname''
- ''usuario'' es el nombre de usuario de la cuenta de usuario que está creando. Nota: debe tener las comillas simples allí. ''nombre de host'' le dice a MySQL desde qué hosts se puede conectar el usuario. Si solo lo desea de la misma máquina, use localhost
IDENTIFIED BY ''password''
- Como habrías adivinado, esto establece la contraseña para ese usuario.
Para mí esto funcionó.
CREATE USER ''spowner''@''localhost'' IDENTIFIED BY ''1234'';
GRANT ALL PRIVILEGES ON test.* To ''spowner''@''localhost'';
FLUSH PRIVILEGES;
dónde
- spowner: nombre de usuario
- 1234: contraseña del propietario
- prueba: la base de datos ''spowner'' tiene derecho de acceso a
Puede crear nuevos usuarios utilizando la declaración CREATE USER y otorgarles derechos utilizando GRANT .
$ mysql -u root -p -e "grant all privileges on dbTest.* to
`{user}`@`{host}` identified by ''{long-password}''; flush privileges;"
ignore la opción -p , si el usuario de mysql no tiene contraseña o simplemente presione el botón "[Enter]" para pasar por alto. las cadenas rodeadas de llaves deben reemplazarse con los valores reales.