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

Разрешить возможность чтения представлений только для определенного пользователя SQL Server через ODBC

Вопрос новичка: у меня есть дизайнер, который считывает информацию из базы данных SQL Server [2008]. Я установил для него несколько представлений, чтобы он мог извлекать данные, и предоставил его пользователю роль db_dataread. Его программа использует соединение ODBC для захвата данных.

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

Есть ли способ ограничить то, что он может видеть, только несколькими видами, которые я создал для него?

[РЕДАКТИРОВАТЬ: я создал нового тестового пользователя и новое тестовое соединение ODBC, не давая вообще никаких разрешений без изменения результатов. Из того, что я прочитал, это потому, что все пользователи являются частью роли ОБЩЕСТВЕННОГО сервера. Похоже, что публичная роль предоставляет привилегию SELECT всем системным объектам. Кто-нибудь знает иначе?]

Удалите пользователя из роли db_datareader и просто дайте ему права SELECT для представлений, которые вы для него создали. Вы не упоминаете, какая версия SQL Server используется, но отправной точкой неизменно является открытие экрана свойств пользователя и поиск чего-то, что говорит о разрешениях.

CodeByMoonlight верен. Вам необходимо удалить роль db_datareader.

У вас есть несколько вариантов:

  1. Сделайте так, как предлагает CodeByMoonlight, и предоставьте пользователю права выбора только для тех представлений, которые вы хотите, чтобы он имел. Это замечательно, если вы никогда не планируете иметь другого пользователя, которому потребуется доступ к тому же типу.

  2. Создайте схему и назначьте ей разрешения, предлагаемые CodeByMoonlight. Это позволит вам предоставить такой же доступ другому человеку.

    Цепочка разрешений схемы 2008 = Server.DB.Schema.Object