2009-06-01 122 views
34

¿Cómo se pueden ocultar las bases de datos a las que no tiene derechos de acceso al iniciar sesión en SQL Server 2005/2008? Actualmente, si un usuario se conecta, ellos ven todas las bases de datos en el servidor, lo que significa que tienen que escanear la lista para encontrar su base de datos.Ocultar base de datos SQL de Management Studio

Respuesta

13

Usted tendría que revocar el permiso 'Ver cualquier base de datos' del papel público (SQL Server 2005 en adelante)

+5

Nota: esto puede no funcionar para usted si usted no puede hacer este usuario de inicio de sesión de la DBO de la base de datos que quiere que lo administre o si tiene varios inicios de sesión que desea proteger de esta manera, ya que solo un único inicio de sesión puede ser el DBO real de una base de datos. –

0

Parece que hay un entorno de servidor en MS SQL 2005 y 2008 para restringir la bases de datos de una el usuario puede ver. Encontré el siguiente texto en sql-server-performance.com

En SQL Server 2005 es posible con una nueva función del lado del servidor que se haya creado. El permiso VER CUALQUIER BASE DE DATOS es un nuevo permiso a nivel de servidor. Un inicio de sesión otorgado con este permiso puede ver metadatos que describen todas las bases de datos, independientemente de si el inicio de sesión posee o puede usar una base de datos en particular. Tenga en cuenta De forma predeterminada, se otorga el permiso VER CUALQUIER BASE DE DATOS a la función pública. Por lo tanto, de forma predeterminada, todos los usuarios que se conectan a una instancia de SQL Server 2005 pueden ver todas las bases de datos en la instancia.

19

Esto en realidad no funcionará de la manera que tiene sentido o de lo que podría esperar que fuera. REVOCA VER CUALQUIER BASE DE DATOS de la función pública, pero luego el usuario tiene que ser el propietario de la base de datos o no se puede ver, pero aún se puede acceder. El problema es una falla de seguridad del motor de base de datos y no es probable que se solucione en la versión actual o futura de SQL Server. Erland Sommarskog abrió el siguiente ítem de conexión para esto hace un tiempo, y recientemente fue discutido en Twitter y con Microsoft por el MVP de SQL. Voto para el conectar y ayudar a hacerlo más de una prioridad para Microsoft para corregir:

Connect Feedback

Básicamente los permisos se almacenan en el nivel de base de datos, por lo que sería necesario enumerar cada base de datos para determinar si el usuario tiene conecte derechos para mostrar la base de datos en el explorador de objetos, que es una tarea costosa y la forma en que el EM anterior solía hacer cosas. La solución propuesta es que esta información se mantenga también a nivel del servidor, lo cual es un cambio importante.

+2

+1, esta parece ser la respuesta más completa y completa hasta el momento. – stakx

+0

Por favor, vote en el enlace de Conectar, aunque todavía está marcado como ACTIVO, incluso después de 8+ años – BiLaL

48

Después de horas de intentar descubrir cómo crear una cuenta de usuario que solo tiene acceso a 1 DB, y solo puede ver esa base de datos. ¡Creo que lo descubrí!

  1. Crear una cuenta de usuario (asegurarse de que no es asignada a cualquier base de datos, de lo contrario obtendrá el error final Msg 15110, nivel 16, estado 1 y la nota solución propuesta)

    USE [master] 
    GO 
    CREATE LOGIN [us4] 
        WITH PASSWORD=N'123', 
        DEFAULT_DATABASE=[master], 
        CHECK_EXPIRATION=OFF, 
        CHECK_POLICY=OFF 
    
  2. Haga clic con el botón derecho en la sección superior del SQL (SQLSERVER Name)> Propiedades> Permisos> Haga clic en la cuenta de usuario y seleccione Denegar para ver las bases de datos.

    uso [maestro] GO DENY VISTA A LA BASE DE DATOS DE CUALQUIER [US4]

  3. Haga clic derecho en la base de datos de nueva creación, Propiedades, archivos, y cambiar el propietario de la cuenta recién creada.(importante nota: ALTER PAPEL [db_owner] Agregar miembro [US4] no funciona)

    USE [dbname] 
    GO 
    EXEC dbo.sp_changedbowner @loginame = N'us4', @map = false 
    

En este punto, una vez que el usuario inicia sesión en la que va a ver al Maestro, tempdb y la voluntad también vea el nuevo DB del que es propietario de la base de datos. Puede ir a Herramientas> Opción y habilitar la opción para ocultar los objetos del sistema para que no muestre el maestro, tempdb, etc. También puede ser necesario SP1 si esta opción no funciona

Msg 15110, Level 16, State 1, Line 1 
The proposed new database owner is already a user or aliased in the database. 

solución propuesta para Msg 15110: para resolver el error anterior simplemente eliminar el usuario desde el nodo de seguridad de base de datos y vuelve a intentarlo

Esperanza que ayuda .. .

Nikhil

+5

Esto es bueno, pero ¿qué pasa si no quiero que ese usuario sea dueño de la base de datos, y aún así poder verlo? en SSMS? – friism

+0

¡He estado buscando esto por mucho tiempo, muchas gracias! –

+0

genial esto funcionó para mí ... friismo - demasiada micro administrando IMO;) no puedes simplemente afinar este concepto negando todo lo que necesites IE - table drops/adds, truncates, etc ... – bbqchickenrobot

1
USE master; GO 

DENY VIEW ANY DATABASE TO [loginname]; GO 

USE [your db]; GO 

DROP USER [loginname]; GO 

USE master; GO 

ALTER AUTHORIZATION ON DATABASE::[your db]TO [loginname]; GO 
+0

¿Puede explicarme qué es este código? hace y cómo difiere de las otras respuestas – userSteve

Cuestiones relacionadas