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