Назад | Перейти на главную страницу

Как я могу предоставить моей базе данных SQL Server 2008 доступ только для чтения?

Я пытаюсь предоставить доступ только для чтения (другими словами: выбирать только запросы) учетной записи пользователя в моей базе данных SQL Server 2008 R2. Какие права я должен предоставить пользователю для выполнения этой работы?

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

Участник сервера «foo» не может получить доступ к «bar» базы данных в текущем контексте безопасности.

Спасибо за вашу помощь,

Адриан

Первый шаг - создать пользователя с только db_datareader разрешения.

Но не останавливайтесь на достигнутом. Если это логин для реального человека, который может выполнить любой запрос SELECT, который он хочет, он все равно может вызвать много проблем для базы данных. Эта распространенная проблема здесь даже не у злоумышленников - просто у кого-то, кто не осведомлен о вашей индексации, настройке производительности и эффективном написании запросов. Таким образом очень легко создать ситуацию отказа в обслуживании в sql box.

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

  1. Ограничить записи, возвращаемые через УСТАНОВИТЬ ROWCOUNT.
  2. Использовать УСТАНОВИТЬ QUERY_GOVERNOR_COST_LIMIT. (Обратите внимание, что настройка может быть сложной).

Чтобы заставить пользователя включать их в свои запросы, в прошлом я использовал хранимую процедуру, которая сначала выполняла соответствующие SET перед запуском предоставленного запроса (в контексте правильного пользователя, доступного только для чтения).

Обычно я делаю что-то в этом роде:

USE [test]
GO
CREATE USER [ReadOnlyUser] FOR LOGIN [LOCALNT\ReadOnlyNTUser]
GO
EXEC sp_addrolemember N'db_datareader', N'ReadOnlyUser'