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

9

У меня есть пользователи, видящие связанный сервер, который они не должны видеть.

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

Я создал новый связанный сервер, выполнив следующие действия:

  1. Подключите обозреватель объектов SSMS к экземпляру SQL Server
  2. Разверните Server Objects, щелкните правой кнопкой мыши Linked Serversи щелкните левой кнопкой мышиNew Linked Server...
  3. При Generalзакладке выбрать SQL Serverдля Server typeи написать имя сервера
  4. Под Securityвкладкой в ​​верхней части нажмите Add«sa» as Local Login, введите Remote Userимя иRemote Password
  5. Под Securityвкладкой в ​​нижней части (под For a login not defined in the list above, connections will:) выберите первый вариант:Not be made
  6. Нажмите OKи начните тестирование

Теперь единственный человек, который должен видеть связанный сервер, - это я («sa»), но каким-то образом другие пользователи могут его видеть и использовать.

Примечание 1. Пользователи, которые могут использовать связанный сервер, имеют разрешения на удаленном сервере, они не видят данные, которые не должны видеть, они просто могут получить к ним доступ со связанного сервера, когда им это не нужно.

Примечание 2: я единственный sysadminв обоих случаях.

Рой Гавиш
источник
1
Ну, вы не можете скрыть связанный сервер, но когда они пытаются использовать его, если их текущий контекст входа не имеет каких-либо разрешений на другом конце ...
Аарон Бертран
@AaronBertrand Вы можете скрыть связанный сервер, просто не предоставив ему доступ. Логин, который не определен в списке разрешенных имен входа и не является системным администратором, не может видеть связанный сервер в проводнике объектов.
Рой Гавиш
@AaronBertrand Если у их текущего контекста входа есть права доступа на другом конце, они по-прежнему не могут подключаться через связанный сервер, если это не разрешено.
Рой Гавиш
1
Нет, вы не можете скрыть связанный сервер таким образом. Вы пробовали это?
Аарон Бертран

Ответы:

7

Невозможно «спрятать» связанный сервер или предотвратить попытки его использования неавторизованными пользователями . Все, что вы можете контролировать, - есть ли у них доступ с другой стороны. Связанный сервер сам по себе не является реальным объектом; как синоним, вы не предоставляете доступ к псевдониму, только к вещам, на которые он ссылается.

Попробуйте, и вы увидите, что некоторые из ваших предположений (например, «логин ... не может видеть связанный сервер в проводнике объектов») ложны. Я сделал это:

  1. Создал логин и не предоставил никаких привилегий, просто CONNECT / публичная роль.
  2. Создал связанный сервер и не добавил этот логин в список логинов.
  3. Открыт новый экземпляр Management Studio, соединяющийся с этим логином.
  4. Мне удалось увидеть все связанные серверы в разделе «Объекты сервера»> «Связанные серверы».
  5. Я также был в состоянии сделать запрос, sys.serversчтобы увидеть список связанных серверов.

Я смог выполнить следующий запрос без проблем:

SELECT name FROM [linked server].master.sys.objects;

Однако мне не удалось выполнить запросы к несистемным базам данных, поскольку я не предоставил явный доступ к какой-либо несистемной базе данных или объектам внутри. Например:

SELECT SalesOrderID FROM [linked server].AdventureWorks2012.Sales.SalesOrderHeader;

Получил эту ошибку:

Сообщение 7314, уровень 16, состояние 1, строка 1
Поставщик OLE DB "SQLNCLI11" для связанного сервера "связанный сервер" не содержит таблицу "" AdventureWorks2012 "." Sales "." SalesOrderHeader "". Таблица либо не существует, либо текущий пользователь не имеет разрешений для этой таблицы.

Я ожидаю, что вы можете добиться более ограничительных результатов, явно отказав в доступе к определенным объектам на связанном сервере (или DENY CONNECT SQLк этому логину в целом), но это не ограничивает его влияние на связанный сервер; это также влияет на прямые связи.

В любом случае, я не вижу смысла того, что вы пытаетесь достичь:

  1. Если у пользователя нет доступа с другой стороны, какой вред дает им попытаться ? (Возможно, вам больше повезет, если вы скажете им об этом и не одитируете их, чем пытаетесь помешать им попробовать в первую очередь.)
  2. Если пользователь делает доступ с другой стороны, почему они не могут использовать связанный сервер?
Аарон Бертран
источник
2

Вы можете использовать первую опцию «Не делаться с» отображением входа, как показано ниже:

введите описание изображения здесь

Вот результат с отображенным логином:

введите описание изображения здесь

И вот что происходит с другим аккаунтом

введите описание изображения здесь

PollusB
источник