Моя компания наняла подрядчика для выполнения небольшого проекта для нас, для которого ему нужно выбрать данные из одного единственного представления в нашей основной базе данных (SQL Server 2005
).
Я хотел создать для него заблокированный SQL Server
логин с правами доступа только к SELECT
из «его» представления ... и больше ничего.
Итак, я создал нового пользователя на сервере, а затем дал ему разрешение только на это одно представление:
grant select on SpecialView to SpecialUser;
По сути, это работает - он не видит ни наших таблиц и хранимых процедур, ни каких-либо представлений, кроме «своего».
Но:
- он может получить доступ ко всем системным представлениям
- он может получить доступ ко всем системным хранимым процедурам.
Видимо, его разрешения автоматически блокируются (sys.objects
показывает только объекты, на которые у него есть разрешения, sp_who
показывает только его собственные процессы и т. Д.).
Итак, мой вопрос:
Можно ли создать пользователя без доступа к системным представлениям и хранимым процедурам?
(и если да, что я делаю не так?)
Или есть какая-то причина, по которой даже заблокированные пользователи должны иметь доступ к системным представлениям и хранимым процедурам?
EDIT:
kevchadders, пользователь не имеет доступа к master, model или msdb - только к базе данных с видом, который он должен видеть.
Но, чтобы прояснить одну вещь: системные представления / процессы, которые может видеть пользователь, находятся в базе данных, где "его" представление ... не в основной базе данных.
Поэтому я не могу отключить весь его доступ, так как ему нужно выбрать одно представление в той же базе данных.
Суть в том, что даже если я явно установлю разрешение только для единственного представления, которое он должен видеть, почему он все еще видит также системные представления / процессы?