2015-03-20 2 views
0

У меня есть приложение .NET, которое подключается к базе данных SQL Server 2012. Приложение использует роль приложения SQL Server, которая имеет разрешения на выполнение только для хранимых процедур в базе данных. Приложение использует корпоративную библиотеку, которая использует метод SqlCommandBuilder.DeriveParameters.Вызов системной хранимой процедуры «sys.sp_procedure_params_100_managed» в SQL Server не возвращает данные для роли приложения

Этот метод вызывает системную процедуру [sys].[sp_procedure_params_100_managed]. Призыв к этой процедуре не возвращает никаких результатов, которые являются ошибкой и заставляет EL выдавать «Хранимую процедуру xx не существует». XX - это параметр, имя процедуры, к системной процедуре sp_procedure_params_100_managed, чтобы получить информацию параметров процедуры ввода. Если я делаю тот же вызов, используя пользователя с более высокими привилегиями SQL Server, процедура возвращает данные. Таким образом, никакие данные для роли приложения, по-видимому, не являются проблемой разрешения/привилегий.

Как предоставить надлежащие разрешения конкретной системной процедуре роли приложения?

ответ

0
Use Master; 
GO 

GRANT EXECUTE ON OBJECT::[sys].[sp_procedure_params_100_managed] 
    TO ApplicationUser; --<-- Whatever the Application Use is called 
GO 
+0

Роль приложения определяется только в конкретной базе данных. Это не видно в мастер. Я получаю «не могу найти пользователя« xx »...» Также я не уверен в выполнении гранта. Роль приложения не получает ошибку отказа от выполнения, если грант не добавляет правильные разрешения. – Abdu

+0

Замените «USE Master» на «USE MyDataBase» –

0
Use MyDatabase; 
GO 

GRANT EXECUTE ON OBJECT::[sys].[sp_procedure_params_100_managed] 
    TO ApplicationUser; --<-- Whatever the Application User is called 
GO 

Списывание из M.Ali.

вероятно причина отказа в том, что вы предоставили EXECUTE права на хранимые процедуры в DBO схеме, где SYS фактически отдельная схема. Это сложно сказать, если вы не указали фактическую конфигурацию учетной записи пользователя.