h4v3st 1 Denunciar post Postado Janeiro 5, 2010 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