Levels of aluminium, arsenic, cadmium, chromium, copper, iron, mercury, manganese, nickel, lead and zinc in tap water, groundwater-fed protected spring and bottled water were determined. The cancer and non-cancer risks associated with ingestion of heavy metals (HM) were also assessed for both children and adults. Forty seven water samples obtained from five divisions of Kampala city were analyzed using atomic absorption spectrophotometry. Cancer and non-cancer risks were determined using incremental lifetime cancer risk (ILCR) and non-carcinogenic hazard quotient (HQ), respectively. Lead content was higher than permissible limits (PL) according to East African Standard, World Health Organization, European Union and United States Environmental Protection Agency (USEPA). Arsenic showed minor exceedances above guideline values in tap water and groundwater-fed protected spring, whereas mercury, manganese and nickel were higher than PL. Levels of aluminium, cadmium, chromium, copper, iron, and zinc were below the PL. The lifetime risk of developing cancer through the oral route was greater than the USEPA acceptable level for both children and adults, revealing that exposure to HM in drinking water posed an unacceptable potential cancer risk. Arsenic contributed ca. 90% of the ILCR in tap water and groundwater-fed protected spring. The combined non-cancer risk of the HM expressed as hazard index (HI) was greater than one, with values for children being higher than those for adults. Lead contribution towards HI was in all cases above 90%. These results demonstrate the presence of alarming non-cancer risks for children.