Cursos / Informática para Internet / Banco de dados / Aula

arrow_back Aula 17 - Linguagem SQL – Segurança

Segurança de banco de dados - pt.2

É importante destacar que para especificar apenas algumas colunas de uma determinada tabela, essas deverão ser listadas ao lado do privilégio (priv (colunas)).

Depois da lista de objetos, deverá ser indicada a lista de usuários, para os quais os privilégios se aplicam.

Vamos praticar o comando GRANT, concedendo sucessivamente diversas permissões ao usuário josemar, utilizando para tanto uma janela de linha de comando do sistema MySQL conectado como root. Para efeito de verificação das permissões concedidas, abrimos uma segunda janela de linha de comando do sistema MySQL, conectado como o usuário josemar (Figura 4).

Telas do ambiente MySQL para os usuários <span class='italico'>root</span> e <span class='strong'>josemar</span>.

Inicialmente, usando a conta root, vamos conceder ao usuário josemar o direito de selecionar os dados da tabela clientes do nosso banco de dados sistvendas, consulte a Aula 13 para verificá-lo.

A resposta do sistema MySQL ao comando é QUERY OK, a qual informa que o comando foi executado com sucesso, conforme ilustrado na Figura 5.

Tela do MySQL após o comando GRANT SELECT.

Nesse momento, é interessante verificar a permissão concedida ao usuário josemar. Para tanto, utilizando a janela do MySQL conectado com o usuário josemar, você irá selecionar todos os dados da tabela clientes através do comando SELECT, conforme é apresentado no quadro a seguir. Lembre-se de antes informar ao sistema que deseja trabalhar com o banco de dados sistvendas utilizando o comando USE. Para rever este banco de dados, você pode consultar a Aula 9.

A resposta do sistema ao comando anterior é ilustrada na Figura 6. Conforme pode ser visualizado na figura, o usuário josemar pode selecionar e visualizar os dados da tabela clientes. Entretanto, não é permitido a esse usuário visualizar as informações pertencentes a nenhuma outra tabela desse banco de dados (produtos e compras). Caso esse usuário tente selecionar os dados das tabelas produtos ou compras, terá como resposta do sistema a mensagem que o uso do comando SELECT, nessas tabelas, foi negado ao usuário josemar, conforme ilustrado na Figura 6.

Tela do MySQL após os comandos SELECT.

Para que o usuário josemar tenha acesso aos dados de todas as tabelas pertencentes ao banco de dados sistvendas, você deve conectar como root e executar o seguinte comando.

Até o momento, o usuário josemar só tem permissão de visualizar os dados nas tabelas pertencentes ao banco de dados sistvendas, mas não tem permissão de incluir, atualizar ou excluir nenhum registro nessas tabelas. Para que esse usuário tenha permissão para realizar tais tarefas, é necessário que o usuário root lhe conceda as permissões através do seguinte comando.

É importante destacar que para especificar apenas algumas colunas de uma determinada tabela, essas deverão ser listadas ao lado do privilégio. Para maior esclarecimento, você deve analisar o exemplo a seguir.

Nesse exemplo, é concedido ao usuário josemar a permissão de visualizar apenas os nomes dos clientes do banco de dados locadora.

Vale salientar que não são apenas as tabelas que podem ser objeto de permissões, essas podem ser estendidas para outros objetos do banco de dados como as visões e as stored procedures vistas nas aulas anteriores, conforme mostra o exemplo a seguir.

Nesse exemplo, funcionario é uma visão pertencente ao banco de dados pagamentos. Consulte a Aula 15 para rever este banco de dados.

O usuário root também pode conceder a qualquer usuário o direito de repassar para um terceiro o privilégio concedido a ele. Para isso, basta acrescentar a cláusula WITH GRANT OPTION no final de um comando GRANT qualquer. Veja o seguinte exemplo:

Com esse comando, o usuário josemar não só possui todos os privilégios em todas as tabelas do banco de dados cineonline, como pode conceder, a outro usuário, qualquer um dos seus privilégios nas tabelas do banco de dados cineonline.

É importante esclarecer que mesmo que o usuário possua várias permissões, ele só poderá conceder, a outros usuários, aqueles privilégios que lhe forem atribuídos com a cláusula WITH GRANT OPTION.

Suponha que o usuário josemar, por alguma razão, não deve mais ter acesso ao banco de dados locadora. O que se deve fazer? Excluir esse usuário e novamente adicioná-lo, concedendo novamente todas as suas permissões com exceção daquelas referentes ao banco de dados locadora? Embora isso seja possível, não é a maneira mais prática.

De maneira semelhante ao que foi utilizado para conceder privilégios a usuários, existe um comando para remover ou excluir privilégios concedidos. O comando REVOKE permite ao administrador de sistemas (usuário root) revogar permissões concedidas.

A sintaxe do comando REVOKE é semelhante à sintaxe do comando GRANT, entretanto, ao invés de utilizar a palavra GRANT, utiliza-se a palavra REVOKE, e ao invés de TO, utiliza-se FROM, conforme ilustrado no quadro a seguir.

Para revogar toda e qualquer permissão que o usuário josemar tenha sobre as tabelas do banco de dados locadora, o usuário root deve executar o comando a seguir.

Para revogar um privilégio com a cláusula WITH GRANT OPTION no qual o usuário pode conceder seus direitos a outros usuários, você deve utilizar o comando semelhante ao exemplo a seguir.

Nesse exemplo, o usuário josemar ainda poderá utilizar todos os comandos nas tabelas do banco de dados cineonline, mas não poderá conceder a mais ninguém a permissão de utilizar os comandos SQL.

Suponha que o usuário Josemar passou a permissão de atualizar dados de cineonline(UPDATE) para outro usuário chamado Pedro. Quando a permissão de atualizar (UPDATE) de Josemar é revogada (comando a seguir), também é revogada a permissão de Pedro de atualizar tabelas.

É importante destacar que é possível unir os comandos CREATE USER e GRANT em um só comando, criando um usuário e lhe concedendo as permissões devidas. Para tanto, você deve utilizar o comando GRANT acrescido da cláusula IDENTIFIED BY, conforme o exemplo a seguir.

No comando anterior, criamos um usuário chamado Jose no nosso sistema de banco de dados e lhe concedemos a permissão de visualizar todos os dados contidos no banco de dados sistvendas.

Versão 5.3 - Todos os Direitos reservados