2013-11-29 6 views
-1

Мой вопрос будет уточняться: Как я могу изменить данные с помощью представления и не нужно предоставлять разрешения SELECT в таблице?SQL Server - Требуются ли разрешения на таблицы?

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

До сих пор так бог. Но, я должен проверить разрешения также на INSERT и UPDATE и DELETE с помощью INSTEAD-of-Triggers. Поскольку строки, которые пользователь может выбрать, могут не быть такими, что он может изменить.

Моя проблема: Когда у меня есть представление и выдаю разрешения SELECT, INSERT, UPDATE и DELETE, это не сработает. Когда я вставляю в это представление, SQL Server хочет INSERT-Permission в базовой таблице. Это не проблема. Но когда я обновляю или удаляю строки через представление, SQL Server хочет получить разрешения SELECT и UPDATE/DELETE, предоставленные в базовой таблице. Я не хочу давать права SELECT на столе.

Благодаря Крис

+0

Использование триггеров для безопасности - это худшая идея, чем вторжение России зимой. Я вернусь к чертежной доске. – Andomar

+0

спасибо. Это распространенная практика для обновления данных через представление? Когда я должен использовать EXECUTE AS, я должен хранить имя логина в секрете. Поскольку кто-то знает имя LOGIN, имеющее разрешения на уровне таблицы, он может войти в свою учетную запись на SQL Server и использовать EXECUTE AS. – CPMunich

ответ

1

Я имею в виду на:

1/Ограничить VIEW строк, добавив в его определении условие вроде этого:

WHERE UserName = SUSER_SNAME() 
or 
WHERE UserName = CURRENT_USER() 

или

2/С помощью INSTEAD OF триггеры включены.

P.S. Действительно, CREATE VIEW WITH EXECUTE не допускается. Спасибо за ваши сообщения.

+0

в моем случае каждый пользователь имеет свой собственный логин на SQL-сервере. Спасибо, я попробую это решение. – CPMunich

+1

Вы можете работать над ролью так. Вы не можете предоставить публичную роль не прав, добавить пользователя как ddl_reader и выполнить свое мнение в качестве этого пользователя. Вы говорите о пользователях или пользователях sql? Если это окна, используйте активную группу каталогов для своего пользователя и добавьте ее. Ах да, будьте осторожны с этой логикой зрения, у вас могут возникнуть проблемы с подключением к базе данных. Я сделал это без проблем, но это может произойти. У вас есть информация об этом на этом сайте. –

+0

EXECUTE AS не допускается для просмотра. Также не допускаются функции FUNCTIONS, которые возвращают таблицу. Таким образом, единственное использование EXECUTE AS, похоже, работает со хранимыми процедурами. Я не понимаю эту концепцию безопасности. – CPMunich

Смежные вопросы