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.

Selecionendo um modo de autenticação

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.

Criando contas 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.

Criando contas de usuário

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.

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

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.

Atribuindo contas de login a cargos fixos de servidor

Figura 6: Atribuindo contas de login a cargos fixos de servidor

   Atribuindo contas de usuátio a cargos fixos de banco de dados

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.

Estados de permissão

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:

Propriedades da tabela

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.

Atribuindo permissões

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!