Olá pessoal!
Neste artigo trataremos de um dos aspectos mais importantes na vida profissional de um DBA: gerenciamento da segurança. Aprenderemos obre criação de logins, criação de users, associação de logins e users a cargos de servidor e de bancos de dados. Além disso, veremos a criação de cargos definidos pelo usuário, atribuições de permissões de instruções e permissões de objetos.
Contas de Login e contas de usuário (user)
O processo de autenticação no SQL Server 2000 ocorre em duas etapas: autenticação login, onde o SQL Server verifica se o usuário tem permissão para acessar o servidor de banco de dados, e validação das permissões, processo no qual o SQL Server verifica se o usuário possui permissões para acessar um objeto específico dentro de um banco de dados. Portanto, não basta apenas “entrar”, ter acesso ao servidor. È preciso ter permissão de acesso nos objetos de cada banco de dados do servidor em questão.
Para conectar-se a um servidor SQL Server 2000, um usuário pode usar autenticação windows ou autenticação SQL Server. Na primeira abordagem o SQL Server “confia” no sistema operacional, windows NT / 2000 / 2003, e não solicita login e senha ao usuário que deseja conectar-se ao servidor de banco de dados. Isso ocorre porque o SQL Server parte do pressuposto de que o Sistema Operacional já realizou o processo de autenticação quando do login do usuário na rede. É importante lembrar que essa estratégia de autenticação, conhecida como Trusted Connection – conexão confiável, só pode ser utilizada quando a totalidade dos clientes forem windows.
A outra estratégia de autenticação permitida no SQL Server 2000 é a autenticação SQL. Nessa abordagem o SQL Server solicita um login e uma senha ao usuário que deseja se conectar. É um mecanismo muito utilizado quando os clientes da rede não são 100% windows ou quando há clientes Internet.
Selecionando o modo de autenticação
No Enterprise Manager é possível configurar o modo de autenticação para Modo Misto (Windows ou SQL Server) ou Modo Autenticação Windows. Para tanto, basta clicar com o botão direito do mouse no servidor de banco de dados desejado e em seguida escolher a opção propriedades. Na aba Security, selecione a opção de autenticação desejada.
Figura 1: Selecionendo um modo de autenticação
Criando contas de login do Windows no SQL Server 2000
Quando a estratégia usada for autenticação windows, o gerenciamento das contas de login de usuários ou grupos de usuários do windows NT / 2000 / 2003 dentro do SQL Server será feito pelas procedures:
Procedimento | Descrição |
sp_grantlogin | Cria uma conta de login de um usuário ou grupo do Windows no SQL Server. |
sp_revokelogin | Remove uma conta de login de um usuário ou grupo do Windows do SQL Server. |
sp_denylogin | Impede o acesso de uma conta de login de um usuário ou grupo do Windows ao SQL Server. |
Exemplo:
Cria o login rrocha, no SQL Server, associado à conta de login de usuário Universo\rrocha.
sp_grantlogin ‘Universo\rrocha’
Impede o login do usuário rrocha ao SQL Server
sp_denylogin ‘Universo\rrocha’
Remove o usuário rrocha do SQL Server
sp_revokelogin ‘Universo\rrocha’
Criando contas de login do SQL Server no SQL Server
Se a estratégia usada for autenticação SQL, o gerenciamento das contas de login será realizado a partir de outro conjunto de procedimentos armazenados:
Procedimento | Descrição |
sp_addlogin | Cria uma conta de login do SQL Server no SQL Server. |
sp_droplogin | Remove uma conta de login do SQL Server. |
Exemplo:
Adiciona uma conta de login, rrocha, com a senha 123456
sp_addlogin ‘rrocha’, ‘123456’
Remove a conta de login rrocha do SQL Server
sp_droplogin ‘rrocha’
Se desejar, também poderá criar contas de login, independente do modo de autenticação, utilizando a interface gráfica do Enterprise Manager. A figura 2.0 mostra onde escolher uma das duas abordagens descritas anteriormente. Para acessa-la basta expandir o servidor de banco de dados e em seguida clicar em Security/Logins com o botão direito e escolher new login (novo login). A partir daí escolha o tipo da autenticação e informe o nome da conta de login que deseja incluir no SQLServer.
Observação importante: Ao escolher SQL Server Authentication, o SQL Server solicitará a digitação de uma senha de acesso para a conta de login.
Figura 2: Criando contas de login
Observação importante: A criação de contas de login não garante o acesso a um banco de dados específico. Para acessar bancos de dados dentro de um servidor, o usuário precisa possuir contas de usuário, user, em cada banco de dados que deseja acessar.
Criando contas de usuário (user) em um banco de dados específico
Para gerenciar contas de usuário, users, em um banco de dados específico usaremos duas stored procedures:
Procedimento | Descrição |
sp_grantdbaccess | Garante o acesso de um usuário a um banco de dados específico. |
sp_revokedbaccess | Remove o acesso de um usuário a um banco de dados específico. |
Exemplo:
Cria um usuário, rrocha, no banco de dados atual associado à conta de login rrocha.
sp_grantdbaccess ‘rrocha’,’rrocha’
Remove o usuário, rrocha, do banco de dados atual.
sp_revokedbaccess ’rrocha’
Pela interface gráfica do Entrerprise Manager, a criação de usuários é bastante simples. Para acessa-la basta expandir o servidor de banco de dados e em seguida clicar em Security/Logins. Do lado direito da tela, aparecerão todos os logins existentes no servidor atual. Escolha qual login pretende dar acesso a um banco de dados, clique com o botão direito do mouse sobre ele e escolha propriedades. Em seguida clique na aba Database Access. Nessa aba, escolha para qual banco de dados o login deve ter acesso clicando na coluna Permit. Depois disso, basta clicar em Ok.
Figura 3: Criando contas de usuário
Associando logins e usuários a cargos fixos de servidor e cargos fixos de bancos de dados
Visando garantir um conjunto de privilégios administrativos pré-definidos, o SQL Server dispõe de alguns perfis, cargos, em nível de servidor e em nível de bancos de dados. Estes cargos funcionam como um grupoque possui permissões específicas e não podem ser alterados ou excluídos.
Cargos Fixos de Servidor
Segue abaixo a lista dos cargos fixos de servidor.
Figura 4: Cargos fixos de servidor
Cargos Fixos de Bancos de Dados
Segue abaixo a lista dos cargos fixos de bancos de dados
Figura 5: Cargos fixos de bancos de dados
Para atribuir contas de login a cargos fixos de servidor usamos as seguintes stored procedures:
Procedimento | Descrição |
sp_addsrvrolemember | Adiciona uma conta de login a um cargo fixo de servidor. |
sp_dropsrvrolemember | Remove uma conta de login de um cargo fixo de servidor. |
Exemplo:
Adiciona o login do usuário, rrocha, ao cargo fixo de servidor sysadmin (System Administrators).
sp_addsrvrolemember ‘rrocha’,’sysadmin’
Remove o login do usuário, rrocha, do cargo fixo de servidor sysadmin (System Administrators).
sp_dropsrvrolemember ‘rrocha’,’sysadmin’
Para atribuir contas de usuário a cargos fixos de bancos de dados usamos as seguintes stored procedures:
Procedimento | Descrição |
sp_addrolemember | Adiciona uma conta de usuário a um cargo fixo de banco de dados. |
sp_droprolemember | Remove uma conta de usuário de um cargo fixo de banco de dados. |
Exemplo:
Adiciona o usuário, rrocha, ao cargo fixo de banco de dados db_owner (Dono do banco de dados).
sp_addrolemember ‘db_owner’,’ rrocha’
Remove o usuário, rrocha, do cargo fixo de banco de dados db_owner (Dono do banco de dados).
sp_droprolemember ‘db_owner’,’ rrocha’
Se desejar atribuir contas de login ou contas de usuários a cargos fixos usando a interface gráfica do Enterprise Manager, basta abrir a mesma tela mostrada na figura 3.0. Uma vez na tela, clique nas abas Server Roles (para cargos fixos de servidor) ou Database Access (para cargos fixos de bancos de dados). As figuras 6.0 e 7.0 ilustram as abas descritas.
Figura 6: Atribuindo contas de login a cargos fixos de servidor
Figura 7: Atribuindo contas de usuátio a cargos fixos de banco de dados
Cargos definidos pelo usuário
Em certas situações necessitamos reunir um grupo de permissões e atribuí-las a usuários com o mesmo perfil de atividades. Nesses casos indicam-se a criação de cargos, perfis, definidos pelo usuário. Após a criação do cargo, basta atribuir as permissões desejadas e em seguida adicionar os usuários. O gerenciamento de permissões a grupos de usuários, cargos, é muito mais efetivo e simples do que para cada usuário individual. Isso reduz a carga de trabalho administrativo do DBA liberando-o para outras atividades.
Criando cargos definidos pelo usuário
Para gerenciar cargos definidos pelo usuário utilizaremos duas stored procedures:
Procedimento | Descrição |
sp_addrole | Cria um cargo definido pelo usuário. |
sp_droprole | Remove um cargo definido pelo usuário. |
Exemplo:
Cria o cargo Comercial cujo proprietário é o usuário rrocha. OBS: Se o segundo parâmetro for omitido, o proprietário será considerado DBO.
sp_addrole ‘Comercial’,’rrocha’
Remove o cargo definido pelo usuário. OBS: O cargo não pode conter usuários associados para que seja excluído.
sp_droprole ‘Comercial’
Para associar usuários a cargos definidos pelo usuário, o procedimento é exatamente igual ao definido no tópico “Associando logins e usuários a cargos fixos de servidor e cargos fixos de bancos de dados”.
Atribuição de permissões a usuários e cargos definidos pelo usuário
Após criamos contas de login, contas de usuários, cargos definidos pelo usuário e de ter atribuído contas de login e contas de usuário a cargos, devemos atribuir permissões tanto a contas de usuário quanto a cargos para reforçar a segurança no SQL Server 2000. Assim teremos a segurança em três níveis:
- 1º nível - acesso ao servidor – apenas através de uma conta de login válida;
- 2º nível - acesso a um banco de dados específico – apenas através de uma conta de usuário válida no banco de dados específico;
- 3º nível - acesso a um objeto específico dentro de um banco específico – apenas através da atribuição de permissão explícita para esse usuário ou cargo para o qual o mesmo pertença.
As permissões especificam os objetos que um determinado usuário ou cargo terá acesso em um banco de dados específico.
Permissões de instrução
As atividades que envolvem a criação de objetos de banco de dados exigem a classe de permissões denominadas permissões de instruções. As permissões de instruções dão aos usuários o privilégio de emitir certas instruções Transact-SQL. São elas:
Permissões de instrução |
CREATE DATABASE |
CREATE TABLE |
CREATE VIEW |
CREATE PROCEDURE |
CREATE RULE |
CREATE DEFAULT |
CREATE FUNCTION |
BACKUP DATABASE |
BACKUP LOG |
Permissões de objeto
As atividades que envolvem acesso a dados exigem a classe denominada de permissões de objeto. São elas:
Permissões de Objeto |
SELECT |
INSERT |
UPDATE |
DELETE |
REFERENCES |
EXEC |
Concedendo, negando e revogando permissões
Para atribuir as permissões usamos três comandos Transact-SQL: GRANT, REVOKE e DENY.
O comando GRANT é usado para garantir o direito de acesso a um determinado objeto.
O comando REVOKE é usado para retirar o direito de acesso a um determinado objeto. Porém, se o usuário pertencer a um outro cargo que possua o direito sobre o objeto, como as permissões se somam, o usuário passará a ter acesso ao objeto mesmo que diretamente ele não tenha permissão para tal.
O comando DENY é usado para retirar o direito de acesso a um determinado objeto e impedir que o usuário tenha acesso através da condição de membro de outro cargo que possua o direito. Ou seja, a diferença entre REVOKE e DENY é que o estado das permissões, no comando REVOKE, pode ser alterada pela condição de membro de outro cargo que possua as permissões garantidas. No DENY isso não ocorre. As permissões serão negadas mesmo que através de outro cargo elas sejam concedidas.
Figura 8: Estados de permissão
Usando Transact-SQL podemos conceder, negar e revogar as permissões da seguinte forma:
Garante os acessos de select e insert à tabela tb_fornecedor para o usuário rrocha.
grant select, insert on tb_fornecedor to rrocha
Remove o acesso select na tabela tb_fornecedor do usuário rrocha.
revoke select on tb_fornecedor from rrocha
Nega o acesso select à tabela tb_fornecedor para o usuário rrocha.
deny select on tb_fornecedor to rrocha
Através do Enterprise Manager pode-se atribuir GRANT, DENY e REVOKE da seguinte forma: clique no banco de dados desejado, expanda a opção tables (tabelas) e clique com o botão direito em cima da tabela desejada. Em seguida escolha a opção properties (propriedades). Deverá surgir uma tela igual a seguinte:
Figura 9: Propriedades da tabela
Basta clicar na opção permissions (permissões) e escolher qual a permissão será atribuída: GRANT, DENY ou REVOKE.
Figura 10: Atribuindo permissões
Conclusão
Finalizamos um importante capítulo para qualquer DBA: gerenciamento da segurança. Espero que o artigo tenha ajudado a esclarecer aspectos que muitas vezes são esquecidos ou negligenciados. Até a próxima!