У меня есть пользователи с разрешением datareader на моем sql, проблема в том, что я заметил, что пользователи часто выполняют «рыбные» запросы (они не знают, что именно нужно запрашивать, чтобы получить то, что вам нужно).
Это продакшн SQL, и мы зашли в тупик из-за этих пользователей. Пытаясь не нарушить их процесс, я применил «запретить определение представления для [пользователя]», чтобы они не могли видеть список таблиц, представление, хранимую процедуру, поэтому больше не нужно «ловить рыбу»
Это было отличное решение , он отлично работает, если вы подключаетесь напрямую к серверу SQL, вы можете запускать запросы (выбрать), но вы не можете видеть список таблиц.
Однако многие пользователи используют эту учетную запись для подключения к нашему SQL с использованием связанного сервера, и при выполнении запроса с использованием связанного сервера возникает ошибка:
SELECT TOP 100 *
FROM [SERVERSQL].[DATABASE].dbo.[TABLE]
Msg 7314, уровень 16, состояние 1, строка 1
Поставщик OLE DB "SQLNCLI11" для связанного сервера "SERVER SQL" не содержит таблицы "" [DATABASE] "." Dbo "." [TABLE] "". Таблица либо не существует, либо текущий пользователь не имеет разрешений для этой таблицы.
Используется SQL Сервер версии 2014 (v12.0.2000.8) и 2016 (v13.0.5492.2) .
Как правильно скрыть таблицы, представления, хранимые процедуры и т. Д. c, но разрешить выбор и заставить его работать на связанном сервере?
Спасибо