Arquivo

Posts Tagged ‘SQL SERVER 2005’

SQL Server: Application Role

22/10/2008 1 comentário

Uma funcionalidade muito interessante foi adicionada ao SQL Server 2005 e mantida, obviamente, no SQL Server 2008. Para facilitar o gerenciamento das permissões no banco de dados utilizamos um recurso chamado ROLE. Um database ROLE é um objeto criado no banco de dados no qual é possível dar ou negar permissões de acesso dos outros objetos.

Vamos a um exemplo: você tem um perfil de usuários na empresa que só pode manipular informações referentes ao sistema de Recursos Humanos. Para facilitar o gerenciamento das permissões você cria uma ROLE chamada RL_RH e define todas as permissões de acesso a ela.

CREATE ROLE RL_RH AUTHORIZATION dbo; –CRIA A ROLE

GRANT SELECT TO RL_RH; –PERMITE SELECT EM TODOS OS OBJETOS

Imagine que um novo usuário deve ser adicionado ao banco de dados e precisa ter os mesmos acessos de todos os outros do RH. Para isso basta criar o usuário e adicioná-lo ao papel já criado. Por exemplo:

CREATE LOGIN US1 WITH PASSWORD=’p@ssw0rd’; –CRIA O LOGIN NO SERVIDOR

CREATE USER US1 FOR LOGIN US1; –CRIA UM USUÁRIO PARA O LOGIN NO BANCO DE DADOS

SP_ADDROLEMEMBER ‘RL_RH’, ‘US1’; –ADICIONA O USUÁRIO COMO MEMBRO DA ROLE

Com isso, o usuário passa a ter todos os direitos da role!

Legal, não é? Mas agora imaginemos que temos alguns usuários mais avançados capazes de criar comandos SQL e executá-los diretamente no banco de dados. Coisa que não deveriam fazer a não ser através de um sistema. Como evitar que isso ocorra? Como saber se o usuário está se conectando através de uma ferramenta tipo o SSMS ou através de um sistema. Para isso, existe um recurso chamado de Application Role!

O funcionamento é semelhante, cria-se um APPLICATION ROLE e se define todas as permissões a ele. Por exemplo:

CREATE APPLICATION ROLE RL_APP_RH WITH PASSWORD = ‘pa$$w0rd’; –CRIA UM APPLICATION ROLE COM SENHA

GRANT SELECT TO RL_APP_RH; –PERMITE SELECT EM TODOS OS OBJETOS

Para os usuários:

CREATE LOGIN US2 WITH PASSWORD=’xpt0′;

CREATE USER US2 FOR LOGIN US2;

No sistema, logo após abrir a conexão com o banco de dados execute:

SP_SETAPPROLE ‘RL_APP_RH’, ‘pa$$w0rd’; –ATIVA O USO DA ROLE MEDIANTE INFORMAR O PASSWORD

Pronto a partir de agora a ROLE está ativada digamos assim. Houve uma troca no contexto de segurança e o usuário passa a ter acesso a tudo que havia sido definido para a ROLE. Se ele conectar-se diretamente no banco de dados não terá acesso a nada.