Good salts are unique over the whole range of space-time.
A user does not change his name when he changes his password: that's a failure of uniqueness over time. (Similar case: an old user account is closed, a new user is registered and reuses the same name.)
A user has the same name on several distinct servers, which may employ the same hashing strategy: that's a failure of uniqueness over space. (Think, in particular, of all these users called "Administrator".)
User names are thus rather sloppy as salts. They are much better than no salt at all, but it is highly recommended to use proper random salts instead. 16 bytes (or more) from a cryptographically strong PRNG will give you much better uniqueness.
The user name does not change when the user changes their password. An attacker seeing the old hashed password and the new hashed password may attack both at a cost less than twice the cost of attacking one.
– gbooooooo Jul 24 '13 at 17:30