There is actually a noun for this: ingrate. It's now a little archaic, but you'll see it in writing pre-1900.
I don't think it's your meaning, but someone who "doesn't appreciate the good things they have" because they don't understand them or don't choose to value them is often called a Philistine.
You can use adjectives, of which ungrateful is the most obvious.
However, if you want a nice idiomatic turn of phrase, we have to not know you're born (http://www.oxforddictionaries.com/definition/english/not-know-one-is-born) which covers it admirably.
"I can't believe he said that about the NHS. Some people don't know they're born!"
(point of context: the NHS is the British national health service, where you get fantastic health treatment for free, hence the example)