Pastor Maldonado delivered Williams' first win in eight years, finishing in front of Alonso and the Ferrari man's home crowd.
Kimi Raikkonen's spirited drive in an action-packed race earned him his second podium in two races while Mark Webber had a dispiriting weekend.
Practice and Qualifying
All three sessions provided what is now the norm for Formula 1 - surprises. Maldonado's Williams was nowhere on Friday, then challenging for top spot on Saturday.
The Ferrari of Alonso threatened, the Spaniard seemingly enjoying his home race weekend and the challenge of making the 2012 Ferari work.
Bruno Senna failed to make it out of Q3, blaming traffic and Ricciardio was 16th behind his teammate. A frustrated Mark Webber ended 12th after being caught out by a rapidly-changing track in the last minutes of Q2.
"I was told not to go out again, but the way that the track improved was a surprise to all of us. We were very strong in the first part of Q2 and I was happy with how I drove my lap. It's the way it goes sometimes."
The final phase of qualifying saw a dull trundle-for-a-time for Kobayashi, Schumacher and Vettel and a thrilling battle for the first three places, with Hamilton triumphing over Maldonado and Alonso.
Hamilton's triumph was short-lived. McLaren had short-fuelled the Briton's car, breaking several regulations in the process. Hamilton was demoted to the back of the field by an unimpressed stewards committee.
With the lights out, Alonso wasted no time launching down the inside of pole-sitter Maldonado. The Venezuelan wasn't keen on losing the place and eased the Ferrari to the edge of the track.
Undeterred, Alonso kept his foot to the bulkhead and took the inside line into turn one.
Behind them, the Lotuses swapped places while the fifth position Sauber of Sergio Perez entered the battle. Perez briefly got alongside the second Lotus of Grosjean but suffered a cut tyre for his trouble
Mark Webber, who had an awful start and ended up behind Massa, was the first person to pit without the intervention of another driver's front wing.
Perez had demonstrated the effectiveness of the hard tyre and so Red Bull serviced both their cars a lap apart, but Vettel was several places further forward.
As ever Nico Rosberg settled anonymously into fourth after passing Grosjean, followed by his teammate, the Sauber of Kobayashi and, surprisingly, the Toro Rosso of Vergne.
Hamilton kept his nose clean and charged through the field to eleventh. The team went for a bold two-stop strategy to get him in the points, and it worked, Lewis eventually coming home eighth on trashed tyres and after a few tense battles.
Alonso pitted on lap 10, with Grosjean and Schumacher pitting behind him. A lap later Maldonado and Raikkonen pitted together, the lead pack falling in with Caterhams, Marussias and Toro Rossos that hadn't yet come in for tyres.
Bruno Senna's solid race came to end on lap 13. First, an optimistic move from Romain Grosjean appeared to rattle him, the two clashing at turn 1. Under pressure from Schumacher who was bearing down on him at a great rate of knots on the next lap, Senna couldn't make a decision about which line to take.
The German piled into the back of the Williams, showering the close-following Vettel with debris. Senna tried to carry on but eventually parked it, for the second time in this horror weekend.
McLaren's pit-stop woes continued, with Hamilton's otherwise flawless stop ruined when he clipped one of the just-removed tyres, his car leaping into the air and landing in an ungainly fashion. Luckily, he was able to continue out of the pits without further drama.
On lap 17, Mark Webber was engulfed by di Resta, Hamilton and Massa. His team confirmed that his wing was broken and he pitted for a replacement. Once back out, he started banging in fastest laps, but he was 17th with an enormous amount of work to do.
The battle for the lead got very interesting on lap 25 as Maldonado pitted in an attempt to leapfrog Alonso. Maldonado was helped by a slow-to-yield Charles Pic in the Marussia (who was later penalised).
Alonso's lead vanished in the pits, Maldonado easily disappearing into turn one as Alonso exited the pits.
The yellow flags caused by the Senna-Schumacher crash came back to haunt both Sebastian Vettel and Felipe Massa who failed to slow for the section under caution. This played right into Hamilton's hands, who got two free places as a result.
More drama in the pits came on lap 40 as Sergio Perez, whose hard-won fifth place was taken from him by the clash with Grosjean, was the victim of a terrible stop which ended with a mechanic on the ground and Perez parked a few corners later.
Again the lead looked in question as Williams ran into trouble in their stop, adding a few seconds for a stick left rear. Ferari held their nerve and Alonso was in two laps later.
Alonso came out not only behind Maldonado but also behind the Lotus of Raikkonen. Kimi had yet to stop for a final time but this enabled Maldonado to eke out a few tenths as the Lotus slithered around in front of the Ferrari.
Those tenths evaporated quickly as Alonso got to within a second and was able to use his DRS to draw closer to the Williams. Raikkonen signalled his intention to chase down the leaders by taking huge chunks out of the gap between himself and Alonso.
Mark Webber's miserable weekend finished in eleventh behind Hulkenberg while Ricciardio made no impression at all on the race, finishing fifteenth behind his teammate.
Vettel salvaged an impressive sixth while a mystifyingly slow Button somehow grabbed ninth in an evil-handling car.
Maldonado held the lead right to the flag as Alonso gave up the chase and ensured Raikkonen didn't get close enough to challenge.
The win was Williams' first win in a scarcely believable eight years and a fitting 70th birthday present for team principal and founder Sir Frank Williams.
1. Pastor Maldonado - Venezuela - Williams-Renault - 1hr 39m 09.145s
2. Fernando Alonso - Spain - Ferrari-Ferrari - +0m 03.1s
3. Kimi Raikkonen - Finland - Lotus-Renault - +0m 03.8s
4. Romain Grosjean - France - Lotus-Renault - +0m 14.7s
5. Kamui Kobayashi - Japan - Sauber-Ferrari - +1m 14.6s
6. Sebastian Vettel - Germany - Red Bull-Renault - +1m 17.5s
7. Nico Rosberg - Germany - Mercedes-Mercedes - +1m 27.9s
8. Lewis Hamilton - Britain - McLaren-Mercedes - +1m 28.1s
9. Jenson Button - Britain - McLaren-Mercedes - +1m 35.2s
10. Nico Hulkenberg - Germany - Force India-Mercedes - +1 lap
11. Mark Webber - Australia - Red Bull-Renault - +1 lap
12. Jean-Eric Vergne - France - Toro Rosso-Ferrari - +1 lap
13. Daniel Ricciardo - Australia - Toro Rosso-Ferrari - +1 lap
14. Paul di Resta - Britain - Force India-Mercedes - +1 lap
15. Felipe Massa - Brazil - Ferrari-Ferrari - +1 lap
16. Heikki Kovalainen - Finland - Caterham-Renault - +1 lap
17. Vitaly Petrov - Russia - Caterham-Renault - +1 lap
18. Timo Glock - Germany - Marussia -Cosworth - +2 laps
19. Pedro de la Rosa - Spain - HRT-Cosworth - +3 laps
Rtd Sergio Perez - Mexico - Sauber-Ferrari - 39 laps completed
Rtd Charles Pic - France - Marussia -Cosworth - 35 laps completed
Rtd Narain Karthikeyan - India - HRT-Cosworth - 22 laps completed
Rtd Bruno Senna - Brazil - Williams-Renault - 12 laps completed
Rtd Michael Schumacher - Germany - Mercedes-Mercedes - 12 laps completed
Romain Grosjean - France - Lotus-Renault - 1m 26.250s - lap 53
Formula 1 returns in two weeks for the Monaco Grand Prix.