Mostrar mensagens com a etiqueta grant. Mostrar todas as mensagens
Mostrar mensagens com a etiqueta grant. Mostrar todas as mensagens

sexta-feira, 21 de setembro de 2012

MySQL Multi-Premissões em servidores remotos

No seguimento da publicação anterior, foi-me sugerido uma situação um pouco diferente, que é quando necessitamos de fazer exactamente a mesma operação mas com recurso à consola.

É verdade que é possível conectar um software de gestão de base de dados ao servidor remoto, mas também é verdade que nem sempre que tem servidor disponibiliza esse acesso assim como pode aumentar o risco de ataque ao sistema.

A informação que se segue foi testada e elaborada com recurso um MySQL Server instalado num computador com Ubuntu Linux, mas o importante é existir um acesso ao servidor.

Aceder ao MySQL

 mysql -u root -p 
após o enter aguarda que se escreva a password de acesso.
Nota: exemplo com root, mas pode ser qualquer utilizador desde que tenha acesso total

Após aceder com sucesso ao mysql a consola passa ter a informação que passa a aceitar comandos para o mysql aparecendo no inicio mysql> 



Criar novo utilizado

 CREATE USER 'blogUser'@'localhost' IDENTIFIED BY 'uma_password'; 

CREATE USER - É o comando principal
- Entre plicas ( ' ) o nome do utilizador seguido de um at (arroba) @ e entre plicas o localhost
Nota: se quiser acesso exterior em vez de localhost deverá usar o símbolo de percentagem (%) 
IDENTIFIED BY - Refere que o utilizador vai ter uma password de acesso
- Entre plicas a password
- Não esquecer de terminar com ponto e virgula (;) se não a consola ao carregar no enter vai passar para uma linha com o simbolo -> se isto acontecer, basta aplicar o ; e enter.

No fim deverá receber a seguinte mensagem na janela
 Query OK, 0 rows affected (0.00 sec) 

Agora saia da consola do MySQL
 quit 

Mais informações aqui

Criar ficheiro de SQL

Para usar o código de criar as permissões referido na publicação anterior  pode fazer de várias maneiras:
- Usar um editor de texto na consola (vi, nano, pico),
- Enviar o ficheiro por SSH ou FTP

Nota: Garanta que sabe a localização de onde coloca o ficheiro.

Executar ficheiro SQL e exportar o resultado

Para executar o ficheiro escreva o seguinte comando:
 mysql -u root -p 'blogBD' < /dir/sql/ficheiro.sql > /dir/sql/resultado.sql 

- Sendo 'blogBD' o nome da base de dados de destino

A consola volta a pedir a password, e se tudo estiver correcto volta à condição inicial, sendo que o ficheiro resultado.sql foi criado na directoria indicada.

Verificar ficheiro SQL

Agora é necessário dar uma vista de olhos no ficheiro, navegue até à pasta, e edite o ficheiro, neste caso é mesmo necessário porque o titulo da coluna também é exportada, logo tem que remover a 1ª linha do ficheiro.

Para tornar o processo mais rápido, pode adicionar no fim do ficheiro o comando:
 FLUSH PRIVILEGES; 

Executar ficheiro SQL

Por fim, com o ficheiro já operacional, basta indicar o seguinte comando:
 mysql -u root -p 'blogBD' < /dir/sql/resultado.sql; 

- Sendo 'blogBD' o nome da base de dados que vai receber a informação

Testar novo utilizador

Agora que o novo utilizador foi criado e os privilégios atribuídos, pode fazer o teste fazendo login e acedendo à base de dados, com os seguintes comandos:
 mysql -u blogUser -p 
 USE blogBD 
 SHOW TABLES 

--------------------------------------------
Bom Fim de Semana, se tiverem questões disponham e comentar ou enviar email.

quarta-feira, 19 de setembro de 2012

MySQL - Permissões em várias tabelas

Como diz o titulo esta publicação refere-se ao motor de base de dados MySQL,  e a situação que surgiu tinha como base a atribuição de permissões a um determinado utilizador a várias tabelas, mas não todas.

Esta operação mesmo com programa de gestão de bases de dados como o MySQL Workbench  é um operação que se torna penosa, visto que usa sistemas de árvore para navegar e vistos para marcar as permissões.

A maneira mais rápida então que arranjei de resolver isto, é através da criação de um script para atribuir as permissões ao utilizador por tabela dentro da base de dados.

Execute o seguinte SQL.
Nota: Garanta que o seu utilizador tem permissões totais dentro do MySQL, porque o script vai consultar tabelas de controle do motor.

Antes de prosseguir, já deve ter o utilizador criado no MySQL

-- Cria a linha a utilizar na próxima execução, atribuía mais permissões se assim se justificar 

SELECT CONCAT("GRANT SELECT, INSERT, UPDATE, DELETE ON ", TABLE_NAME," TO 'testeUser'@'localhost' ;") AS ex
-- Aqui vai ao motor requisitar todas as tabelas
FROM INFORMATION_SCHEMA.TABLES
-- Indica que só quer as tabelas da base de dados indicada no WHERE
WHERE TABLE_SCHEMA = "NomeBaseDados"
-- Se pretender excluir algumas tabelas indique o nome das mesmas
AND TABLE_NAME NOT IN ('tblPagamentos','tblBancos');    


Nota: se pretender incluir apenas algumas tabelas as linha acima deverá ser:
AND TABLE_NAME IN ('tblPagamentos','tblBancos');      

O resultado final, deverá ser exportado para ficheiro de texto.



Próximo passo, executar o que está no ficheiro de texto.

E por fim executar o commando :
FLUSH PRIVILEGES;

Para que todas as permissões se tornem activas.