• I created a proc in a db, granted rights to a role, added a normal (non sysadmin/non secadmin) to the role, and this seemed to work. You'd have to modify to get user values from all dbs, but not that hard. I might make a proc or function to get users from a db, then loop that if needed.
    CREATE PROCEDURE GetLogins_NonSA
    WITH EXECUTE AS OWNER
    /*
    Description:

    Changes:
    Date   Who   Notes
    ---------- ---   ---------------------------------------------------
    1/24/2017 PLATO\Steve Initial proc to get server logins
    */
    AS
    BEGIN
    SELECT name
      , principal_id
      , sid
      , type
      , type_desc
      , is_disabled
      , default_database_name
    FROM master.sys.server_principals

    RETURN
    END
    GO

    GRANT EXECUTE ON GetLogins_NonSA TO MigrationRole
    go
    ALTER ROLE MigrationRole ADD MEMBER JoeDBA