2015-10-29 3 views
3

Добрый день. Я объясню свой сценарий. Есть два пользователя (user1 и user2). У меня есть таблица (tblTest) на SQL-сервере с 3 столбцами (f1, f2, f3). То, что я хочу сделать, это следующее:SQL Server - Ограничение UPDATE для конкретных столбцов

  1. Запретить UPDATE колонке f2 и предоставить UPDATE для столбцов f1 и f3 для user1.

  2. Предоставить UPDATE колонке f2 и отрицать UPDATE колонкам f1 и f3 для user2.

На данный момент я застрял на шаге 1).

Это то, что я сделал:

В SQL Server я выбрал tblTest => Properties => Permissions, выбранный user1.

В «Разрешения для пользователя1» внизу => Обновить, затем кнопку «Разрешения столбца», отметьте «Отключить» для f2 и «Грант» для f1 и f3.

Затем я обратился к SQL Server с учетными данными user1 и попытался обновить строку в этой таблице.

Очевидно, что команда не удалось с этим сообщением:

Оператор UPDATE разрешение было отказано в колонке «f2» объекта «tblTest», базы данных «dbremarksSQL», схема "ДБО.

Все работало так, как должно было до сих пор. Моя проблема в том, что и другие столбцы не обновляются. Я бы хотел, чтобы команда update обновляла столбцы f1 и f3, по крайней мере, и отказала обновление только до f2 (оставив как было).

Возможно ли это?

Спасибо

Кстати я использую SQL Server 2014 Management Studio.

+0

Вы пытаетесь обновить несколько столбцов - в том числе 'tblTest.f2' - в одном утверждении 'UPDATE', а затем вы ожидаете, что' f2' не будет обновлен, а остальные столбцы? Это не то, как работает SQL Server - если вы выполняете инструкцию, которая терпит неудачу из-за отсутствия разрешений, ** ничего не выполняется ** этого оператора! Если вы хотите обновить другие столбцы как 'User1' - используйте соответствующее утверждение' UPDATE', которое ** не упоминает ** столбец 'f2'! –

+0

Отлично! Понял тебя. Спасибо за разъяснения. Тогда в этом случае, я думаю, что я не могу использовать следующую инструкцию в моей будущей программе vb.net: MyDatabaseBindingSource.EndEdit() MyDatabaseTableAdapter.Update (MyDataSet.tblTest) , потому что это один оператор UPDATE. Правильно ли я? INFO: описанный выше сценарий был устранением неполадок, чтобы понять, почему этот MyDatabaseTableAdapter.Update (MyDataSet.tblTest) не работал с тем же эффектом. – LukeLuke

ответ

1

Вы можете попробовать так:

GRANT UPDATE ON dbo.tblTest(f1,f3) TO user1; 
DENY UPDATE ON dbo.tblTest(f2) TO user1; 
+0

Я пробовал. Но результат совпадает с тем же сообщением с сервера. Столбцы f1 и f3 не обновляются. – LukeLuke

+0

@LukeLuke: - Вы проверили, что ваша колонка имеет разрешение на обновление? Похоже, вы установили разрешение на обновление DENY для f1 и f3. –

+0

Да, я проверил его как минимум десять раз. – LukeLuke

0

Вы пробовали это:

grant update(column-name) on table-name to user-name 

шрифт: Grant alter on only one column in table

+0

Я пробовал. Но результат совпадает с тем же сообщением с сервера. Столбцы f1 и f3 не обновляются. – LukeLuke

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