The one thing I don’t like about migrations is the security, and I’d
like to
know if anyone is interested in working with me to improve it (or knows
an
existing way to accomplish the same thing). Here’s the scenario:
- I always create specific database users that only have CRUD
priveleges, and run my web apps with these users - I need to log in with a superuser to run migrations and other test
functions (like clone_structure) - I never want to store a superuser database password, encrypted or
not, in any of my database.yml files - I don’t want to have to modify database.yml everytime I deploy,
type
in superuser credentials, migrate and then change them back
Here’s my ideal scenario:
- In the database.yml file, I would write :prompt for the password
- Whenever I run a command that uses that environment, the command
line prompts me for the password - When I want to migrate to the production database, I can just
create
a new environment called “migrate_production”, specify the production
database and superuser username, and :promt for the password - that
way the
production site uses the stored password for the limited user, but I
can
deploy as a superuser. - While deploying with Capistrano, I would set the RAILS_ENV to
migrate_production and capistrano would prompt me for the password
when it
came across that part
This can’t be hard, and I’m willing to put the legwork in but I’d love
to
know if a) anyone has accomplished this in a more elegant (or less
elegant
but equally functional) way and b) if anyone would be interested in
working
with me to create something that would be robust enough to submit to
core
(plugins are the first option, of course, but I think running databases
with
least privileges is an important enough subject to be included in core).
I’d appreciate any feedback, suggestions or people willing to help.
Jeff Dean