Thiago Zavaschi R2 www.zavaschi.com

20Jan/113

Permissão para ver a estrutura, mas sem os dados!

Recentemente o Carlos Barini (http://twitter.com/cabarini) me perguntou se era possível liberar para um user ver a estrutura de uma tabela, mas não ter a permissão de leitura na tabela.

É possível sim, claro que a configuração do permissionamento pode ser adaptado para cada caso. No exemplo aqui vou concentrar nesse caso perguntado.

Vamos criar um login e um user na database “demo”.

USE [master]
GO
CREATE LOGIN [usuario] WITH PASSWORD=N'123', DEFAULT_DATABASE=[demo], CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF
GO
USE [demo]
GO
CREATE USER [usuario] FOR LOGIN [usuario]
GO

Vamos usar a mesma tabela de empregados que usamos no artigo anterior.

O usuário “usuario” tem permissão de select na tabela. O que podemos fazer é simplesmente:

1) Remover a permissão de select no objeto.

2) GRANT na permissão de VIEW DEFINITION:

DENY SELECT ON [dbo].[Empregado] TO [usuario]

GRANT VIEW DEFINITION ON [dbo].[Empregado] TO [usuario]

E teremos ao executar o select:

Msg 229, Level 14, State 5, Line 1
The SELECT permission was denied on the object 'Empregado', database 'demo', schema 'dbo'.

Mas ao tentar ver a estrutura:

image

Espero que te ajude Carlos!

Grande abraço,
Thiago Zavaschi

Comments (3) Trackbacks (1)
  1. Muito bom isso.
    Acho que essa solução junto com a auditoria vai proteger muito bem uma aplicação de RH.
    Pelo que eu me lembre pra fazer isso com Oracle, só usando o Vault que custa uma pequena fortuna!
    Valeu

  2. Olá Thiago,

    Aproveitando a deixa, teria como criar uma role onde os desenvolvedores poderiam alterar objetos do tipo: funçoes, stored procedures e views. Mas nao poderiam alterar as tabelas do BD. Sem ter que colocar a permissao a cada objeto e sim a uma role ?

  3. Oi Ítalo! Farei um post sobre isso em breve então :)


Leave a comment