SQL Server 2008 R2: запретите входу сервера видеть все базы данных кроме 2 - PullRequest
0 голосов
/ 30 октября 2018

На моем сервере, на котором размещается SQL Server 2008 R2, я открываю SSMS и в разделе Безопасность -> Вход в систему есть имя входа с именем «SomeLoginName». Когда я вхожу на сервер с этим логином, я могу видеть все базы данных на сервере.

Я бы хотел, чтобы этот пользователь мог видеть только две базы данных, которые находятся на сервере. Я видел некоторые решения, которые говорят, что нужно отменить разрешение VIEW ANY DATABASE для входа в систему, а затем добавить имя входа в качестве db_owner для баз данных, которые я хочу, чтобы «SomeLoginName» мог видеть. Я не хочу иметь "SomeLoginName" в качестве db_owner для баз данных, которые он должен видеть.

Можно ли настроить «SomeLoginName» таким образом, чтобы на сервере отображались только 2 базы данных, а «SomeLoginName» не является db_owner для этих 2 баз данных?

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 31 октября 2018

Благодаря @sepupic, его / ее ответ правильный. Оказывается, на самом деле я использую MS SQL Server 2012, поэтому мне удалось реализовать концепцию Contained Database. Шаги, перечисленные на связанных страницах в ответе @sepupic, мне не помогли. Я нашел этот один и соединил этот скрипт. Вот что он делает:

  1. Изменяет 'contained database authentication' на 1 для экземпляра MS SQL Server
  2. Запуски RECONFIGURE
  3. Создает автономную базу данных
  4. Создает пользователя для базы данных

Вот сценарий:

USE master;

GO;

EXEC sp_configure 'contained database authentication', 1;

GO;

RECONFIGURE;

GO;

CREATE DATABASE ContainedDB2

CONTAINMENT = PARTIAL;

GO;

USE ContainedDB2;

GO;

CREATE USER cduser2

WITH PASSWORD = N'Pa$$word',

DEFAULT_SCHEMA = dbo;

GO;

Затем вы просто настраиваете соединение с содержащейся базой данных в разделе, который начинается с

Вход в систему и проверка прав доступа пользователя к автономной базе данных

Используя сценарий, который я собрал, и настроив соединение в разделе, который я упомянул, он настраивается таким образом, что вы подключаетесь к серверу с созданным пользователем, и этот пользователь может видеть только те базы данных, которые вам нужны. Вы должны настроить пользователя на наличие разрешений, таких как роль db db_datareader в содержащейся базе данных, но инструкции о том, как делать эти типы вещей, легко найти, если вы будете искать их. Еще раз спасибо @sepupic за то, что я начал придумывать ответ.

0 голосов
/ 30 октября 2018

Есть ли способ, которым я могу настроить "SomeLoginName", чтобы видеть только 2 базы данных на сервере без "SomeLoginName", являющегося db_owner для эти 2 базы данных?

Нет, поскольку вы находитесь на SQL Server 2008 R2, такого пути нет.

Начиная с SQL Server 2012 введены новые Содержащие базы данных .

Вот еще одна полезная статья Функция SQL Server 2012 Contained Database

Просматривая новые функции и улучшения в SQL Server 2012, мы нашли потенциально интересную функцию под названием Contained Базы данных. Содержащаяся база данных в основном включает в себя всю базу данных настройки и метаданные внутри себя, в результате чего нет зависимости конфигурации от экземпляра базы данных SQL Server Движок, на котором база данных фактически установлена. Пользователи смогут подключиться к автономной базе данных без аутентификации входа в Уровень Database Engine. Эта функция действительно помогает изолировать базы данных из компонента Database Engine, что позволяет легко переместите базу данных из одного экземпляра SQL Server в другой. В этом Совет, мы рассмотрим, как настроить и использовать эту функцию SQL Server 2012.

При использовании contained databases вам не нужно login (субъект безопасности на уровне server), только user на уровне базы данных. Это будет database, а не server, для authenticate вашего пользователя. И как следствие, этот user не будет «видеть базы данных», кроме базы данных, в которой он был создан.

Этот пользователь не должен быть db_owner, это обычный пользователь с какими-либо разрешениями или даже без какого-либо разрешения.

...