Разрешения на просмотр базы данных - PullRequest
1 голос
/ 20 июля 2010

Я работаю с базой данных (назовем ее DB_data), которая содержит все таблицы для ряда приложений. В попытке минимизировать время простоя во время обновлений была создана база данных фасада (назовем ее DB_facade), которая имеет представление для каждой из таблиц в DB_data. Он также содержит все функции и хранимые процедуры, которые работают против этих представлений.

Пытаясь заблокировать защиту в DB_data, мы сделали DENY для всех таблиц для всех пользователей в DB_data. Все эти пользователи также были созданы в DB_facade с разрешениями на представления.

Проблема здесь в том, что из-за цепочки владения несколькими базами данных DENY в DB_data переопределяют GRANT в DB_facade.

Я бы хотел избежать включения цепочки владения для обеих этих баз данных из-за потенциальных проблем безопасности (хотя в моих первоначальных тестах это, похоже, исправляло проблему доступа). Кроме того, мы пытаемся свести к минимуму влияние на приложения, поэтому не требуется, чтобы весь доступ осуществлялся через хранимые процедуры и с использованием сертификатов (например).

У кого-нибудь есть еще какие-нибудь предложения о том, как с этим справиться?

Спасибо!

Ответы [ 3 ]

1 голос
/ 20 июля 2010

Есть ли у вас эта проблема, если вы исключаете DENY из таблиц в DB_data?Если вы явно не предоставляете разрешения GRANT для этих таблиц, вы можете получить необходимую защиту и получить права доступа через представления.

0 голосов
/ 20 июля 2010

Вы можете создать представление в базе данных DB_data для каждого представления в базе данных DB_facade. Новые представления будут иметь права выбора из таблиц. GRANT SELECT для представлений в DB_data. Измените представления DB_facade на SELECT из представлений DB_data. И в таблицах будет установлен DENY.

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

0 голосов
/ 20 июля 2010

Из того, что я видел и делал, сервер SQL не позволяет вам иметь никаких разрешений, если это не указано явно.Вы должны быть в состоянии предоставить select (или использовать роль администратора данных роли) в DB_Data пользователям, при условии, что это одна и та же учетная запись и она сопоставлена ​​с обеими базами данных (вам нужно будет предоставить select и exec для db_facade), которые должны работатьпросто отлично.

...