Criar um novo utilizador no MySQL e dar-lhe acesso completo a uma base de dados

quero criar um novo utilizador no MySQL e dar-lhe acesso total apenas a uma base de dados, digamos dbTest, que crio com um comando como create database dbTest;. Quais seriam as ordens do MySQL para fazer isso?

Author: user664833, 2009-11-12

6 answers

Tente isto para criar o utilizador:

CREATE USER 'user'@'hostname';
Tenta isto para lhe dar acesso à base de dados.dbTest:
GRANT ALL PRIVILEGES ON dbTest.* To 'user'@'hostname' IDENTIFIED BY 'password';

Se estiver a correr o código / site a aceder ao MySQL na mesma máquina, o hostname seria localhost.

Agora, a avaria.

GRANT - Este é o comando usado para criar usuários e conceder direitos a bancos de dados, tabelas, etc.

ALL PRIVILEGES - Isto diz-lhe que o utilizador terá todos os privilégios normais. Isto não inclui o privilégio de usar o No entanto, GRANT command.

dbtest.* - esta instrução MySQL para aplicar estes direitos para uso em toda a base de dados dbtest. Você pode substituir o * por nomes de tabela específicos ou rotinas de loja, se desejar.

TO 'user'@'hostname' - 'O Utilizador' é o nome de Utilizador da conta de utilizador que está a criar. Nota: você deve ter as citações individuais lá. o 'hostname' diz ao MySQL de onde é que o utilizador se pode ligar. Se você só o quiser da mesma máquina, use localhost

IDENTIFIED BY 'password' - Como você teria adivinhei, isto define a senha para esse utilizador.

 693
Author: Dan McGrath, 2018-01-03 14:11:43

Sintaxe

Para criar um utilizador no MySQL / MariaDB 5, 7, 6 ou superior, use CREATE USER sintaxe:

CREATE USER 'new_user'@'localhost' IDENTIFIED BY 'new_password';

Em seguida, para conceder todo o acesso à base de dados (por exemplo my_db), use GRANT sintaxe , por exemplo

GRANT ALL ON my_db.* TO 'new_user'@'localhost';

Onde ALL (priv_type) pode ser substituído com privilégio específico, tais como SELECT, INSERT, UPDATE, ALTER, etc.

Depois, para recarregar as permissões atribuídas de novo, executar:

FLUSH PRIVILEGES;

A executar

Para correr por cima dos comandos, terá de executar o comando mysql e escrevê-los na linha de comandos, e depois sair pelo comando quit ou Ctrl-D .

Para executar a partir da shell, use o parâmetro -e (substitua SELECT 1 por um dos comandos acima):

$ mysql -e "SELECT 1"

Ou a declaração de impressão a partir da entrada normal:

$ echo "FOO STATEMENT" | mysql

Se tiver acesso negado com o acima, especifique -u (para o utilizador) e -p (para a senha), ou para o acesso a longo prazo defina as suas credenciais em ~/.my.cnf, por exemplo

[client]
user=root
password=root

Integração na Concha

Para as pessoas que não estão familiarizadas com a sintaxe MySQL, Aqui estão as funções de shell úteis que são fáceis de lembrar e usar (para usá-las, você precisa carregar as funções de shell incluídas mais abaixo).

Aqui está o 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, tem de copiar e colar as seguintes funções no seu ficheiro rc (por exemplo:.bash_profile) e recarrega a tua concha ou origina o ficheiro. Neste caso, escreva apenas 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'"
}
 218
Author: kenorb, 2018-07-26 11:30:37

Para criar um utilizador e conceder todos os privilégios numa base de dados.

Entra no MySQL:

mysql -u root
Agora cria e concede
GRANT ALL PRIVILEGES ON dbTest.* To 'user'@'hostname' IDENTIFIED BY 'password';

Utilizador anónimo (apenas para testes Locais)

([6]}alternadamente, se você apenas quiser conceder acesso ilimitado a uma base de dados (por exemplo, na sua máquina local para uma instância de teste, você pode conceder acesso ao usuário anônimo, assim:
GRANT ALL PRIVILEGES ON dbTest.* To ''@'hostname'

Estejam cientes

Isto é bom para dados de lixo em desenvolvimento. Não faças isto com nada. preocupar.
 54
Author: superluminary, 2018-05-31 14:31:04
$ mysql -u root -p -e "grant all privileges on dbTest.* to
`{user}`@`{host}` identified by '{long-password}'; flush privileges;"

Ignorar - p opção, se o utilizador do mysql não tiver senha ou basta carregar no botão" [Enter] " para passar. as cadeias de caracteres rodeadas de chavetas precisam de ser substituídas por valores reais.

 14
Author: S.K. Venkat, 2016-06-22 12:21:09

Você pode criar novos utilizadores usando a Declaração crie o utilizador e dê-lhes direitos usando GRANT.

 13
Author: candiru, 2009-11-12 06:17:10

O comando abaixo irá funcionar se quiser criar um novo utilizador dê-lhe todo o acesso a uma base de dados específica(nem todas as bases de dados no seu Mysql) no seu local.

GRANT ALL PRIVILEGES ON test_database.* TO 'user'@'localhost' IDENTIFIED BY 'password';

Isto irá conceder todos os privilégios a uma base de dados test_database (no seu caso dbTest) a esse utilizador em localhost.

Verifique quais as permissões que acima do comando foram emitidas para esse utilizador, executando o comando abaixo.

SHOW GRANTS FOR 'user'@'localhost'

Só por precaução, se quiser limitar o acesso do utilizador a apenas uma tabela

GRANT ALL ON mydb.table_name TO 'someuser'@'host';
 1
Author: Prabhakar, 2017-10-24 13:48:03