У меня есть 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
каким-либо другим способом?
Но если я создам UserB на DatabaseA, то пользователь будет тем же пользователем, что и UserB on DatabaseB? Я имею в виду, не получаю ли я ошибку, например: «UserB (from DatabaseB) - это не то же самое, что UserB (из DatabaseA)? И как создать UserB на DatabaseA?» CREATE USER UserB FOR LOGIN XYZ; ? – therko
Пользователи - объекты с областью базы данных. Точно так же, как вы можете иметь хранимую процедуру с тем же именем в нескольких базах данных, чтобы вы могли иметь одного пользователя в нескольких базах данных. В этом случае вам нужно иметь пользователь, который сопоставляется с тем же именем в обеих базах данных. Если UserB сопоставляется для входа в систему XYZ в DatabaseA, ему потребуется такое же сопоставление в DatabaseB. –