Ограничить доступ для входа в SQL Server только для одной базы данных - PullRequest
29 голосов
/ 03 ноября 2010

У меня есть сервер SQL Server, на котором установлено около 50 баз данных.

Я хочу создать новый Login для клиента, который хочет иметь доступ к своей базе данных.

Но я не хочу предоставлять им доступ к другим 49 базам данных .

Как я могу это сделать?

Ответы [ 3 ]

48 голосов
/ 14 марта 2013

Я думаю, это то, что мы очень любим делать.

--Step 1: (create a new user)
create LOGIN hello WITH PASSWORD='foo', CHECK_POLICY = OFF;


-- Step 2:(deny view to any database)
USE master;
GO
DENY VIEW ANY DATABASE TO hello; 


 -- step 3 (then authorized the user for that specific database , you have to use the  master by doing use master as below)
USE master;
GO
ALTER AUTHORIZATION ON DATABASE::yourDB TO hello;
GO

Если вы уже создали пользователя и были назначены в эту базу данных ранее, выполнив

USE [yourDB] 
CREATE USER hello FOR LOGIN hello WITH DEFAULT_SCHEMA=[dbo] 
GO

, затем удалите его, выполнив приведенные ниже действия, и выполните шаги

   USE yourDB;
   GO
   DROP USER newlogin;
   GO

Для получения дополнительной информации перейдите по ссылкам:

Скрытие баз данных для входа в Microsoft Sql Server 2008R2 и выше

23 голосов
/ 03 ноября 2010
  1. Подключитесь к вашему экземпляру SQL-сервера с помощью Management Studio
  2. Перейти к безопасности -> Логины -> (ПРАВЫЙ ЩЕЛЧОК) Новый логин
  3. заполните данные пользователя
  4. В разделе «Сопоставление пользователей» выберите базы данных, к которым пользователь должен иметь доступ и настройку.

UPDATE:

Вы также захотите перейти к Security -> Server Roles, а для public проверьте разрешения для TSQL Default TCP/TSQL Default VIA/TSQL Local Machine/TSQL Named Pipes и удалите разрешение connect

2 голосов
/ 17 октября 2012

Для всех, кто интересуется, как это сделать, у меня есть следующее решение для SQL Server 2008 R2 и выше:

USE master
go
DENY VIEW ANY DATABASE TO [user]
go

Это точно соответствует требованиям, изложенным выше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...