Dael Fry returned to the centre of defence alongside Bernardo Espinosa who captained the side. Starting a league game for the first time this season was Jordan McGhee, fit again after picking up an injury in the final pre-season friendly at Burnley.
This was his first "proper" game in a Boro shirt since signing from Hearts on loan for the season.
It was Boro's defence that was tested first and Espinosa produced an excellent block to deny striker Carlton Morris inside the penalty area.
Marcus Tavernier went for goal as Boro rounded off a quick break to set up a half chance out wide in the Norwich penalty area, but just like Morris, his effort was blocked.
Taking it in turns to create openings, City set up Glenn Middleton on the right-hand edge of the Boro box, but a teasing cross swept low and untouched through the box. Then it was Boro in a seesaw passage of play as a smart move ended with Joao Morelli crossing to Callum Cooke who had a well-struck shot blocked.
Such was the work both defences were putting in, neither goalkeeper was overworked, but Ben Killip should have been on 26 minutes when Morelli was set up by an exquisite crossfield ball from Marcus Tavernier deep in the City half, but the Brazilian cleared the bar with a shot from inside the box.
By now Boro were playing some good football, neat and composed, and when Morelli combined with Robbie Tinkler to set up Arnel Jakupovic inside the penalty area City had to scramble resources and it took a timely intervention from Ray Grant to divert a short on goal.
A moment of opportunism laced with invention shot Boro into the lead on 41 minutes as Robbie Tinkler spotted a half chance and developed it as he shot in between two players, past another and into the penalty area from where he placed an inch-perfect shot across and beyond Killip.
Half-time Norwich City 0 Middlesbrough 1
It took just three minutes of the second half for Boro to increase their lead as Jakupovic sent Joao Morelli away with a well-weighted ball over the top. He still had a bit to do but always looked in control as he entered the penalty area and shot low beyond Killip.
The City skipper became increasingly apoplectic as his side were cut open on a regular basis over the next ten minutes, during which Cooke was denied three times by defenders throwing themselves in the way.
The best of the three chances was set up by Espinosa, looking stronger every game, as he held off challenges to lay off a low ball which Cooke struck well and Killip was equal to it.
A low drive from 25 yards dispatched by Tinkler was well held by the City goalkeeper who by this time had calmed a little, but continued to organise in the hope his side would find a way back into a game Boro were by now dominating.
Again Cooke went for goal, again his effort was blocked and Boro couldn't find a way to get a third that would have wrapped the game up.
City settled, took a better shape and pulled one back on 79 minutes with a goal that would have annoyed Boro's coaches with its simplicity. A low ball from the left wasn't cleared and fell to Carlton Morris who wasn't closed down and didn't make the best contact on a low shot from around 10 yards.
Games at Carrow Road between Norwich and Boro are littered with tales of unlikely comebacks and when Boro conceded a free-kick on the edge of the penalty area with four minutes to go it looked as though this game was to be added to that list, but Joe Fryer did well to hold on to a low shot well struck by Grant.
In the second minute of injury-time Jakupovic stole through just left of centre and brought a smart save from Killip with a powerful shot.
It was a closer finish than had looked likely in the early part of the half, but a result that Boro deserved.
Scorers Tinkler 41, Morelli 48, Morris 79
Norwich City: Killip (Capt.); Ramsay, Lewis, Grant, Godfrey, Efete, Ashley-Seal, Sambu, Morris, Cantwell, Middleton (Adams 57). Subs: Hallett, Crowe, Jaiyesimi, Odusina.
Middlesbrough: Fryer; Halliday, Fry, Espinosa (Capt.), McGhee, Morris, Morelli (Mondal 75), Tinkler, Jakupovic (Jackson 90+2), Cooke (Maloney 81), Tavernier. Subs: Pears (gk); Fewster.
Referee Constantine Hatzidakis
Boro Espinosa 66, foul.
Conditions Warm and dry