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