Можно ли принудить поведение только для чтения с SqlCommand? - PullRequest
5 голосов
/ 09 октября 2009

Можно ли применить права только для чтения, используя код System.Data.SqlClient для доступа к базе данных Sql Server?

Я хочу разрешить доверенным пользователям писать свои собственные операторы SELECT на веб-сайте.

НЕТ, я здесь не троллю! Очевидными решениями являются создание в базе данных только для чтения пользователя и использование этих учетных данных в строке подключения, и, конечно, только идиот принимает оператор SQL на веб-странице. Это проблема пользовательского развертывания, я не доверяю кому-то другому, чтобы правильно настроить его, и не хочу писать код, проверяющий, что строка подключения только для чтения доступна только для чтения.

Одним из решений было бы проанализировать SQL и убедиться, что это команда только для чтения, или сделать что-то подобное. Я хочу сделать что-то вроде:

SqlConnection conn = new SqlConnection(myConnectionString, Flags.Readonly)

обновление Учитывая строку подключения с привилегиями SA, «создать пользователя бла с паролем = xxx», «использовать my-db», «создать логин бла», «предоставить выбор на mytable to бла». Затем создайте новую строку подключения.

Ответы [ 4 ]

6 голосов
/ 09 октября 2009

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

3 голосов
/ 09 октября 2009

Вы могли бы использовать транзакцию и всегда откат? (но убедитесь, что исполняемый sql не фиксирует)

2 голосов
/ 09 октября 2009

Нет, нет встроенного средства, гарантирующего, что действия конечного пользователя не будут иметь побочных эффектов. Хотя это может быть просто в вашем сценарии, универсальная реализация этого будет невероятно сложной, если не невозможной. Что если в операторе select используется UDF с побочными эффектами?

1 голос
/ 09 октября 2009

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

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