Estou procurando a melhor maneira de desativar o acesso ao sys.tables
/Information Schema
para um usuário / grupo no SQL Server.
Encontrei este tópico de 2008
Ele mostra uma maneira de negar acesso da seguinte [sys].[something]
maneira:
DENY SELECT ON [sys].[columns] TO DenySystemTableSelectRole
GO
DENY SELECT ON [sys].[tables] TO DenySystemTableSelectRole
GO
DENY SELECT ON [sys].[syscolumns] TO DenySystemTableSelectRole
GO
DENY SELECT ON [sys].[sysobjects] TO DenySystemTableSelectRole
GO
Mas não há como desativar o acesso no Information Schema
:
DENY SELECT ON INFORMATION_SCHEMA.TABLES To DenySystemTableSelectRole
Isso parece não funcionar.
Como posso desativar o acesso ao information_schema?
E existe uma maneira mais fácil de desativar o acesso a todos sys
/ information_schema
?
Atualização: Na verdade, não consigo executar as duas declarações a seguir:
DENY SELECT ON [sys] TO reducedDBO
GO
DENY SELECT ON INFORMATION_SCHEMA To reducedDBO
GO
Tentei executá-los no banco de dados específico onde o usuário existe e também tentei no "mestre".
Eu ainda posso correr:
SELECT * from
INFORMATION_SCHEMA.TABLES
-> ainda retorna resultados
SELECT * from
sys.TABLES
-> não há mais resultados
A inclusão SCHEMA::
na consulta tornou possível criar os protegíveis
DENY SELECT ON SCHEMA::[sys] TO reducedDBO
GO
DENY SELECT ON SCHEMA::INFORMATION_SCHEMA To reducedDBO
GO
Mas agora ainda posso selecionar todas as informações do banco de dados.
Dei uma olhada na guia "Securables" na janela de propriedades de usuários no Management Studio 2008, é assim:
Entrada que bloqueia a seleção de sys.tables
Esquema: sys, Nome: tables, Tipo: Visualizar
Permissões para sys.tables: Permissão: Selecionar, Concedente: dbo, Negar está marcada
Entrada que não bloqueia nenhuma seleção
Esquema :, Nome: INFORMATION_SCHEMA, Tipo: Esquema
Permissões para INFORMATION_SCHEMA: Permissão: Selecionar, Concedente: dbo, Negar NÃO está marcado (tentei verificar, mas não há chance ..)
Permissão: Selecionar, Concedente: INFORMATION_SCHEMA, Negar marcado
Tentei definir as permissões na GUI, mas recebo o mesmo erro de que as permissões de configuração seriam possíveis apenas no banco de dados mestre. Mas não tenho o usuário / login adicionado à segurança dos DBs principais.
Solução:
A única maneira de fazer o deny
trabalho information_schema
foi adicionar o usuário ao master-db e executá-lo deny select
no master:
DENY SELECT ON [sys].[tables] TO reducedDBO
GO
DENY SELECT ON INFORMATION_SCHEMA.TABLES To reducedDBO
GO
E, como neste código, ele só pode ser executado para tabelas únicas.