Respostas:
Tente isso para criar o usuário:
CREATE USER 'user'@'hostname';
Tente isto para dar acesso ao banco de dados dbTest
:
GRANT ALL PRIVILEGES ON dbTest.* To 'user'@'hostname' IDENTIFIED BY 'password';
Se você estiver executando o código / site acessando o MySQL na mesma máquina, o nome do host seria localhost.
Agora, o colapso.
GRANT
- Este é o comando usado para criar usuários e conceder direitos a bancos de dados, tabelas, etc.
ALL PRIVILEGES
- Isso indica que o usuário terá todos os privilégios padrão. No entanto, isso não inclui o privilégio de usar o comando GRANT.
dbtest.*
- Estas instruções MySQL aplicam esses direitos para uso em todo o banco de dados dbtest. Você pode substituir o * por nomes de tabelas específicos ou rotinas de armazenamento, se desejar.
TO 'user'@'hostname'
- 'usuário' é o nome de usuário da conta que você está criando. Nota: Você deve ter aspas simples lá. 'hostname' diz ao MySQL de quais hosts o usuário pode se conectar. Se você quiser apenas da mesma máquina, uselocalhost
IDENTIFIED BY 'password'
- Como você deve ter adivinhado, isso define a senha para esse usuário.
Para criar usuário no MySQL / MariaDB 5.7.6 e superior, use a CREATE USER
sintaxe :
CREATE USER 'new_user'@'localhost' IDENTIFIED BY 'new_password';
para conceder todo acesso ao banco de dados (por exemplo my_db
), use GRANT
Sintaxe , por exemplo
GRANT ALL ON my_db.* TO 'new_user'@'localhost';
Onde ALL
( tipo_priv ) pode ser substituído por privilégio específico, como SELECT
, INSERT
, UPDATE
, ALTER
, etc.
Em seguida, para recarregar as permissões recém-atribuídas, execute:
FLUSH PRIVILEGES;
Para executar os comandos acima, você precisa executar o mysql
comando e digitá-los no prompt; em seguida, efetue logout pelo quit
comando ou Ctrl- D.
Para executar a partir do shell, use o -e
parâmetro (substitua SELECT 1
por um dos comandos acima):
$ mysql -e "SELECT 1"
ou imprima a instrução da entrada padrão:
$ echo "FOO STATEMENT" | mysql
Se o acesso foi negado acima, especifique os parâmetros -u
(para usuário) e -p
(para senha) ou, para acesso a longo prazo, defina suas credenciais ~/.my.cnf
, por exemplo
[client]
user=root
password=root
Para pessoas que não estão familiarizadas com a sintaxe do MySQL, aqui estão algumas funções úteis do shell, fáceis de lembrar e usar (para usá-las, você precisa carregar as funções do shell incluídas mais adiante).
Aqui está um exemplo:
$ 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 os comandos acima, você precisa copiar e colar as seguintes funções no seu arquivo rc (por exemplo .bash_profile
) e recarregar seu shell ou originar o arquivo. Nesse caso, basta digitar 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: Se você preferir não deixar rastreio (como senhas) no seu histórico do Bash, verifique: Como impedir que os comandos apareçam no histórico do bash?
~/.my.cnf
conforme sugerido acima.
Entre no MySQL:
mysql -u root
Agora crie e conceda
GRANT ALL PRIVILEGES ON dbTest.* To 'user'@'hostname' IDENTIFIED BY 'password';
Como alternativa, se você deseja apenas conceder acesso irrestrito total a um banco de dados (por exemplo, na sua máquina local para uma instância de teste, você pode conceder acesso ao usuário anônimo, da seguinte forma:
GRANT ALL PRIVILEGES ON dbTest.* To ''@'hostname'
Isso é bom para dados indesejados no desenvolvimento. Não faça isso com qualquer coisa que lhe interessa.
$ mysql -u root -p -e "grant all privileges on dbTest.* to
`{user}`@`{host}` identified by '{long-password}'; flush privileges;"
ignore a opção -p , se o usuário do mysql não tiver senha ou apenas pressione o botão "[Enter]" para ignorar. as cordas cercadas por chaves precisam ser substituídas por valores reais.
Você pode criar novos usuários usando a instrução CREATE USER e conceder direitos a eles usando GRANT .
Para mim, isso funcionou.
CREATE USER 'spowner'@'localhost' IDENTIFIED BY '1234';
GRANT ALL PRIVILEGES ON test.* To 'spowner'@'localhost';
FLUSH PRIVILEGES;
Onde
O comando abaixo funcionará se você desejar criar um novo usuário, dar a ele todo o acesso a um banco de dados específico (nem todos os bancos de dados no seu Mysql) no seu host local.
GRANT ALL PRIVILEGES ON test_database.* TO 'user'@'localhost' IDENTIFIED BY 'password';
Isso concederá todos os privilégios a um banco de dados test_database
(no seu caso dbTest
) para esse usuário no host local.
Verifique quais permissões o comando acima emitiu para esse usuário executando o comando abaixo.
SHOW GRANTS FOR 'user'@'localhost'
Por precaução, se você deseja limitar o acesso do usuário a apenas uma única tabela
GRANT ALL ON mydb.table_name TO 'someuser'@'host';