Nesta segunda parte do artigo irei demonstrar outros comandos SQL, além de mostrar como manter a integridade em suas tabelas e como tornar o seu banco de dados mais seguro.
Esta tabela é responsável por dar permissões para usuários
acessarem banco de dados específicos, de forma a assegurar que
o mesmo não acesse outros bancos de dados dentro do servidor
MySQL. Vejamos a estrutura desta tabela:
mysql> SHOW FIELDS FROM db;
+-----------------------+-----------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------------------+-----------------+------+-----+---------+-------+
| Host | char(60) binary | | PRI | | |
| Db | char(64) binary | | PRI | | |
| User | char(16) binary | | PRI | | |
| Select_priv | enum('N','Y') | | | N | |
| Insert_priv | enum('N','Y') | | | N | |
| Update_priv | enum('N','Y') | | | N | |
| Delete_priv | enum('N','Y') | | | N | |
| Create_priv | enum('N','Y') | | | N | |
| Drop_priv | enum('N','Y') | | | N | |
| Grant_priv | enum('N','Y') | | | N | |
| References_priv | enum('N','Y') | | | N | |
| Index_priv | enum('N','Y') | | | N | |
| Alter_priv | enum('N','Y') | | | N | |
| Create_tmp_table_priv | enum('N','Y') | | | N | |
| Lock_tables_priv | enum('N','Y') | | | N | |
+-----------------------+-----------------+------+-----+---------+-------+
OBS: Novamente irei analisar apenas alguns campos importantes:
Campo
Descrição
Host
Host de origem para conexão.
Db
Banco de dados selecionado.
User
Usuário a obter acesso
Select_priv
Permissão para executar SELECT.
Insert_priv
Permissão para executar insert.
Update_priv
Permissão para executar update.
Delete_priv
Permissão para executar delete.
Drop_priv
Permissão para executar drop table.
Index_priv
Permissão para criar índices.
Alter_priv
Permissão para executar alter table.
A maior diferença entre a tabela db para a user é
realmente o campo db, onde você especifica o banco de dados
que o usuário terá acesso.
Veja o exemplo a seguir: iremos inserir um registro de usuário
"jeffestanislau" na tabela db, informando que ele pode se
conectar somente do servidor local localhost, tendo acesso
ao banco de dados COLEGIO, podendo inserir, consultar, alterar e
deletar dados.
mysql> INSERT INTO db (Host, Db, User, Select_priv, Insert_priv, Update_priv, Delete_priv) VALUES ('localhost', 'COLEGIO', 'jeffestanislau', 'Y', 'Y', 'Y', 'Y');
Veja q troquei o retorno da query
removi o $ do campo order
fiz com q o retorno da função sum, seja armazenado um um alias chamado soma
com o fetch_array, peguei as colunas q vem da query
o comando fetch cria um array e mandei o valor da coluna para
a variavel $soma
[4] Comentário enviado por ft_xavier em 17/02/2005 - 11:43h
Pessoal,
Segui os passos desse excelente artigo sobre manipulacao do mysql para criar uma databse, usuario e definir o acesso dele a somente essa database criada. Só que porem, ele ainda continua a ver as demais e ter acesso a elas. Como posso fazer pra resolver isso ???
[5] Comentário enviado por jeffestanislau em 17/02/2005 - 15:14h
ft_xavier,
Você me enviou este comentário estando na página 7, tabela user, aqui você cria o usuário para acessar o mysql como um todo...
Se quer prender o usuário em uma única tabela, você também deve criar o usuário na tbela DB, descrevendo seu nome de acesso e a tabela ao qual ele pode acessar...
[7] Comentário enviado por kl31n em 09/03/2005 - 00:15h
Ok......legal o artigo....
mas gostaria de saber tipo.....
se existem StoredProcedures no MySql
ou como o MySql trata as operações
para fazer com que realmente aconteça
o Client-Server
tipo...o sistema manda as informações e
o BG eh que grava elas e se vira com tudo.......
[8] Comentário enviado por Hernando em 03/05/2005 - 11:01h
Mais uma vez gostaria de agradece-lo pela presteza nos artigos... e acredito que assim esteje concluido o mini manual ajudando a todos que queiram ingressar no mundo do MySQL... Queria dar a dica que abra um novo artigo dizendo sobre injeção de sql para que todos que sigam esse artigo possam se previnir antes de serem prejudicados pois a má estruturação pode causar grandes danos...
[14] Comentário enviado por adilsom em 19/05/2009 - 18:59h
ola, estou com um problema, tenho um sisetma que foi feito pra mysql4, e agora preciso fazer funcionar com mysql5.
So que em uma pagina da este erro
"
Database error: Invalid SQL: SELECT SUBSTR(t1.starttime,1,10) AS day, sum(t1.sessiontime) AS calltime, sum(t1.sessionbill) AS cost, count(*) as nbcall,sum(t1.buyratecost) FROM call t1 WHERE UNIX_TIMESTAMP(t1.starttime) >= UNIX_TIMESTAMP('2009-05-19') GROUP BY SUBSTR(t1.starttime,1,10) ORDER BY day
MySQL Error: 1064 (You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'call t1 WHERE UNIX_TIMESTAMP(t1.starttime) >= UNIX_TIMESTAMP('2009-05-19') GROU' at line 1)
Database error: Invalid SQL: SELECT count(*) FROM call t1 WHERE UNIX_TIMESTAMP(t1.starttime) >= UNIX_TIMESTAMP('2009-05-19')
MySQL Error: 1064 (You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'call t1 WHERE UNIX_TIMESTAMP(t1.starttime) >= UNIX_TIMESTAMP('2009-05-19')' at line 1)
Database error: next_record called with no query pending.
MySQL Error: 1064 (You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'call t1 WHERE UNIX_TIMESTAMP(t1.starttime) >= UNIX_TIMESTAMP('2009-05-19')' at line 1)
"
Detalhe, no phpmyadmin com mysql4 faço esta busca:
SELECT substr(t1.starttime,1,10) AS day, sum(t1.sessiontime) AS calltime, sum(t1.sessionbill) AS cost, count(*) as nbcall,sum(t1.buyratecost)FROM call t1 WHERE UNIX_TIMESTAMP(t1.starttime) >= UNIX_TIMESTAMP('2009-05-19') GROUP BY SUBSTR(t1.starttime,1,10) ORDER BY day
[16] Comentário enviado por henbran em 14/12/2009 - 14:48h
Boa tarde ...!!!!
GOSTARIA DE SABER SE ALGUÉM PODERIA ME ORIENTAR SOBRE O USO DO JOIN EM 1 CONSULTA SQL.
Tenho uma tabela de maquinas e outras de uso_maquinas. Preciso de uma consulta sql que busque na tabela maquina, todas as maquinas que não estão em uso. É 1 projeto de telecentro comunitário. Trabalho com PHP, MySql/postgre (uso recursos PDO).
Olhem por favor a string de consulta:
SELECT maquina.id_maquina, maquina.num_maq
FROM maquina
RIGHT JOIN
(usotelecentro RIGHT JOIN maquina ON maquina.id_maquina = usotelecentro.id_maquina)
ON usotelecentro.dt_utc >='2009-12-14'
WHERE maquina.id_tele_centro = 2
1º) campos a retornar os dados
2º) tabela de maquinas
3º) inicio da instrução JOIN
4º) primeira condição JOIN {se houver alguma máquina do telecentro em questão, em uso, ....}
5º) segunda condição JOIN {..., verificar se é da data atual}
6º) condição WHERE
Temos 2 tabelas, uma é a tabela fato (dados fixos) e a outra é a tabela tempo (dados inseridos conforme o uso). Usa-se o computador por 1 hora ou + e quando abre a tela para verificar quais computadores estão livres, referentes a esse telecentro, identificar se já/ou não está preenchido o campo hora_fim_de_uso.
É um projeto da prefeitura de Guarulhos - SP da qual sou programador PHP a 6 meses.
Obrigado