Adicionando Novos Usuários ao MariaDB
Existem duas maneiras de adicionar usuários: utilizando instruções GRANT
ou manipulando as tabelas de permissões do MariaDB diretamente. O método preferido é utilizar instruções GRANT
, porque elas são mais concisas e menos propensas a erros. Leia "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. Leia Apêndice B, Contribuição de Programas.
Os exemplos abaixo mostram como usar o cliente MariaDB
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 MariaDB
e o administrativo reload. Também, se você alterou a senha do usuário root
, você deve especificá-la para os comandos MariaDB
abaixo.
Primeiro, use o programa MariaDB
para se conectar ao servidor como o usuário root
do MariaDB:
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çõesGRANT
paramonty@localhost
emonty@'%'
. Se nós não adicionarmos a entrada comlocalhost
, a entrada para o usuário anônimo paralocalhost
que é criada pormysql_install_db
toma precedência quando nos conectarmos da máquina local, porque ele contem um campoHost
com um valor mais específico e também vem antes na ordenação da tabelauser
.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 comandosmysqladmin reload
,mysqladmin refresh
emysqladmin flush-*
, bem como omysqladmin processlist
. Nenhum privilégio a nível de bancos de dados é concedido. (Depois eles podem ser adicionados utilizando instruçõesGRANT
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 MariaDB, 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 MariaDB 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 MariaDB.
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: