Как скрыть детали с помощью представления в SQL Server 2008 - PullRequest
1 голос
/ 26 марта 2012

Мои данные в SQL Server 2008 R2 хранятся в базе данных, скажем, CompanyData. У меня есть несколько таблиц с историей транзакций с большим количеством деталей по каждой транзакции.

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

Итак, я создал новую базу данных DBReport и создал представление, которое выбирает только определенные столбцы из таблиц. Например, ВЫБЕРИТЕ field1, field2, field3 из [CompanyData]. [Dbo]. [TableA] ...

Я создал нового пользователя и новый логин (признаюсь, я не понимаю разницу между ними, так как я всегда создаю их вместе) под названием ReportingUser ТОЛЬКО с ролью db_datareader в обоих DBReport.

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

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

Надеюсь, я здесь не так запутан ...

Спасибо!

Ответы [ 2 ]

2 голосов
/ 26 марта 2012

читайте о цепочке владения здесь (это очень хорошее объяснение)

Я думаю, что проблема в вашем случае в том, кто является владельцем объектов. Возможно, ваше представление о DBReport имеет другого владельца, чем ваша таблица [CompanyData]. [Dbo]. [TableA]. Таким образом, у вас есть разрешение на представление, но оно не связывается с таблицей A, поскольку у них разные владельцы.

Вы можете решить эту проблему, добавив разрешение для ReportUser в таблице A.

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

0 голосов
/ 26 марта 2012

Запустите SQl Server manager connect как пользователь с ограниченными правами на отчеты. Новый запрос, вставьте в SQL изнутри зрения. посмотрим, что там написано. Обычная проблема - ссылки, если у вас есть разрешение на просмотр таблицы 2, но не на таблицу 1, на которой есть внешний ключ или аналогичный.

Я должен убедиться, что у вас есть select и ссылки на все таблицы, к которым обращается представление, включая любые таблицы, на которые ссылаются любые udfs или SP (или другие используемые им представления).

PS этот отчет использует только это представление?

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