Моя компания наняла подрядчика, чтобы сделать маленький проект для нас, для которых он должен выбрать данные из одного единственного представления в нашей основной базе данных (SQL Server 2005
).
Я хотел создать вниз заблокированный SQL Server
вход в систему для него, с полномочиями только к SELECT
от "его" представления... и ничего иного.
Таким образом, я создал нового пользователя на сервере, и затем я дал ему разрешение только на этом представлении:
grant select on SpecialView to SpecialUser;
В основном это работает - он не видит ни одной из наших таблиц и хранимых процедур, никакой никакой представления кроме "его".
Но:
По-видимому, его полномочия автоматически заблокированы вниз (sys.objects
шоу только объекты, на которых у него есть полномочия, sp_who
шоу только его собственные процессы и так далее).
Так, мой вопрос:
Действительно ли возможно создать пользователя без доступа к системным представлениям и хранимым процедурам?
(и если да, что я делаю неправильно?)
Или есть ли некоторая причина, почему даже у вниз заблокированных пользователей должен быть доступ к системным представлениям и хранимым процедурам?
Править:
kevchadders, у пользователя нет доступа к ведущему устройству, модели или msdb - только к базе данных с представлением, которое он, как предполагается, видит.
Но, чтобы ясно дать понять одну вещь: система views/procs, который видит пользователь, находится в базе данных, где "его" представление находится... не в основной базе данных. Таким образом, я не могу отключить весь его доступ, так как он должен выбрать из одного представления в той же базе данных.
Точка, даже если я явно установил разрешение только для единственного представления, что он, как предполагается, видит, почему он все еще видит систему views/procs также?
Используйте ОТКАЗАТЬ ОПРЕДЕЛЕНИЕ ПРОСМОТРА
. Вы не можете лишить пользователя возможности видеть существование представлений и хранимых процедур, но можете удалить возможность просмотра (большей части) их содержимого.
deny view definition to smallperms_role
go
sp_addrolemember 'smallperms_role ', 'smallperms_user'
go
sp_addrolemember 'db_datareader', 'smallperms_user'
go
Например:
EXEC sys.sp_databases
ничего не возвращает, но выполняет.
SELECT * FROM INFORMATION_SCHEMA.TABLES
ничего не возвращает, но не возвращает ошибку.
Щелкните пользователя правой кнопкой мыши и выберите страницу Сопоставление пользователей .
Оттуда вы пытались отключить весь его доступ к базе данных master , model и msdb ?
Я думаю, он будет настроен как public на всех трех из них, чтобы вы могли попробовать удалить роль public, чтобы увидеть, какое влияние она оказывает на его вход в систему при запуске этих системных представлений / сохраненных процессов.
Или еще лучше создать тестовый логин, чтобы поэкспериментировать с ним.
Я не думаю, что вы можете удалить доступ PUBLIC для пользователя. (Из свойств пользователя)
Вы можете ЗАПРЕТИТЬ права доступа к PUBLIC, из свойств базы данных.
Но вы не можете запретить разрешение 'CONTROL' для Master или Temp баз данных, и вы не сможете войти на сервер, если вы запретите SELECT для MASTER.