Existem duas maneiras de adicionar usuários: utilizando
instruções GRANT
ou manipulando as tabelas
de permissões do MySQL diretamente. O método preferido é
utilizar instruções GRANT
, porque elas são
mais concisas e menos propensas a erros. See
Secção 4.4.1, “A Sintaxe de GRANT
e REVOKE
”.
Existem vários programas de colaboradores (como o
phpMyAdmin
) que podem ser utilizados para
criar e administrar usuários. See Apêndice B, Contribuição de Programas.
Os exemplos abaixo mostram como usar o cliente
mysql
para configurar novos usuários. Estes
exemplos assumem que privilégios são configurados de acordo
com os padrões descritos na seção anterior. Isto significa
que para fazer alterações, você deve se conectar na mesma
máquina em que o mysqld
está executando,
você deve se conectar com o usuário root
, e
o usuário root
deve ter os privilégios
inster ao banco de dados
mysql
e o administrativo
reload. Também, se você
alterou a senha do usuário root
, você deve
especificá-la para os comandos mysql
abaixo.
Primeiro, use o programa mysql
para se
conectar ao servidor como o usuário root
do
MySQL:
shell> mysql --user=root mysql
Você pode adicionar novos usuários utilizando instruções
GRANT
:
mysql>GRANT ALL PRIVILEGES ON *.* TO monty@localhost
IDENTIFIED BY 'alguma_senha' WITH GRANT OPTION; mysql>GRANT ALL PRIVILEGES ON *.* TO monty@'%'
IDENTIFIED BY 'alguma_senha' WITH GRANT OPTION; mysql>GRANT RELOAD,PROCESS ON *.* TO admin@localhost;
mysql>GRANT USAGE ON *.* TO dummy@localhost;
Estas instruções GRANT
configuram três
novos usuários:
monty
Um superusuário completo que pode conectar ao servidor de
qualquer lugar, mas deve utilizar uma senha
'alguma_senha'
para fazer isto. Perceba
que devemos utilizar instruções GRANT
para monty@localhost
e
monty@"%"
. Se nós não adicionarmos a
entrada com localhost
, a entrada para o
usuário anônimo para localhost
que é
criada por mysql_install_db
toma
precedência quando nos conectarmos da máquina local,
porque ele contem um campo Host
com um
valor mais específico e também vem antes na ordenação da
tabela user
.
admin
Um usuário que possa conectar de
localhost
sem uma senha e que é
concedido os privilégios administrativos
reload e
process. Isto permite ao
usuário a execução dos comandos mysqladmin
reload
, mysqladmin refresh
e
mysqladmin flush-*
, bem como o
mysqladmin processlist
. Nenhum
privilégio a nível de bancos de dados é concedido.
(Depois eles podem ser adicionados utilizando instruções
GRANT
adicionais.)
dummy
Um usuário que pode conectar sem uma senha, mas somente na
máquina local. Não são concedidos nenhum privilégio---o
tipo de privilégio USAGE
permite a
criação de um usuário sem privilégios. Ele tem o efeito
de criar todos os privilégios globais com
'N'
. Considera-se que você irá conceder
privilégios específicos a conta posteriormente.
Também é possível adicionar a mesma informação de acesso do
usuário diretamente, utilizando instruções
INSERT
e depois dizendo ao servidor para
recarregar as tabelas de permissões:
shell>mysql --user=root mysql
mysql>INSERT INTO user VALUES('localhost','monty',PASSWORD('alguma_senha'),
'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y'); mysql>INSERT INTO user VALUES('%','monty',PASSWORD('alguma_senha'),
'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y'); mysql>INSERT INTO user SET Host='localhost',User='admin',
Reload_priv='Y', Process_priv='Y'; mysql>INSERT INTO user (Host,User,Password)
VALUES('localhost','dummy',''); mysql>FLUSH PRIVILEGES;
Dependendo da sua versão do MySQL, você pode precisar utilizar
um número diferente de valores 'Y'
acima.
(Versões anteriores à versão 3.22.11 tem menos campos de
privilégios, e posteriores a 4.02 têm mais). Para o usuário
admin
, a maior sintaxe legível de
INSERT
usando SET
que
está disponível a partir da versão 3.22.11 é a utilizada.
Note que para configurar um superusuário, você só precisar
criar uma entrada na tabela user
com os
campos de privilégios configurados para 'Y'
.
Não é necessário gerar entradas nas tabelas
db
ou host
.
Na última instrução INSERT
(para o
usuário dummy
), apenas as colunas
Host
, User
e
Password
nos registros da tabela
user
tem valores atribuídos. Nenhuma das
colunas de privilégios são definidas explicitamente, assim o
MySQL atribui a todas o valor padrão de 'N'
.
Isto é a mesma coisa que o GRANT USAGE
faz.
O seguinte exemplo adiciona um usuário
custom
que pode acessar o banco de dados
bankaccout
apenas do
localhost
, o banco de dados
expenses
somente de
whitehouse.gov
e o banco de dados
customer
de todas de
server.domain
. Ele deseja utilizar a senha
obscure
das três máquinas.
Para configurar os privilégios deste usuário utilizando
instruções GRANT
, execute estes comandos:
shell>mysql --user=root mysql
mysql>GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP
->ON bankaccount.*
->TO custom@localhost
->IDENTIFIED BY 'obscure';
mysql>GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP
->ON expenses.*
->TO custom@'whitehouse.gov'
->IDENTIFIED BY 'obscure';
mysql>GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP
->ON customer.*
->TO custom@'server.domain'
->IDENTIFIED BY 'obscure';
Para configurar os privilégios do usuário modificiando as
tabelas de permissões diretamente, utilize estes comandos
(perceba o FLUSH PRIVILEGES
no final):
shell>mysql --user=root mysql
mysql>INSERT INTO user (Host,User,Password)
->VALUES('localhost','custom',PASSWORD('obscure'));
mysql>INSERT INTO user (Host,User,Password)
->VALUES('whitehouse.gov','custom',PASSWORD('obscure'));
mysql>INSERT INTO user (Host,User,Password)
->VALUES('server.domain','custom',PASSWORD('obscure'));
mysql>INSERT INTO db
->(Host,Db,User,Select_priv,Insert_priv,Update_priv,Delete_priv,
->Create_priv,Drop_priv)
->VALUES
->('localhost','bankaccount','custom','Y','Y','Y','Y','Y','Y');
mysql>INSERT INTO db
->(Host,Db,User,Select_priv,Insert_priv,Update_priv,Delete_priv,
->Create_priv,Drop_priv)
->VALUES
->('whitehouse.gov','expenses','custom','Y','Y','Y','Y','Y','Y');
mysql>INSERT INTO db
->(Host,Db,User,Select_priv,Insert_priv,Update_priv,Delete_priv,
->Create_priv,Drop_priv)
->VALUES('server.domain','customer','custom','Y','Y','Y','Y','Y','Y');
Como no exemplo anterior que usaram as instruções
INSERT
, você pode precisar de usar um
número diferentes de valores 'Y'
, dependendo
de sua versão do MySQL.
As primeiras três instruções INSERT
adicionam entradas na tabela user
que permite
ao usuário custom
conectar a partir de
várias máquinas com a senha determinada, mas não concede
permissões ao mesmo (todos os privilégios são configurados
com o valor padrão de 'N'
). As próximas
três instruções INSERT
adicionam entradas
na tabela db
que concedem privilégios à
custom
para os bancos de dados
bankaccount
, expenses
e
customer
, mas só quando acessados à partir
das máquinas apropriadas. Normalmente, depois de modificar as
tabelas de permissões diretamente, você deve dizer ao servidor
para recarregá-las (com FLUSH PRIVILEGES
)
para que as alterações nos privilégios tenham efeito.
Se você deseja fornecer a um usuário específico acesso de
qualquer máquina em um determinado domínio (por exemplo,
meudomínio.com
), você pode utilizar uma
instrução GRANT
como a seguir:
mysql>GRANT ...
->ON *.*
->TO myusername@'%.mydomain.com'
->IDENTIFIED BY 'mypassword';
Para realizar a mesma coisa modificando diretamente as tabelas de permissões, faça isto:
mysql>INSERT INTO user VALUES ('%.meudominio, 'meunomedeusuario'
PASSWORD('minhasenha'),...); mysql>FLUSH PRIVILEGES;
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.