0

Como gerenciar dados MySQL e usuários em terminal Linux.

#Linux #MySQL
Tiago Jesus
Tiago Jesus

Objetivo deste artigo é demonstrar como gerenciar um bando de dados MySQL através do terminal do Linux, o Bash (equivalente ao cmd ou powershell do Windows). Usar comandos de shell (principalmente em Linux/unix) para manipular arquivos e executar programas de shell é uma ótima prática que qualquer um da área de computação deve conhecer e praticar.


Instalando MySQL pelo terminal Linux.

Eu utilizo o Pop! OS no meu PC, que é uma distro baseada no Ubuntu, com esse tutorial, você pode utilizar Ubuntu ou qualquer distro baseada nele, aliás você pode utilizar um WSL caso você utilize Windows 10 se não quiser instalar uma distro do zero (apenas tenha certeza que é Ubuntu ou uma variante dele).


Para instalar o MySQL, utiliza-se o seguinte comando no seu terminal Linux para baixar o pacote do repositório "apt":

sudo apt install mysql-server


Após isto, digite o comando:

sudo mysql 

Este comando é o comando que inicialmente precisamos usar para acessar o MySQL, acessamos como "Super User" pois não temos nenhum usuário criado capaz de acessar o nosso banco ainda.


Com o comando inserido acima, aparece:

tiago@pop-os:~$ sudo mysql
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 12
Server version: 8.0.25-0ubuntu0.20.04.1 (Ubuntu)

Copyright (c) 2000, 2021, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>


agora estamos no shell do mysql, neste shell apenas comando SQL são reconhecidos.


Listar e criar um banco de dados

Dentro do shell do mysql, para listar os banco de dados presentes, use o comando:

mysql> show databases;


pressionando enter, é mostrado:

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.01 sec)

mysql>


estes bancos mostrados, são criados automaticamente na instalação do MySQL, o banco mais importante daqui é o 'mysql', que onde fica os usuários do bando e é o que vamos usar para listar todos os usuários do MySQL. Vamos criar um bando de dados para uma loja de livros, vamos chamar este banco de 'livraria_tux', crie através do comando:

mysql> CREATE DATABASE livraria_tux;

e pressione enter, use o comando 'show databases;' para ver que o novo db está presente.


Criando tabelas para o banco:

Antes de criar a tabela, precisamos 'usar' o banco que acabamos de criar, para isso use o comando:

mysql> use livraria_tux;

e pressione enter.


Agora, criaremos uma tabela para gravar todos os livros de nossa loja, neste caso, vou criar uma tabela chamada 'livros' da seguinte forma:


mysql> create table livros(
    -> id int not null,
    -> titulo varchar(30) not null,
    -> autor VARCHAR(33) not null,
    -> preco int not null,
    -> primary key(id)
    -> );
Query OK, 0 rows affected (0.02 sec)


Perceba que não digitei todos os comandos em uma linha, a cada enter que eu pressiono, o shell do MySQL quebra a linha, tornando melhor a leitura do que você está digitando, o shell faz isso até que digite ';' no final e pressiona enter, assim ele entende que é o final do comando.


Com esta tabela, inseri os seguintes dados nela:

mysql> select * from livros;
+-----+----------------------+------------+-------+
| id  | titulo               | autor      | preco |
+-----+----------------------+------------+-------+
| 100 | Kotlin Pro Tips      | Tiago O.   |   120 |
| 101 | Java Design Patterns | Marcelo D. |   130 |
| 103 | CUDA GPGPU Computing | Tiago O.   |   143 |
+-----+----------------------+------------+-------+
3 rows in set (0.00 sec)
mysql>

Veja que mesmo sendo um programa de terminal, os comandos SQL são os mesmo usados em um front-end com GUI e é muito prático e rápido de se obter os dados do banco MySQL :).


Listar e Gerenciar Usuários

Para listar os usuários presentes use o seguinte comando dentro do shell MySQL:

SELECT user, host FROM mysql.user;


'mysql' é nome do banco padrão onde fica a tabela dos usuários, e 'user' é a tabela,

ao pressionar enter, é mostrado:

mysql> SELECT user, host FROM mysql.user;
+------------------+-----------+
| user             | host      |
+------------------+-----------+
| debian-sys-maint | localhost |
| mysql.infoschema | localhost |
| mysql.session    | localhost |
| mysql.sys        | localhost |
| root             | localhost |
+------------------+-----------+
5 rows in set (0.00 sec)


Todos estes usuários são usuários padrões criados automaticamente quando instalamos o MySQL em nossa máquina Linux, nós conseguimos acessar o banco porque o MySQL cria o usuário 'root' para nós, que é o método de acesso 'Super User' ao banco, mas não devemos deixar qualquer pessoa acessar o banco ou utilizar o sistema como 'root', pois um usuário 'root/super user' tem o poder de alterar qualquer arquivo ou dado em um sistema Linux. A coluna host indica da onde o usuário acessa o bando, que no caso localhost indica que o acesso é feito da própria máquina que está instalado o MySQL.


Criando um Usuário para o Banco

Para criar um novo usuário, use este comando:

mysql> CREATE USER 'nome_usuario'@'localhost' IDENTIFIED BY 'usuario_password';


No lugar de 'nome_usuario' coloque um nome que você quiser, e em 'usuario_password' a senha do mesmo, no meu caso, vou usar 'ad_admin' como usuário e 'admin' como senha. Ao digitar o comando e pressionar Enter aparece a mensagem:

mysql> CREATE USER 'db_admin'@'localhost' IDENTIFIED BY 'admin';
Query OK, 0 rows affected (0.02 sec)
mysql>


Ao executar o comando para listar usuários, o nosso 'db_admin' agora aparece na lista:

mysql> SELECT user, host FROM mysql.user;
+------------------+-----------+
| user             | host      |
+------------------+-----------+
| db_admin         | localhost |
| debian-sys-maint | localhost |
| mysql.infoschema | localhost |
| mysql.session    | localhost |
| mysql.sys        | localhost |
| root             | localhost |
+------------------+-----------+
6 rows in set (0.00 sec)



Dando permissão ao usuário criado

Como minha intenção é criar um administrador do banco, irei dar todas as permissões para o 'db_admin' administrar banco da loja criada pelo comando:

GRANT ALL PRIVILEGES ON *.* TO 'db_admin'@'localhost';


Lembre-se que ainda estamos acessando o MySQL como 'Super User', por isso conseguimos dar, remover e criar usuários pelo shell do MySQL, agora que o nosso administrador contratado tem total poder total sobre o banco mas NÃO sobre o SO, não precisamos mais logar como 'super user' para gerenciar o banco de nossa loja.


Por isso, você já pode sair do shell do MySQL pelo comando 'quit' e inserir este novo comando para logar no banco como 'db_admin':

mysql -u db_admin -p


O '-u' indica que o próximo argumento será o nome do 'user', que no caso é 'db_admin', e '-p' indica que após pressionar enter iremos iserir a senha deste 'user'.


Criando um novo usuário pelo 'db_admin'.


Como nosso 'db_admin' tem permissão para criar usuários, vamos criar um usuário para o funcionário da loja de nome 'joao_tux' de senha 'user':


CREATE USER 'joao_tux'@'localhost' IDENTIFIED BY 'user';


Como João e um novo funcionário da livraria Tux e é uma pessoa com pouca experiência com MySQL, ele só poderá acessar o banco 'livraria_tux' e apenas selecionar, inserir e atualizar produtos da tabela 'livros' do respectivo banco. Para isso, fazemos "quit" de 'db_admin' e logamos novamente como 'root' pelo comando 'sudo mysql' e usamos o seguinte comando para dar permissões para ele (Joao):


GRANT SELECT, INSERT, UPDATE ON livraria_tux.livros TO 'joao_tux'@'localhost';


Após isso, 'joao_tux' pode logar no MySQL da loja, e nota-se que João apenas pode ver e ter permissão limitada à tabela livros do banco 'livraria_tux'.


Neste exemplo estamos logados como 'joao_tux', veja que ele pode selecionar e inserir items na tabela, mas quando ele tenta deletar, dá o erro de 'command denied', pois root não deu permissão à ele para deletar dados da tabela.


mysql> select * from livraria_tux.livros;
+----+-------------------------------+-------------+-------+
| id | titulo                        | autor       | preco |
+----+-------------------------------+-------------+-------+
|  1 | Java Programming              | GOSTLING J. |   231 |
|  2 | Data Structures               | Tiago O.    |   210 |
|  3 | OpenGL Programming With C++19 | Tiago O.    |   180 |
|  4 | CUDA Palallel Programming     | ORLANDO T.  |   130 |
|  5 | Network Programming With Java | LOPES J.    |   156 |
+----+-------------------------------+-------------+-------+
5 rows in set (0.00 sec)

mysql> use livraria_tux;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> delete from livros where id = 1;
ERROR 1142 (42000): DELETE command denied to user 'joao_tux'@'localhost' for table 'livros'
mysql> insert into livros(titulo,autor, preco)
    -> values('Fedora Server Systems', 'Arnaldo D.', 278);
Query OK, 1 row affected (0.01 sec)



Conclusões.

Meu objetivo aqui foi demonstrar as vantagens de se gerenciar um banco de dados MySQL por uma distro Linux como Ubuntu, aqui não foi preciso abrir nenhum navegador para baixar executável, fizemos tudo isso, desde baixar e instalar o MySQL até criar tabelas e usuários, tudo através do terminal shell do Linux, utilizar comandos de shell no Linux pode parecer mas não é dificil, como tudo na vida precisamos sair da zona de conforto das GUI's e praticar comandos no shell do Linux. Não apenas MySQL mas centenas de tarefas e programas podem ser executados pelo terminal Linux, e numa velocidade muito maior do que com GUI, e quando você começa a entender o conceito e ganhar prática, você começa a se tornar um profissional muito mais ágil pois não ficará dependente de programas com GUI.

0
3

Comentários (0)

Programador e formando em Ciência da Computação.

Brasil