"That's the way it is supposed to happen," Braves manager Bobby Cox said.
After a day off, Atlanta was a different team from the one that allowed San Diego to set a Petco Park record for runs in a 17-2 decision Monday.
Hanson struck out seven in six innings and got a big lift from McCann, who erased San Diego's 1-0 lead with a two-run double in the sixth inning.
"You get a lot more comfortable with runs on the board," Hanson said. "It lets me go out there and pitch easier and be more aggressive."
Hanson (1-1) held the Padres to one run on four hits, though he walked four and hit a batter as the Braves won for just the second time in six games.
Glaus homered off Sean Gallagher in the seventh to increase Atlanta's lead to 6-1.
It was Glaus' first home run since Sept. 28, 2008, with St. Louis. He appeared in only 14 games last season with the Cardinals because of right shoulder surgery.
"He's been getting his swings in the middle of the lineup," McCann said. "When he hits, it's big."
"Adrian Gonzalez is the guy we didn't want to beat us," McCann said.
"I wanted to work my way toward Blanks rather than Gonzalez," Hanson said. "I felt more comfortable facing him with runners in scoring position."
Hanson also got Blanks to end the fifth inning after Gonzalez's RBI single put runners at first and second with two outs.
"Hanson is a good young pitcher," Padres manager Bud Black said. "He's got a combo of the good velocity with the sharp breaking ball -- pretty tough."
After he gave up Glaus' single, Richard was lifted for Gallagher.
"I got ahead of [McCann] where I wanted with two strikes," Richard said. "I just didn't execute the last pitch. I wanted a fastball inside and I left it over the middle of the plate."
Hanson's wildness led to the Padres' only run in the fifth when he hit Richard with one out. David Eckstein followed with a two-out double and Gonzalez drove in the run with a single.
"From the beginning of the game, Troy was swinging the bat real well," Cox said.
San Diego committed a season-high three errors.
Prado ran his hitting streak to 12 games with a double in the sixth. Prado went 1 for 5 and is hitting .469 (15 for 32). He has 15 hits in the Braves' first eight games.
Headley, who struck out three times, had a single and has hit safely in San Diego's first eight games.
Richard allowed three runs on six hits in 5 1/3 innings and lost for the first time (4-1) in seven starts at Petco Park since coming over last season from the Chicago White Sox in the Jake Peavy trade.
Atlanta's Melky Cabrera and Eric Hinske received their World Series rings from San Diego's Jerry Hairston before the game. Hairston, a member of the New York Yankees last season along with Cabrera and Hinske, flew to New York after the Padres' home opener to take part in the Yankees' home opener and ring ceremony Tuesday. Because the Braves would be in town, Hairston brought back championship rings for Cabrera and Hinske. ... Gonzalez, a two-time Gold Glove first baseman, committed his first error of the season. Gonzalez had just seven errors last year and six the season before in winning consecutive Gold Glove awards.