Segurança de Acesso a Banco de Dados no MS SQL Server

Propaganda
Segurança no MS SQL Server
Professor Sérgio Furgeri
Segurança de Acesso a Banco de Dados no MS SQL Server
Para efetuar com sucesso os exemplos que serão mostrados a seguir é necessário que exista
no SQL Server uma pessoa que se conecte como Administrador, e um ou mais usuários que
tenham seus devidos logins de acesso a um determinado banco de dados, que nosso
exemplo será o banco de dados Locadora.
O MS SQL Server já cria durante a instalação uma conta de administrador com o username
sa. A seguir serão apresentados os procedimentos para a criação de um login de acesso a
um banco de dados.
1. Abra o Enterprise Manager.
2. Ative o Console Root.
3. Na estrutura de árvore, a esquerda do Console Root, acesse a pasta Security. Dentro
desta pasta acesse o item Logins.
4. Clique com o botão direito do mouse sobre o item Logins. Selecione a opção New
Login ... Surgirá uma caixa de diálogo mostrada pela seguinte figura.
Selecionada a guia “General” conforme a figura, segue uma breve descrição de cada um
dos campos a serem preenchidos durante a criação do login:
Página 1
Segurança no MS SQL Server
•
•
•
•
Professor Sérgio Furgeri
Name - deve conter o nome do login que será criado. Para o nosso
exemplo, coloque “usuario”, tudo em letras minúsculas e também sem
acento.
Authentication - refere-se ao modo como será autenticado este login.
Marque a opção SQL Server Authentication e no campo Password coloque
“usuario” novamente
Database - deve ser colocado o nome do banco de dados que o usuário
deseja que apareça como padrão quando se conectar no sistema. Coloque a
opção referente à banco de dados Locadora.
Language - deve constar o idioma padrão que o login irá utilizar nas suas
conexões para o tratamento de determinadas questões como datas e
números. Caso não seja selecionado nenhum idioma, o idioma padrão do
Servidor SQL entra em vigor. Selecione a opção Portuguese.
5. Clique na guia “Database Access” e marque a opção referente ao banco de dados
Locadora na lista dos bancos disponíveis no SQL Server.
6. Clique no botão “OK”. Surgirá no centro da tela uma pequena caixa de diálogo com
um campo para confirmação de senha. Confirme a senha digitada e clique
novamente no botão “OK”. Agora você já possui um novo login de acesso ao banco
de dados Locadora.
Só a título de curiosidade, vamos observar as permissões adquiridas pelo seu usuário no
banco Locadora. Veja agora:
1. Na árvore à esquerda do Console Root, através do caminho Databases | Locadora |
Users. Você poderá ver entre os usuários do banco de dados Locadora, o login
usuário recém criado.
2. Clique com o botão direito do mouse sobre o usuário recém criado e selecione a
opção Propriedades.
3. Clique no botão “Permissions”. Surgirá a janela apresentada pela figura a seguir:
Página 2
Segurança no MS SQL Server
Professor Sérgio Furgeri
Podemos observar por essa janela, que na lista de tabelas, views e stored procedures não é
permitido nada e também não é negado nada. Poderíamos somente marcar nesta lista o que
seria permitido ao usuário ou não, porém faremos isto através de linhas de comandos no
Query Analyser a seguir.
Com o Query Analyser aberto, será necessário que você se conecte com o banco
primeiramente com a conta de administrador existente (sa), pois para permitir, revogar e
negar alguma ação a um usuário é necessário ter autoridade suficiente ou a altura para fazêlo. Depois iremos acessar o menu File, opção Connect... para fazer uma nova conexão com
o mesmo banco de dados Locadora, porém agora usando o login de acesso “usuario” que
criamos. Com isso, duas janelas do Query Analyser estarão abertas, uma como
administrador para e outra como usuário.
Conforme vínhamos dizendo, todo esse controle e segurança no acesso de um determinado
usuário a um banco de dados pode-se resumir em apenas três operações básicas: permitir ou
conceder, retirar ou revogar, e negar uma ação, respectivamente executados pelas
instruções GRANT e REVOKE.
Utilizando a conta de Administrador, vamos primeiro conceder ao login usuário o direito de
selecionar os dados da tabelas de Clientes do banco Locadora. Execute o comando abaixo:
Página 3
Segurança no MS SQL Server
Professor Sérgio Furgeri
grant select on clientes to usuario
Podemos traduzir o comando acima da seguinte maneira: permita selecionar os dados na
tabela de clientes ao login “usuario”.
O retorno do servidor deve ser “The command(s) completed successfully.”, ou seja, o
comando foi executado com sucesso. Vá até a outra janela do Query Analyser onde você
se conectou como usuário e tente selecionar os dados da tabela de clientes.
Provavelmente você conseguiu selecionar e visualizar os dados da tabelas de clientes com
qualquer tipo de comando simples. Todavia, se você tentar selecionar os dados se qualquer
outra tabela, por exemplo, como discos, filmes, ou historico não será possível, pois
simplesmente o login usuário não tem permissão alguma de acessar os dados destas demais
tabelas, mesmo que elas não tenham sido negadas. A mensagem de retorno do servidor para
algum acesso não permitido, como selecionar dados da tabelas de filmes, será
“SELECT permission denied on object 'FILMES', database 'Locadora', owner 'dbo'.”
Ou seja, permissão negada para o objeto que no caso a tabela filmes no banco de dados
Locadora do proprietário (como se fosse o dono, aquele que criou), chamado de dbo
(Database Owner).
Para que seja possível o login usuario acessar as demais tabelas mostradas, execute o
seguinte comando conectado como Administrador:
grant select on filmes, discos, historico to usuario
Até agora só testamos a permissão do login usuario em tabelas diferentes, mas também é
claro que dentro da própria tabela de clientes ele tem suas restrições. Lembre-se que pelo
comando SQL que definimos, o login só teria acesso a executar a instrução SELECT,
impossibilitando qualquer tentativa de utilização das instruções UPDATE, INSERT ou
DELETE.
Neste próximo exemplo, vamos permitir que o login usuario também possa executar outras
instruções citadas acima em diversas tabelas. Como Administrador, digite:
grant insert, update, delete on clientes, filmes, discos to
usuario
Podemos traduzir o comando acima da seguinte maneira: ao login “usuario” inserir,
atualizar e deletar os dados nas tabelas de clientes, filmes e discos.
Se recordarmos a lista de permissões da janela Database User Properties do login usuario,
era possível notar que não havia qualquer marcação na lista indicando a permissão para
coisa alguma. Porém se considerarmos somente os objetos tabelas desta lista e também as
Página 4
Segurança no MS SQL Server
Professor Sérgio Furgeri
instruções que mencionamos nos comandos, agora esta lista terá as marcações semelhantes
à tabela seguinte.
Objeto
Clientes
Filmes
Discos
Games
Historico
SELECT
√
√
√
INSERT
√
√
√
UPDATE
√
√
√
DELETE
√
√
√
√
Outro ponto a ser observado, é que até o presente momento estamos trabalhando apenas
com tabelas, mas as permissões para acesso também se estendem para a criação de
procedimentos ou funções, como views e stored procedures mostrados pelo exemplo a
seguir:
grant create view, create procedure to usuario
Interpretando o comando acima: permita ao login “usuario” a criação de visões (views) e a
criação de procedimentos (stored procedures).
Além de permitir o acesso a um objeto para um usuário também é possível dar a esse
usuário o direito de passar o privilégio concedido a ele para os seus predecessores, ou seja,
para outros usuários adiante. Este efeito é conseguido acrescentando with grant
option no final de um comando com uma instrução grant qualquer. Veja exemplo
seguinte:
grant select on filmes to usuario with grant option
Com o comando mostrado acima, o login “usuario” pode agora permitir a outros usuários o
direito de selecionar os dados da tabela de filmes, do mesmo modo que lhe foi concedido.
Da mesma maneira que o Administrador pôde conceder ao login “usuario” o acesso aos
objetos do banco de dados Locadora, ele também pode revogar todos esses direitos. Os
direitos de acesso podem ser revogados no SQL Server através dos comandos que
possuírem a instrução revoke. Observe o exemplo a seguir:
revoke select,
usuario
update,
insert,
delete
on
clientes
from
Este comando revoga todo e qualquer direito que o login “usuario” tinha sobre a tabela de
clientes, ou seja, o direito de selecionar os dados, de atualizá-los, inseri-los e excluí-los.
Para revogar todos os direitos de uma determinada tabela, causando o mesmo efeito do
comando anterior, poderíamos somente ter executado o seguinte código:
revoke all on clientes from usuario
Página 5
Segurança no MS SQL Server
Professor Sérgio Furgeri
Onde a instrução all pode ser usada para representar todos de um determinado grupo,
sejam eles os privilégios a serem concedidos conforme fizemos, sejam os objetos onde os
direitos serão aplicados, como as tabelas, ou sejam vários usuários onde queremos aplicar
os mesmos privilégios.
Para revogar um privilégio grant option no qual o usuário pode conceder os seus
direitos aos outros usuários, utilizamos a sintaxe semelhante ao exemplo a seguir:
revoke grant option for select on filmes from usuario
Neste exemplo é importante notarmos o seguinte: o comando com a instrução revoke que
acabamos de usar apenas revogou o direito do usuário de passar seus privilégios adiante, de
forma que ele ainda continua a acessar os dados da tabela de filmes livremente. Para
remover todos os direitos de usuario perante a tabela de filmes então é executado o seguinte
comando:
revoke select on filmes from usuario
Outro ponto importante a ser observado é que o login usuario passou os seus direitos
adiante para outros usuários, muito provavelmente os dois últimos comandos acima de
acabamos de ver não serão executados pelo servidor ocasionando a seguinte mensagem de
erro “To revoke grantable privileges, specify the CASCADE option with REVOKE.”
Este problema ocorre porque estamos tentando revogar o direito de acesso de um usuário
que já concedeu o mesmo direito para outros usuários, causando assim uma espécie de
quebra na cadeia de concessões. A mensagem que o servidor envia quando tentamos
executar o comando é que para revogar os privilégios concedidos com o grant option,
é necessário acrescentar a opção cascade no comando da instrução revoke.
O seguinte comando permite que o direito de acesso do usuário na tabela de filmes seja
revogado com sucesso, mesmo tendo-o repassado para outros usuários que também terão
seus acessos revogados devido à utilização da instrução cascade. Veja:
revoke select on filmes from usuario cascade
Página 6
Segurança no MS SQL Server
Professor Sérgio Furgeri
Exercícios
Crie no MS SQL Server um banco de dados chamado Empresa. Neste banco devem existir
as tabelas de Clientes e de Produtos. Insira um considerável número de dados em ambas as
tabelas.
Agora, crie os seguintes usuários:
• marcos
• fernanda
• joaquim
Usando comandos SQL, fixe as seguintes regras de privilégio para os usuários:
− Marcos deve ter acesso as duas tabelas podendo alterar, inserir e excluir dados. Porém
ele terá acesso somente às tabelas, e a nenhum outro objeto existente.
− Fernanda deve ter acesso somente à tabela de Clientes. Ela poderá alterar e inserir
dados na tabela, mas não excluí-los.
− Joaquim poderá apenas visualizar os dados da tabela de Produtos e Clientes.
− Marcos concede a Joaquim os direitos de alterar, inserir e excluir dados da tabela de
Produtos.
− Joaquim e Fernanda perdem o direito de acessar e de visualizar os dados a tabela de
Clientes.
− Marcos perde o direito de acessar a tabela de Produtos. Com isso Joaquim também
deve perder os mesmos direitos concedidos por Marcos.
Página 7
Download