2013-08-01 3 views
1

Я никогда не работал с пользователями/входами в SQL Server, и мне трудно понять его.SQL Server: предотвращать обновление таблицы с помощью разрешений пользователя

В настоящее время я вхожу в систему как Администратор, который устанавливает меня как пользователя базы данных «dbo».

Существует таблица, в которой я хочу предотвратить UPDATES. Я пробовал изменять разрешения через

DENY UPDATE on SCHEMA::table TO dbo 

, но, видимо, вы не можете общаться с разрешениями пользователя dbo.

Таким образом, я создаю нового пользователя myuser и переключается через setuser myuser, но у этого пользователя, похоже, нет разрешений даже для выбора из таблиц.

Как я могу предоставить разрешения «все, кроме обновления конкретной таблицы» этому пользователю?

+0

Почему вы пытались сделать это для 'dbo'? Если вы просто пытаетесь защитить от случайных обновлений, вы можете определить триггер «INSTEAD OF UPDATE», который ничего не делает, кроме как выдает ошибку. Это не мера безопасности, так как любой, у кого есть соответствующие разрешения, может отключить, изменить или отключить триггер. –

+0

Это не мера безопасности, просто предосторожность. Я попробовал 'INSTEAD OF UPDATE', но это нарушает мои заявления MERGE. – CoderBrien

+0

Ах, правильно. Да, в этом случае по каким-то причинам он настаивает на триггерах «INSTEAD OF» для двух других действий. –

ответ

3

Чтобы предоставить «все, за исключением обновления конкретной таблицы» разрешения, которые вы можете сделать

EXEC sp_addrolemember N'db_datareader', N'myuser' 

EXEC sp_addrolemember N'db_datawriter', N'myuser' 

DENY UPDATE ON dbo.YourTable TO myuser 

From BOL

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

Элементы базы данных db_datareader fixed могут считывать все данные из всех пользовательских таблиц.

+0

Работает как очарование. Ты да, мужчина! – CoderBrien

+0

Есть ли способ вернуться к пользовательскому 'dbo' после того, как я переключился на' myuser'? Я попробовал добавить разрешения 'db_owner', но' setuser dbo' все еще терпит неудачу. – CoderBrien

+0

Используйте [execute as] (http://msdn.microsoft.com/en-us/library/ms181362.aspx) вместо 'setuser', а затем вызывайте' revert' для возврата. –

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