Требуется разрешение для хранимой процедуры в базе данных A для выбора из таблицы в базе данных B - PullRequest
0 голосов
/ 12 сентября 2011

У меня есть две базы данных на одном и том же сервере SQL2008, и многие хранимые процедуры в одной базе данных (назовите ее A) должны иметь доступ к таблицам в другой базе данных (B).Я удостоверился, что у пользователя SQL на A есть разрешение EXEC для процедуры на A, но я также запустил DENY ALL ON mytablename, чтобы попытаться применить меры безопасности.Хотя я где-то тупой ...

Я получаю эту ошибку при запуске myproc на A:
Поставщик Microsoft OLE DB для драйверов ODBC Ошибка '80040e09'
[Microsoft] [ODBCДрайвер SQL Server] [SQL Server] Отказано в разрешении SELECT для объекта «mytablename», базы данных «B», схемы «dbo».

Хотя я мог GRANT SELECT получить доступ к рассматриваемым таблицам, на самом деле это не решение, не так ли ?!Мне бы хотелось, чтобы у протоколов в любой базе данных был доступ SELECT к таблицам без возможности выбора пользователем непосредственно из таблиц.

База данных A имеет:
Таблица -mytablename
Пользователь - myuserA (член db_datareader, связанный с логином с именем 'bob')

База данных B имеет:
Proc - myproc (который ВЫБРАЕТ из A ..mytablename)
Пользователь - myuserB (член db_datareader, связанный с тем же логином 'bob')

Я понимаю, что нам действительно нужен администратор базы данных, но у нас всего два сотрудника!

1 Ответ

1 голос
/ 13 сентября 2011

Запустив DENY ALL ON table, вы фактически отказываете в разрешениях независимо от того, явно ли вы предоставили SELECT. ДЕНИ бьет все.

То, что вы хотите сделать, - это создать представления для базы данных B и предоставить SELECT пользователям, которые могут запускать SP в базе данных A. Защита будет распространяться из базы данных A в базу данных B при запуске SP в базе данных A.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...