CREATE PROCEDURE [dbo].[stproc_ssb_send]
      @iname varchar(20)
    WITH EXECUTE AS 'xyz'
    AS
    BEGIN
    
    DECLARE @DIALOG_HANDLE UNIQUEIDENTIFIER
    DECLARE @MSG varchar(max) 
    
    SET @MSG='<MESSAGE>
            <test>' + @iname + '</test>
            </MESSAGE>'
    
        BEGIN DIALOG CONVERSATION @DIALOG_HANDLE
        FROM SERVICE START_PROC_PROCESS_SERVICE
        TO SERVICE 'EXECUTE_PROC_PROCESS_SERVICE'
        ON CONTRACT [PROC_PROCESS_CONTRACT]
        WITH ENCRYPTION= OFF;
    
        SEND ON CONVERSATION @DIALOG_HANDLE
        MESSAGE TYPE PROC_PROCESS_MT(@MSG);
    
        END CONVERSATION @DIALOG_HANDLE
    END

error:

> Msg 15517, Level 16, State 1, Procedure [stproc_ssb_send], Line 0   
> Cannot execute as the database principal because the principal "xyz" does not exist, this type of principal cannot be impersonated, or you do not have permission.

`XYZ` is `db_owner` / `db_ddladmin` for this database.

Procedure is created using `sa`; error occurs while executing.