Разрешения базы данных SQL, необходимые для использования олицетворения из соединения SSRS

В настоящее время я сталкиваюсь со следующей ошибкой, когда пытаюсь указать источник данных из SSRS в SQL Server db (2008), используя «учетные данные, которые надежно хранятся на сервере» — это указано как учетная запись Windows «s2 \ killian» с параметром чтобы «выдавать себя за аутентифицированного пользователя после установления соединения».

Сообщение 15157, уровень 16, состояние 1, строка 1 Ошибка установки пользователя по одной из следующих причин: субъект базы данных «s2\killian» не существует, соответствующий субъект сервера не имеет доступа к серверу, этот тип субъекта базы данных не может быть выдает себя за другое лицо или у вас нет разрешения.

Очевидно, что этот метод олицетворения использует функцию SetUser() за кулисами, и в документации MSDN указано, что для использования этой функции требуются разрешения dbowner. Однако я получаю указанную выше ошибку при использовании dbowner. Я не могу использовать системного администратора из-за политики безопасности.

Кто-нибудь знает, как заставить этот механизм аутентификации и олицетворения работать без назначения привилегий системного администратора в базе данных SQL Server учетной записи Windows, используемой источником данных SSRS.

Есть ли способ заставить SetUser() работать без прав системного администратора?

Спасибо, Киллиан.


person user521565    schedule 01.12.2010    source источник


Ответы (2)


Подсказка: «участник базы данных« s2 \ killian »не существует»

Любое соединение использует изменение контекста на стороне базы данных (например, SETUSER, EXECUTE AS и т. д.) требует, чтобы олицетворяемый пользователь существовал в sys.server_principals и/или sys.database_principals.

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

Я всегда думал, что это идиотский вариант для SSRS. MSDN говорит, что использует SETUSER, который также устарел. В идеале вы должны олицетворять соединение before, что возможно для приложений asp.net, но неизвестно для SSRS (которое, конечно, является приложением asp.net)

Извините за отсутствие ответа "сделай это, и это сработает"...

person gbn    schedule 01.12.2010
comment
Извините, что медленно возвращаюсь и говорю спасибо за вашу информацию, однако я не могу на всю жизнь заставить его работать без системного администратора, то есть с использованием dbowner и индивидуального членства в sys.server_principals/sys.database_principals. Я согласен, что странно, что SSRS не использует EXECUTE AS, а не устаревший SetUser. - person user521565; 07.12.2010
comment
Просто для обновления - я могу заставить его работать с помощью dbowner, если учетные записи не настроены на уровне базы данных, то есть логины добавляются на уровне сервера и назначаются роли базы данных на этом уровне! - person user521565; 07.12.2010
comment
На самом деле я забираю предыдущий комментарий - без sa не работает. - person user521565; 15.12.2010

Я также смог подтвердить, что у вас должны быть права системного администратора для запуска функции SETUSER, которая, по-видимому, является механизмом, используемым службами отчетов SQL, когда выбран параметр «Имитация аутентифицированного пользователя после подключения».

Документация MSDN для SETUSER упоминает об этом, но звучит так, как будто это тоже должно быть возможно запустить эту функцию только как db_owner, но я не получил службы отчетов для работы с учетной записью, у которой есть только db_owner, и я даже не смог запустить setuser вручную под учетной записью, у которой есть только db_owner. Единственный способ заставить его работать - это привилегии системного администратора.

person Chris Magnuson    schedule 13.02.2013