Ocultar bases de datos de otros usuarios en SQL Server

Desde SQL Server 2005 (creo que antes no existía), se asigna por defecto a todos los usuarios que pertenecen al rol «public» el permiso «VIEW ANY DATABASE«, que permite ver el listado de bases de datos que hay en la instancia SQL Server, aunque no seamos los propietarios de la misma ni tengamos permisos sobre ella.

Concretamente lo que podemos hacer es visualizar los metadatos en las vistas sys.databases, sys.sysdatabases y en el procedimiento almacenado sp_helpdb. Además, también se tiene permiso de lectura sobre los metadatos de las bases de datos de sistema (master y tempdb).

Así pues, si queremos evitar este comportamiento debemos denegar el permiso «VIEW ANY DATABASE», ya sea de forma general para el rol «public» o para un usuario concreto. Podemos visualizar la asignación de este permiso a través del Microsoft SQL Server Management Studio, pinchando con el botón derecho del ratón sobre la instancia > Properties > Permissions > click sobre la cuenta y seleccionar»Deny to view databases».

Ojo al hacer este cambio con usuarios que ya tienen permisos asignados sobre bases de datos porque pueden modificarlos, se recomienda hacerlo siempre antes de asignar permisos contra bases de datos, es decir, en el momento de crear el usuario.