Respuestas:
Pruebe esto para crear el usuario:
CREATE USER 'user'@'hostname';
Pruebe 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 accediendo a MySQL en la misma máquina, el nombre de host sería localhost.
Ahora, el desglose.
GRANT
- Este es el comando utilizado para crear usuarios y otorgar derechos a bases de datos, tablas, etc.
ALL PRIVILEGES
- Esto le dice que el usuario tendrá todos los privilegios estándar. Sin embargo, esto no incluye el privilegio de usar el comando GRANT.
dbtest.*
- Estas instrucciones 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 almacenar rutinas 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í. 'hostname' le dice a MySQL desde qué hosts se puede conectar el usuario. Si solo lo desea desde la misma máquina, uselocalhost
IDENTIFIED BY 'password'
- Como habrás adivinado, esto establece la contraseña para ese usuario.
Para crear un usuario en MySQL / MariaDB 5.7.6 y superior, use la CREATE USER
sintaxis :
CREATE USER 'new_user'@'localhost' IDENTIFIED BY 'new_password';
luego, para otorgar todo el acceso a la base de datos (p my_db
. ej. ), use GRANT
Syntax , p. ej.
GRANT ALL ON my_db.* TO 'new_user'@'localhost';
Donde ALL
( priv_type ) se puede reemplazar con específica privilegio tales como SELECT
, INSERT
, UPDATE
, ALTER
, etc.
Luego, para volver a cargar los permisos recién asignados, ejecute:
FLUSH PRIVILEGES;
Para ejecutar los comandos anteriores, debe ejecutar el mysql
comando y escribirlos en prompt, luego cerrar sesión por quit
comando o Ctrl- D.
Para ejecutar desde el shell, use el -e
parámetro (reemplace SELECT 1
con uno de los comandos anteriores):
$ mysql -e "SELECT 1"
o imprimir la declaración de la entrada estándar:
$ echo "FOO STATEMENT" | mysql
Si tiene acceso denegado con lo anterior, especifique los parámetros -u
(para el usuario) y -p
(para la contraseña), o para el acceso a largo plazo establezca sus credenciales ~/.my.cnf
, por ejemplo
[client]
user=root
password=root
Para las personas que no están familiarizadas con la sintaxis de MySQL, aquí hay prácticas funciones de shell que son fáciles de recordar y usar (para usarlas, debe cargar las funciones de shell incluidas más abajo).
Aquí hay un 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, debe copiar y pegar las siguientes funciones en su archivo rc (p .bash_profile
. Ej. ) Y volver a cargar su shell u obtener 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'"
}
Nota: Si prefiere no dejar rastros (como contraseñas) en su historial de Bash, verifique: ¿Cómo evitar que se muestren comandos en el historial de bash?
~/.my.cnf
como se sugirió anteriormente.
Inicie sesión en MySQL:
mysql -u root
Ahora crea y otorga
GRANT ALL PRIVILEGES ON dbTest.* To 'user'@'hostname' IDENTIFIED BY 'password';
Alternativamente, si solo desea otorgar acceso completo 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, así:
GRANT ALL PRIVILEGES ON dbTest.* To ''@'hostname'
Esto está bien para los datos basura en desarrollo. No hagas esto con nada que te importe.
$ 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 mysql no tiene contraseña o simplemente presione el botón "[Entrar]" para omitir . Las cadenas rodeadas de llaves deben reemplazarse con valores reales.
Puede crear nuevos usuarios utilizando la declaración CREAR USUARIO y otorgarles derechos mediante GRANT .
Para mí esto funcionó.
CREATE USER 'spowner'@'localhost' IDENTIFIED BY '1234';
GRANT ALL PRIVILEGES ON test.* To 'spowner'@'localhost';
FLUSH PRIVILEGES;
dónde
El siguiente comando funcionará si desea crear un nuevo usuario y darle 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
) a ese usuario en localhost.
Verifique qué permisos emitió ese comando anterior a ese usuario ejecutando el siguiente comando.
SHOW GRANTS FOR 'user'@'localhost'
Por si acaso, si desea limitar el acceso del usuario a una sola tabla
GRANT ALL ON mydb.table_name TO 'someuser'@'host';
En caso de que host
se omita la parte, el valor predeterminado es el símbolo comodín %
, lo que permite a todos los hosts.
CREATE USER 'service-api';
GRANT ALL PRIVILEGES ON the_db.* TO 'service-api' IDENTIFIED BY 'the_password'
SELECT * FROM mysql.user;
SHOW GRANTS FOR 'service-api'