Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

h4v3st

[Resolvido] Sistema de Controle de Acesso do MySQL

Recommended Posts

Olá pessoal, estou postando um manual completo de controle de usuários no MySQL.

Espero que gostem e qualquer dúvida pergunte!

 

A principal funcao é autenticar o usuário que conecta no host e associar a

ele privilegios na base de dados tal como: SELECT, INSERT, UPDATE e DELETE.

 

O MySQL envolve dois estágio quando você conecta no servidor:

 

- Estágio 1 = Servidor verifica se você tem permissão para conectar.

- Estágio 2 = Depois que você conectou, o servidor verifica se você tem

permissãao para executar select, usar o comando drop, etc...

Para mostrar os usuários cadastrados no MySQL:

 

SELECT Host, User FROM mysql.user;

Para mostrar os privilégios associados a determinado usuário:

 

show grants for 'root'@'localhost';

Alterar o password de determinado usuário:

 

set password for 'root'@'localhost'=password('novopassword');

Criar novo usuário:

CREATE USER user [IDENTIFIED BY [PASSWORD] 'password']
    [, user [IDENTIFIED BY [PASSWORD] 'password']] ...

 

Exemplo:

 

create user joao;
- este comando cria o usuario joao, sem senha.

 

create user joao identified by 'joao';
- este comando cria o usuario joao, com senha joao.

 

OBS.: este usuario é criado sem nenhum privilégio. Ou seja,

não pode fazer nada! Pode apenas executar comandos do tipo:

Select 2+2;

 

Privilégios ao usuário:

 

GRANT priv_type [(column_list)] [, priv_type [(column_list)]] ...
    ON [object_type] {tbl_name | * | *.* | db_name.*}
    TO user [IDENTIFIED BY [PASSWORD] 'password']
        [, user [IDENTIFIED BY [PASSWORD] 'password']] ...
    [REQUIRE
        NONE |
        [{SSL| X509}]
        [CIPHER 'cipher' [AND]]
        [ISSUER 'issuer' [AND]]
        [SUBJECT 'subject']]
    [WITH with_option [with_option] ...]

object_type =
    TABLE
  | FUNCTION
  | PROCEDURE

with_option =
    GRANT OPTION
  | MAX_QUERIES_PER_HOUR count
  | MAX_UPDATES_PER_HOUR count
  | MAX_CONNECTIONS_PER_HOUR count
  | MAX_USER_CONNECTIONS count

priv_type pode ser:

 

ALL [PRIVILEGES]	Grants all privileges at specified access level except GRANT OPTION
ALTER	Enables use of ALTER TABLE
ALTER ROUTINE	Enables stored routines to be altered or dropped
CREATE	Enables use of CREATE TABLE
CREATE ROUTINE	Enables creation of stored routines
CREATE TEMPORARY TABLES	Enables use of CREATE TEMPORARY TABLE
CREATE USER	Enables use of CREATE USER, DROP USER, RENAME USER, and REVOKE ALL PRIVILEGES.
CREATE VIEW	Enables use of CREATE VIEW
DELETE	Enables use of DELETE
DROP	Enables use of DROP TABLE
EVENT	Enables creation of events for the event scheduler
EXECUTE	Enables the user to run stored routines
FILE	Enables use of SELECT ... INTO OUTFILE and LOAD DATA INFILE
INDEX	Enables use of CREATE INDEX and DROP INDEX
INSERT	Enables use of INSERT
LOCK TABLES	Enables use of LOCK TABLES on tables for which you have the SELECT privilege
PROCESS	Enables the user to see all processes with SHOW PROCESSLIST
RELOAD	Enables use of FLUSH
REPLICATION CLIENT	Enables the user to ask where slave or master servers are
REPLICATION SLAVE	Needed for replication slaves (to read binary log events from the master)
SELECT	Enables use of SELECT
SHOW DATABASES	SHOW DATABASES shows all databases
SHOW VIEW	Enables use of SHOW CREATE VIEW
SHUTDOWN	Enables use of mysqladmin shutdown
SUPER	Enables use of CHANGE MASTER, KILL, PURGE MASTER LOGS, and SET GLOBAL statements, the mysqladmin debug command; allows you to connect (once) even if max_connections is reached
TRIGGER	Enables the user to create or drop triggers
UPDATE	Enables use of UPDATE
USAGE	Synonym for “no privileges”
GRANT OPTION	Enables privileges to be granted

Para utilizar o comando GRANT, você deve ter o privilégio GRANT OPTION e

também deve ter o privilégio do que você está dando permissão.

 

Exemplo: se estou dando permissão para o usuario 'joao' utilizar o comando

DROP, eu tenho que ter a permissão de utilizar o comando DROP.

 

Privilégios podem ser dados a vários níveis:

 

- nível global

 

Os privilégios são aplicados a todas as base de dados em um dado servidor.

são armazenados na tabela mysql.user.

GRANT ALL ON *.* e REVOKE ALL ON *.* dão e revogam somente privilégios globais.

 

- nível de banco de dados

 

Os privilégios são aplicados a todos objetos em um dado banco de dados.

são armazenados na tabela mysql.db e mysql.host. GRANT ALL ON nomeBanco.*

e REVOKE ALL ON nomeBanco.* dao e revogam somente privilégios de banco de

dados.

 

- nível de tabela

 

Os privilégios são aplicados a todas as colunas em uma dada tabela.

são armazenados na tabela mysql.tables_priv. GRANT ALL ON nomeBanco.nomeTabela

e REVOKE ALL ON nomeBanco.nomeTabela dão e revogam somente privilégios

de tabela.

 

- nível de coluna

 

Os privilégios são aplicados a colunas em uma data tabela.

são armazenados na tabela mysql.columns_priv. Quando utilizar REVOKE, você

deve especificar as mesmas colunas que você deu privilégios.

 

Exemplo:

 

GRANT SELECT (col1), INSERT (col1,col2) ON mydb.mytbl TO 'usuario'@'host';

- nível de rotina

 

Os privilégios CREATE ROUTINE, ALTER ROUTINE, EXECUTE e GRANT sao aplicados

em rotinas armazenadas (funcoes e procedimentos). eles podem ser dados

no nivel global ou de banco de dados.

 

A clausula "object_type" deve ser especificada como TABLE, FUNCTION ou

PROCEDURE.

 

GRANT CREATE ROUTINE ON mydb.* TO 'someuser'@'somehost';
GRANT EXECUTE ON PROCEDURE mydb.myproc TO 'someuser'@'somehost';

Para as estruturas GRANT e REVOKE, "priv_type" pode ser especificado como:

 

Exemplo de GRANT:

Dar permissão para o usuário selecionar apenas itens da base de dados X;

 

GRANT select ON X.* TO usuario;

Dar permissão para o usuário selecionar apenas itens da tabela Y do banco X;

 

GRANT select ON X.Y TO usuario;

 

COMANDO PARA REMOVER UM USUÁRIO

DROP USER user [, user] ...

COMANDO PARA REMOVER PRIVILÉGIOS

 

REVOKE priv_type [(column_list)] [, priv_type [(column_list)]] ...
    ON [object_type] {tbl_name | * | *.* | db_name.*}
    FROM user [, user] ...

REVOKE ALL PRIVILEGES, GRANT OPTION FROM user [, user] ...

Para verificar qual usuário está logado:

SELECT USER();

Funções e rotinas retirados do manual oficial.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.