Estoy buscando la mejor manera de deshabilitar el acceso al sys.tables
/ Information Schema
para un usuario / grupo en SQL Server.
Encontré este hilo de 2008
Muestra una forma de denegar el acceso de esta [sys].[something]
manera:
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
Pero no hay forma de cómo deshabilitar el acceso en Information Schema
:
DENY SELECT ON INFORMATION_SCHEMA.TABLES To DenySystemTableSelectRole
Esto parece no funcionar.
¿Cómo puedo deshabilitar el acceso a información_esquema?
¿Y hay una manera más fácil de deshabilitar el acceso a todos sys
/ information_schema
?
Actualización: en realidad no puedo ejecutar las dos siguientes afirmaciones:
DENY SELECT ON [sys] TO reducedDBO
GO
DENY SELECT ON INFORMATION_SCHEMA To reducedDBO
GO
Traté de ejecutarlos en la base de datos específica donde existe el usuario, y también probé en el "maestro".
Todavía puedo correr:
SELECT * from
INFORMATION_SCHEMA.TABLES
-> todavía devuelve resultados
SELECT * from
sys.TABLES
-> ya no hay resultados
La inclusión SCHEMA::
en la consulta hizo posible crear los asegurables
DENY SELECT ON SCHEMA::[sys] TO reducedDBO
GO
DENY SELECT ON SCHEMA::INFORMATION_SCHEMA To reducedDBO
GO
Pero ahora todavía puedo seleccionar toda la información de la base de datos.
Eché un vistazo a la pestaña "Securables" en la ventana de propiedades de los usuarios en Management Studio 2008, se ve así:
Entrada que bloquea la selección de sys.tables
Esquema: sys, Nombre: tablas, Tipo: Vista
Permisos para sys.tables: Permiso: Seleccionar, Concedente: dbo, Denegar está marcado
Entrada que no bloquea ninguna selección
Esquema :, Nombre: INFORMATION_SCHEMA, Tipo: Esquema
Permisos para INFORMATION_SCHEMA: Permiso: Seleccionar, Concedente: dbo, Denegar NO está marcado (Traté de verificarlo, pero no hay posibilidad ...)
Permiso: Seleccionar, Concedente: INFORMATION_SCHEMA, Denegar está marcado
Intenté establecer los permisos a través de la GUI, pero luego recibí el mismo error de que establecer permisos solo sería posible en la base de datos maestra. Pero no tengo el usuario / inicio de sesión agregado a la seguridad de las bases de datos maestras.
Solución:
La única forma en que podía hacer el deny
trabajo para el information_schema
era agregar el usuario al master-db y ejecutar el deny select
en el maestro:
DENY SELECT ON [sys].[tables] TO reducedDBO
GO
DENY SELECT ON INFORMATION_SCHEMA.TABLES To reducedDBO
GO
Y como en este código, solo se puede ejecutar para tablas individuales.