↑ Количество игр и голов за профессиональный клуб считается только для различных лиг национальных чемпионатов, обновлено по состоянию на 14 мая 2024 года.
↑ Количество игр и голов за национальную сборную в официальных матчах.
Стал заниматься футболом с 7 лет. Воспитанник футбольной школы «Локомотив» (Улан-Удэ). Первый тренер — Владимир Викторович Белобородов[2]. В 2003 году Гранат получил приглашение из клуба «Звезда» Иркутск[3]. В 2004 году провёл 5 матчей за «Звезду» в зоне «Восток» второго дивизиона. В 2005—2006 годах играл за дубль московского «Динамо» (44 игры, 2 гола), в августе 2006 года был отдан в аренду в клуб первого дивизиона«Сибирь». 18 марта 2007 года дебютировал в основном составе московского «Динамо» в Премьер-лиге. В скором времени Гранат стал основным игроком «Динамо», регулярно появляясь на позиции центрального или крайнего защитника. В 2013 году был назначен капитаном, однако в октябре 2014 года был переведён в дубль команды[4]. Поскольку к этому моменту у Граната заканчивался контракт с «Динамо»[5], то к нему стали проявлять интерес российские клубы[6][7], а его агент Трабукки начал подыскивать игроку клуб в Италии[8]. Зимой 2015 года Гранат не появился ни на одном сборе «Динамо» и мог остаться без игровой практики до окончания контракта летом 2015 года[9]. Однако в последний день зимнего трансферного окна перешёл на правах аренды до конца сезона 2014/15 в «Ростов»[10]. 3 марта 2015 года московский «Спартак» объявил о переходе Граната в команду по окончании сезона 2014/15 на правах свободного агента, контракт был рассчитан до июля 2019 года.[11]. В «Спартаке» выступление игрока не задалось: сначала Гранат восстанавливался после травмы и отсутствия игровой практики, а затем, на какое-то время закрепившись в основном составе, потерял расположение главного тренера Дмитрия Аленичева и был выставлен на трансфер по окончании сезона 2015/16[12][13]. С началом сезона 2016/17 Гранат был заявлен в ФНЛ за «Спартак-2» и провёл за команду несколько игр, в одной из которых, против своего бывшего клуба — «Динамо» — отличился голом. 31 августа 2016 года, несмотря на своё желание вернуться в основной состав «Спартака»[14], в последний день летнего трансферного окна наряду с двумя другими спартаковцами Яковлевым и Паршивлюком покинул клуб по согласию сторон. В тот же день стало известно, что Гранат подписал контракт с клубом «Ростов»[15].
В июне 2017 года перешёл в «Рубин»[17]. Весной 2021 года играл за «Олимп-Долгопрудный» в ПФЛ. В феврале 2022 года вернулся в «Олимп-Долгопрудный»[18] и сыграл 1 матч в первом дивизионе. В 2023 году — игрок любительской команды «Нэфис» Казань[19][20]. Также играет в медиафутболе[21][22].
В феврале 2024 года присоединился к тренерскому штабу клуба «Строгино»[23].
Во время матча 29-го тура чемпионата России 2013/14 в Санкт-Петербурге Гранат подвергся нападению выбежавшего на поле болельщика «Зенита» Алексея Нестерова по кличке Гулливер. В результате удара[24] в голову футболист был госпитализирован с сотрясением мозга и подозрением на перелом челюсти[25]. Против Нестерова было возбуждено уголовное дело по статье «побои», которое затем было переквалифицировано на статью «умышленное причинение легкого вреда здоровью». 15 мая Нестеров сдался властям и был арестован на 30 суток. 10 июня мировой суд закрыл уголовное дело в связи с примирением сторон[26].
Привлекался в юношескую и молодёжную сборную России. 19 августа 2011 года был вызван в стан второй сборной России на матч с олимпийской сборной Белоруссии[27].
11 мая 2012 года попал в расширенный состав основной сборной России на Евро-2012, а позже был включён в окончательную заявку сборной на турнир.
В октябре 2017 года после долгого перерыва был вызван в сборную на товарищеские матчи со сборными Южной Кореи и Ирана, однако оба матча был в запасе и на поле не появился.
3 июня 2018 года был включён в заявку сборной для участия в чемпионате мира 2018 года в России[29]. Принял участие в игре 1/8 финала против Испании, выйдя на замену вместо Юрия Жиркова. В этом матче сборная обыграла испанцев по серии пенальти.