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@localhostIDENTIFIED 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 mysqlmysql>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 mysqlmysql>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 mysqlmysql>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.
