The win means that the Sharks move to second place in the Zurich Premiership standings, just one point behind top-of-the-table Gloucester.
The Sharks started the match in good form, taking an early lead through a penalty from Joss Baxendell as they took advantage of some disruption in the Bath ranks caused by an early injury to fly-half Mike Catt.
Olly Barkley moved up to take over the No.10 spot, with replacement Tom Voyce coming on from the bench to appear at full-back.
Barkley did manage to draw his side level with a penalty some moments later, but the Sharks grabbed the lead in decisive style after Baxendell slotted a drop-goal.
Bath hit back with a try for flanker Scaysbrook following an effective catch-and-drive from a line-out but the lead was shortlived with Hanley making two scoring incursions through the Bath defence.
Hanley's first try came in the 21st minute after a flowing Sharks backline move and his second came just seven minutes later.
While Baxendell could not convert either try, he did kick penalty some minutes later to edge his side further ahead.
With Bath down to 14 men after the sin-binning of hooker Jonathan Humphreys, the visitors found themselves pinned back into their own half for long periods of time and struggling to plug their own defensive gaps.
The second half saw the Sharks' forwards start to grind into gear, Stu Pinkerton and Dean Schofield crashing over for tries.
Bath rallied briefly, winger Simon Danielli scoring a late try, but the night was to be the Sharks and they finished off in style with a try from Mark Cueto as the visitors were again reduced to 14 men after skipper Danny Grewcock was sin-binned.
For Sale:Tries: Cueto, Hanley (2), Pinkerton, SchofieldCons: BaxendellPens: Baxendell (2)Drop-goal: Baxendell
Bath:Tries: Danielli, ScaysbrookCons: BarkleyPens: Barkley (2)