2016-12-15 1 views
0

У меня есть DatabaseA и DatabaseB. В DatabaseA - UserA, в DatabaseB - UserB.Предоставление SQL Server разрешения EXECUTE для пользователей из другой базы данных

UserA имеет разрешение на функцию EXECUTE скалярной FunctionA в DatabaseA, UserB имеет разрешение EXECUTE хранимой процедуры ProcedureB в DatabaseB.

Теперь ProcedureB использует FunctionA, поэтому, когда UserB выполняет ProcedureB, он получает ошибку

The EXECUTE permission was denied on the object FunctionA

Но когда я пытаюсь дать ему разрешение с

GRANT EXECUTE ON DatabaseA.schema.FunctionA TO UserB 

я получаю другую ошибку:

Cannot find the user UserB, because it does not exist or you do not have permission

Как это исправить? Есть ли способ выполнить FunctionA внутри ProcedureB с привилегиями UserA? Или предоставить разрешение на выполнение до UserB каким-либо другим способом?

ответ

0

Вы рядом! В сообщении об ошибке сообщается, что UserB не существует в DatabaseA, поэтому вам нужно его создать. Как только вы это сделаете, вы сможете предоставить разрешение, и все должно работать.

+0

Но если я создам UserB на DatabaseA, то пользователь будет тем же пользователем, что и UserB on DatabaseB? Я имею в виду, не получаю ли я ошибку, например: «UserB (from DatabaseB) - это не то же самое, что UserB (из DatabaseA)? И как создать UserB на DatabaseA?» CREATE USER UserB FOR LOGIN XYZ; ? – therko

+0

Пользователи - объекты с областью базы данных. Точно так же, как вы можете иметь хранимую процедуру с тем же именем в нескольких базах данных, чтобы вы могли иметь одного пользователя в нескольких базах данных. В этом случае вам нужно иметь пользователь, который сопоставляется с тем же именем в обеих базах данных. Если UserB сопоставляется для входа в систему XYZ в DatabaseA, ему потребуется такое же сопоставление в DatabaseB. –

Смежные вопросы