Таблица [tablename] не найдена -2147189180

Я создал отчет, используя Crystal Reports XIr2, чтобы сообщать информацию из базы данных для нашего приложения. Это отчет с перекрестной вкладкой, в котором сообщается о различных данных, возвращаемых при выполнении хранимой процедуры.

Быстрый бит приложения, в котором выполняется этот отчет, - это приложение, написанное на VB6, после загрузки приложения вам предлагается ввести имя пользователя и пароль, которые настроены на SQL-сервере в качестве логинов SQL, поэтому, когда вы входите в приложение, которое вы проверяете на предмет безопасности SQL Server.

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

Error message

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

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

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

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

Любые идеи, пожалуйста?

Ответ 1

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

Ответ 2

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

Возможно, вы можете использовать более универсальный SQL-логин, который будет использовать приложение - таким образом вам не придется отслеживать разрешения для нескольких пользователей (просто предложение!:))