解决方法
这里的问题不应该是如何隐藏密码,而是如何保护数据库.请记住,密码通常是非常弱的保护,不应被视为保护数据库的唯一机制.你在使用SSL吗?没有?那么即使你设法将密码隐藏在应用程序代码中,仍然很容易在网络上嗅探!
您有多个选项.全部具有不同程度的安全性:
“应用角色”
为应用程序创建一个数据库用户.应用此角色的授权.一个非常常见的设置是允许CRUD操作.
优点
>非常容易设置
>阻止DROP查询(在sql注入中为f.ex.?)
缺点
>看到密码的人都可以访问数据库中的所有数据.即使该数据通常隐藏在应用程序中.
>如果密码被盗用,用户可以无条件地运行UPDATE和DELETE查询(即:一次删除/更新整个表).
原子认证和认证
每个应用程序/最终用户创建一个数据库用户.这允许您即使在每个列的基础上定义原子访问权限.例如:用户X只能从表foo中选择far和baz.没有别的但用户Y可以选择所有的内容,但没有更新,而用户Z具有完整的CRUD(选择,插入,更新,删除)访问权限.
优点
>相当容易设置.
>非常原子授权方案
缺点
>可以很乏味
>具有UPDATE和DELETE权限的用户仍然可能会意外(或故意地)删除/更新无条件.您可能会丢失表中的所有数据.
存储过程与原子验证&auth
在您的应用程序中不写SQL查询.通过SPROC运行一切.然后为每个用户创建db-accounts,并将权限分配给SPROC.
优点
>最有效的保护机制.
> SPROCs可以强制用户对每个查询(包括DELETE和UPDATE)传递标准
缺点
>不知道这是否适用于MysqL(我在该领域的知识是片面的).
>复杂的开发周期:您要做的一切都必须首先在SPROC中定义.
最后的想法
您不应该允许应用程序的数据库管理任务.大多数情况下,应用程序需要的唯一操作是SELECT,INSERT,DELETE和UPDATE.如果您遵循这个准则,用户几乎没有发现密码的风险.除上述要点外.