При создании пользователя SQL Server с разрешением считать одно представление и ничто иное - но он видит системные представления и процедуры?

Моя компания наняла подрядчика, чтобы сделать маленький проект для нас, для которых он должен выбрать данные из одного единственного представления в нашей основной базе данных (SQL Server 2005).

Я хотел создать вниз заблокированный SQL Server вход в систему для него, с полномочиями только к SELECT от "его" представления... и ничего иного.

Таким образом, я создал нового пользователя на сервере, и затем я дал ему разрешение только на этом представлении:

grant select on SpecialView to SpecialUser;

В основном это работает - он не видит ни одной из наших таблиц и хранимых процедур, никакой никакой представления кроме "его".

Но:

  • он может получить доступ ко всем системным представлениям
  • он может получить доступ ко всем системным хранимым процедурам.

По-видимому, его полномочия автоматически заблокированы вниз (sys.objects шоу только объекты, на которых у него есть полномочия, sp_who шоу только его собственные процессы и так далее).

Так, мой вопрос:

Действительно ли возможно создать пользователя без доступа к системным представлениям и хранимым процедурам?
(и если да, что я делаю неправильно?)

Или есть ли некоторая причина, почему даже у вниз заблокированных пользователей должен быть доступ к системным представлениям и хранимым процедурам?

Править:
kevchadders, у пользователя нет доступа к ведущему устройству, модели или msdb - только к базе данных с представлением, которое он, как предполагается, видит.

Но, чтобы ясно дать понять одну вещь: система views/procs, который видит пользователь, находится в базе данных, где "его" представление находится... не в основной базе данных. Таким образом, я не могу отключить весь его доступ, так как он должен выбрать из одного представления в той же базе данных.
Точка, даже если я явно установил разрешение только для единственного представления, что он, как предполагается, видит, почему он все еще видит систему views/procs также?

6
задан Igor Borisenko 6 April 2012 в 03:04
поделиться

3 ответа

Используйте ОТКАЗАТЬ ОПРЕДЕЛЕНИЕ ПРОСМОТРА . Вы не можете лишить пользователя возможности видеть существование представлений и хранимых процедур, но можете удалить возможность просмотра (большей части) их содержимого.

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 ничего не возвращает, но не возвращает ошибку.

2
ответ дан 17 December 2019 в 18:09
поделиться

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

Оттуда вы пытались отключить весь его доступ к базе данных master , model и msdb ?

Я думаю, он будет настроен как public на всех трех из них, чтобы вы могли попробовать удалить роль public, чтобы увидеть, какое влияние она оказывает на его вход в систему при запуске этих системных представлений / сохраненных процессов.

Или еще лучше создать тестовый логин, чтобы поэкспериментировать с ним.

1
ответ дан 17 December 2019 в 18:09
поделиться

Я не думаю, что вы можете удалить доступ PUBLIC для пользователя. (Из свойств пользователя)

Вы можете ЗАПРЕТИТЬ права доступа к PUBLIC, из свойств базы данных.

  • Щелкните правой кнопкой мыши на БД
  • Перейдите к свойствам
  • Перейдите к разрешениям
  • Измените разрешения для роли GUEST.

Но вы не можете запретить разрешение 'CONTROL' для Master или Temp баз данных, и вы не сможете войти на сервер, если вы запретите SELECT для MASTER.

0
ответ дан 17 December 2019 в 18:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: