Каков наилучший способ ограничения запросов на вставку / обновление при использовании ExecuteSqlCommand? - PullRequest
1 голос
/ 11 июня 2019

Я наследую класс, который имеет этот публичный виртуальный метод

public virtual int ExecuteSqlCommand(string query, params SqlParameter[] parameters)
{
    return _context.Database.ExecuteSqlCommand(query, parameters);
}

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

Я могу сделать это путем поиска ключевых слов вставки / обновления в запросе, но я не уверен, что это на 100% доказательство.

Есть ли лучший способ добиться этого?

Ответы [ 2 ]

3 голосов
/ 11 июня 2019

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

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

0 голосов
/ 11 июня 2019

Поиск INSERT / UPDATE / DELETE не является 100% доказательством того, что потребители действительно хотят его неправильно использовать. Они могут выполнить что-то вроде:

EXEC('DE' + 'LETE ' + 'FROM Users')

Другой способ, который также в принципе работает, но не является доказательством, - это создатьтранзакции и откатите ее в конце.

Лучший способ - создать нового пользователя с доступом только для чтения и подключиться к базе данных с использованием этой учетной записи.

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