Sie sind auf Seite 1von 2

CRIANDO VISES

Uma Viso (VIEW) uma forma de visualizao dos dados de uma ou mais tabelas. uma espcie de tabela virtual formada a partir de outras tabelas ou mesmo de outras vises. Operaes de INSERT, UPDATE, DELETE e SELECT podem ser aplicadas sobre uma viso. Porm, uma Viso no deve ser confundida com uma tabela pois, ao contrrio destas, no ocupa espao de memria secundria para armazenamento de dados. Considere que, por alguma razo, o usurio COMUM no deva ter acesso sobre todas as colunas e linhas da tabela FILMES. Ento resolvemos lhe impor algumas restries. Ele somente dever ter acesso a FILMES produzidos de 2009 em diante (restrio de linhas) e no deve visualizar a coluna BILHETERIA (restrio de coluna). Inicialmente revogamos todos os privilgios do usurio COMUM sobre a tabela FILMES.
mysql> REVOKE ALL ON EXEMPLO.* FROM COMUM; Query OK, 0 rows affected (0.00 sec)

Esse comando revoga todos os privilgios (REVOKE ALL) do usurio COMUM (FROM COMUM) sobre tudo que h no banco de dados EXEMPLO (ON EXEMPLO.*). Contudo, para que essa mudana se efetive, no podemos esquecer do comando:
mysql> FLUSH PRIVILEGES; Query OK, 0 rows affected (0.11 sec)

Finalmente criamos uma viso (VIEW) com as restries comentadas logo acima:
CREATE VIEW FILMES_NOVOS AS SELECT ID, TITULO, ANO FROM FILMES WHERE ANO >= 2009; Query OK, 0 rows affected (0.05 sec)

Repare que a viso criada recebeu o nome FILMES_NOVOS (CREATE VIEW FILMES_NOVOS). Em seguida, usamos uma consulta SQL para definir as restries: (1) Omitimos a coluna BILHETERIA na clusula SELECT da consulta SQL que define a viso. Portanto, essa coluna no ser acessvel atravs da viso FILMES_NOVOS. (2) Estabelecemos como condio da clusula WHERE que apenas filmes com ano de produo maior ou igual a 2009 podero ser visualizados atravs da viso FILMES_NOVOS. O comando seguinte define os privilgios do usurio COMUM sobre a viso (VIEW) recmcriada.
mysql> GRANT UPDATE, SELECT ON EXEMPLO.FILMES_NOVOS TO COMUM; Query OK, 0 rows affected (0.01 sec) mysql> FLUSH PRIVILEGES; Query OK, 0 rows affected (0.11 sec)

Portanto, o usurio COMUM pode consultar e alterar os registros da viso FILMES_NOVOS. Por outro lado, fica impedido de apagar (DELETE) e de inserir (INSERT) registros na mesma viso. Para verificar a condio dos privilgios de segurana do usurio COMUM, devemos acessar o MySQL com sua conta de usurio e testar as possibilidades. Comecemos com o comando, as consultas SQL (SELECT).
mysql> SELECT * FROM FILMES; ERROR 1142 (42000): SELECT command denied to user 'COMUM'@'localhost' for table 'filmes'

Confirmado: o usurio COMUM no pode mais efetuar uma simples consulta relacionada tabela FILMES (ns revogamos seus privilgios com o comando REVOKE). Porm, COMUM pode efetuar consultas viso FILMES_NOVOS:
mysql> SELECT * FROM FILMES_NOVOS; +----+---------------------+------+ | ID | TITULO | ANO | | 2 | TRANSFORMERS 2 | 2009 | | 3 | STAR TREK | 2009 | | 4 | WOLVERINE - ORIGENS | 2009 | 3 rows in set (0.20 sec)

Repare que a consulta acima trouxe todos os registros de FILMES_NOVOS e isso no equivale a todos os registros de FILMES. Os FILMES com IDs 1 e 5 no aparecem no resultado dessa pesquisa, pois foram produzidos antes de 2009. Apesar de termos usado o caractere * na clusula SELECT, a coluna BILHETERIA no aparece, pois a mesma no foi usada para a criao da viso FILMES_NOVOS.
mysql> INSERT INTO FILMES_NOVOS VALUES (1,"MATRIX", 1999); ERROR 1142 (42000): INSERT command denied to user 'COMUM'@'localhost' for table 'filmes_novos'

COMUM tambm no mais pode inserir novos registros na tabela FILMES. Tambm no pode faz-lo com a viso FILMES_NOVOS. O nico outro privilgio de segurana que lhe restou o de alterar registros de FILMES_NOVOS.
mysql> UPDATE FILMES_NOVOS SET TITULO = "X-MEN ORIGENS: WOLVERINE" WHERE ID = 4; Query OK, 1 row affected (0.06 sec) Rows matched: 1 Changed: 1 Warnings: 0 mysql> SELECT * FROM FILMES_NOVOS; +----+--------------------------+------+ | ID | TITULO | ANO | | 2 | TRANSFORMERS 2 | 2009 | | 3 | STAR TREK | 2009 | | 4 | X-MEN ORIGENS: WOLVERINE | 2009 | 3 rows in set (0.00 sec)

Note que COMUM conseguiu alterar o TITULO em FILMES_NOVOS do registro com ID = 4. O TITULO passou de WOLVERINE ORIGENS para X-MEN ORIGENS: WOLVERINE. E essa alterao no se restringe aos dados da viso. Esse registro tambm foi alterado na tabela FILMES que serviu de base para a gerao da viso FILMES_NOVOS.

Lembre que FILMES_NOVOS no uma tabela, mas uma viso de parte dos dados da tabela FILMES. Assim, FILMES_NOVOS no implica uma maior ocupao da memria secundria. Os registros de FILMES_NOVOS so os mesmos de FILMES visualizados diferentemente.

Das könnte Ihnen auch gefallen