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?
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.
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'"
}
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.$ 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.
Você pode criar novos utilizadores usando a Declaração crie o utilizador e dê-lhes direitos usando GRANT.
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';