2012-04-18 14 views
6

Tenemos varias bases de datos en el servidor SQL. Nos gustaría crear 1 nuevo usuario que pueda ver la base de datos 'c' pero que no pueda ver el resto de las bases de datos.¿Crear usuario que solo pueda VER una base de datos y solo seleccionar de ella?

Este usuario solo debe poder seleccionar desde esta base de datos, y nada más.
He estado buscando y buscando en Google por un tiempo, y lo más parecido que encontré fue denegar ver cualquier base de datos, y luego convertirlos en el propietario de la base de datos.

Pero no creo que funcione para limitarlos a seleccionar, a menos que haya una manera en que puedo negar todo, excepto para seleccionar en el propietario de una base de datos?

¡Gracias de antemano por cualquier ayuda!

Edición: SQL Server 2008 R2, por cierto.

Edit2: Lo siento, no estaba claro en mi publicación original. Estoy buscando que sea así cuando inicien sesión, ni siquiera verán los nombres de otras bases de datos, no solo que no pueden acceder a ellas.

Gracias.

Respuesta

4
  1. Cree el usuario en el servidor
  2. Añadir al usuario a la base de datos dada
  3. Subvención acceso de sólo lectura a la base de datos

    USO [maestro] CREATE LOGIN [SomeUserName] CON CONTRASEÑA = N'someStr0ngP @ ssword', DEFAULT_DATABASE = [c], DEFAULT_LANGUAGE = [us_english], CHECK_EXPIRATION = ON, CHECK_POLICY = ON GO

    USO [c] CR USUARIO EATE [SomeUserName] para iniciar la sesión [SomeUserName] CON DEFAULT_SCHEMA = [dbo] IR

    EXEC sp_addrolemember N'db_datareader 'N'SomeUserName'

+1

Recuerde que en 2008 todos a los usuarios se les asigna el rol de servidor "Público" que no se puede quitar. Si solo quiere que vean una base de datos y no puede limitar su acceso a través de procedimientos almacenados u otro nivel intermedio, tendrá que DENEGAR todas las demás bases de datos al rol Público (lo que podría arruinar a todos los demás). –

+1

Podría estar malentendiendo, o puede que no haya sido claro en mi publicación original. Quise decir que el usuario no debería poder ver las otras bases de datos como si ingresasen en el estudio de administración, otras bases de datos ni siquiera aparecerán. Con esto, seguirán apareciendo, y simplemente no podrán ingresar a las bases de datos, ¿correcto? ¿Hay alguna forma de hacerlo así que ni siquiera pueden ver las bases de datos? – Kyle

+2

"Debería revocar el permiso 'VER CUALQUIER BASE DE DATOS' del rol PUBLIC (SQL SERVER 2005 en adelante)". Lo robé de [otra publicación ...] (http://stackoverflow.com/questions/935018/hide-sql-database-from-management-studio). Echa un vistazo allí para más información. –

1

negar es el comportamiento por defecto cuando se trata de un permiso por lo tanto, si crea un usuario y lo agrega al rol db_datareader en la base de datos necesaria, ese es el único permiso que tendrá. No será capaz de acceder a otras bases de datos

EDIT:

use [master] 
GO 
DENY VIEW ANY DATABASE TO [login] 
GO 
use [master] 
GO 
DENY VIEW SERVER STATE TO [login] 
GO 

que eliminará abbility del inicio de sesión para acceder a las bases de datos. Luego ve a la que QUIERES que vea y hazle propietario de esa DB

+0

Lo siento, no estaba claro en mi publicación. Estoy tratando de hacerlo para que ni siquiera vean las otras bases están allí, o sus nombres. No solo para que no puedan acceder a ellos. Gracias por la ayuda. – Kyle

+0

bien, pruebe mi edición – Diego

0

Quizás esto funcione.

Agregar usuario al servidor y asignar a la base de datos correcta. Eliminar usuario del servidor.

El servidor le informará La eliminación de los usuarios del servidor no elimina los usuarios de la base de datos asociados con este inicio de sesión.

Haga clic en Aceptar y tendrá acceso al usuario solo a la base de datos.

1

Paso 1: Crear el Iniciar Sesión

Paso 2: Retire todo el permiso de visualización DB desde el inicio de sesión

deny view any database to LogInName 

Paso 3: Dar la autorización de inicio de sesión de base de datos

alter authorization on database:: DataBaseName to LogInName 

Nota: No es necesario especificar el nombre de usuario ni el nombre de la base de datos entre comillas simples

+0

No estoy seguro de que esta respuesta esté realmente relacionada con esta pregunta. Está mal, en cualquier caso. –

+0

Cómo es esto incorrecto: dices "Revocar", pero luego tu comando es "denegar". Esas son cosas muy diferentes. 'deny' bloqueará por completo al usuario la visualización de cualquier base de datos. 'revoke' funcionaría parcialmente, quizás ... excepto que simplemente agregar al usuario a la base de datos no funcionará. Necesitan ser el propietario para verlo cuando no tienen el derecho de 'ver cualquier'. –

+0

No sé por qué marcan la respuesta como negativa @AndrewBarber ... De cualquier forma no soy un geek del servidor sql ... pero es trabajo para mí ... Y la respuesta está centrada solo en la pregunta que se ha hecho. .. para lo que busqué en Google ... – Moumit

Cuestiones relacionadas