UFN_APPUSER_GETREPORTAPPUSERID
Returns the application user ID with which the report should execute.
Return
Return Type |
---|
uniqueidentifier |
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@USERNAME | nvarchar(128) | IN | |
@ALTUSERNAME | nvarchar(128) | IN |
Definition
Copy
CREATE function dbo.UFN_APPUSER_GETREPORTAPPUSERID(@USERNAME nvarchar(128), @ALTUSERNAME nvarchar(128))
returns uniqueidentifier
with execute as owner
as begin
declare @APPUSERID uniqueidentifier;
declare @REPORTSERVERCREDENTIALS_USERNAME nvarchar(1024);
declare @CANUSERIMPERSONATEALTUSER bit = 0;
select top 1 @REPORTSERVERCREDENTIALS_USERNAME = USERNAME from REPORTSERVERCREDENTIALS
if @REPORTSERVERCREDENTIALS_USERNAME = @USERNAME
set @CANUSERIMPERSONATEALTUSER = 1
if @CANUSERIMPERSONATEALTUSER = 0
begin
-- Determine if the USERNAME is in the AppFxServiceRole
with CTE_Roles (role_principal_id)
as
(
select role_principal_id
from sys.database_role_members
where member_principal_id = USER_ID(@USERNAME)
union all
select drm.role_principal_id
from sys.database_role_members drm
inner join CTE_Roles CR
on drm.member_principal_id = CR.role_principal_id
)
select @CANUSERIMPERSONATEALTUSER = 1
from CTE_Roles
where USER_NAME(role_principal_id) = 'BBAPPFXSERVICEROLE';
end
if @ALTUSERNAME is not null and @CANUSERIMPERSONATEALTUSER = 1
set @APPUSERID = dbo.UFN_APPUSER_GETFROMLOGIN(@ALTUSERNAME);
else
set @APPUSERID = dbo.UFN_APPUSER_GETFROMLOGIN(@USERNAME);
return @APPUSERID;
end