I hate when websites store my password. It's quite irksome when, if you forget your password, they send it to you plain, in an email, instead of just sending you a reset link. When I get these emails, I know they are storing my password, and in all likelihood, they are storing it in plain text. The worst offense was when I once ordered some business cards: Packed in with my shipment was an invoice with my password on it. Huh?
We never know our users' passwords. There's a brief moment, during registration, when we technically have their password, but it is immediately thrown away after we store the hash of it in the DB.
Obviously, you're not a typical user (unless the website in question is geared toward security enthusiasts, maybe). We admire your conscientiousness, but your preferences are more or less irrelevant for someone who wants to figure out what users want.
That's a meaningless statement. Are you implying there is a definite line between secure and insecure systems? That's false. Are you saying that given a choice between a security feature and a convenience feature, most users will choose the security one? That's false too. Are you saying that if you ask a user, "do you prefer secure or insecure systems?", he'll say "secure"? That's true, but irrelevant. There are a dozen more ways that could be interpreted.
I'm saying that if you gave the option to users about whether they would like the site to store their passwords in plain text or encrypted, most would choose the latter.
The argument that "we can give the the same password" is bunk. You don't even know if that's the user you're giving the password to!
The password could be reset and the user could change it back to the one they were using previously. Clearly, if they've forgotten it, I'm not sure why you figure it's so important for the password to stay the same.
And if you gave the option to users of being able to retrieve their old password or have a new one generated, most would choose the former. And if you explained the drawbacks and advantages of each approach and made the user make an informed decision, most users would just click the Back button.
No, i don't have any evidence, other than anecdotal. It's what I would prefer, because changing the password from random to something that I might remember is an extra step, and an unnecessary one unless security really matters (e.g. money is involved). I took it as given that people prefer less work over more work.
>It's a design choice that has only a few downfalls
One of those downfalls is exposing your user to a host of vulnerabilities should one of those other "security problems" happen.
Why would you figure that the user is only using your DB? Websites are plentiful, and the "typical" user has one password for many sites. If they don't, they're hardly attached to the current one - they forgot it after all!
It's understanding that your app doesn't exist in a bubble and looking out for the best interests of your users that leads to storing passwords in a hash. When you have "design decisions" that put marginal convenience over security, I honestly question the integrity of you as the owner operator.
Why exactly do you need to see my password anyway?
I think retrieving a password is more than a marginal convenience for some audiences. And again, off all the things in a database you don't want the world to see or manipulate, a user's password is pretty low down on the list.
No matter what, as the operator of a website, you'll need to make your own decisions about the various tradeoffs involved.
edit: If, as you asserted, a user forgetting a password means that they're not attached to it, that's all the more reason to keep it around, since they aren't using it elsewhere. I don't think it's unreasonable to assume that people won't break in and see the database (short of you screwing something more important up).
DO NOT STORE PASSWORDS IN PLAIN TEXT
DO NOT STORE PASSWORDS IN PLAIN TEXT
DO NOT STORE PASSWORDS IN PLAIN TEXT
Obviously, this still needs to be said. Every modern database has an encrypt function that you can build right into the SQL string.