我正在与我的朋友在共享主机上托管Yii应用程序,并将数据库保存在私有MySQL服务器中。如您所知,其他主持人(我的朋友等)protected\config\main.php
可以很容易地找到数据库信息:
'db'=>array(
'connectionString' => 'mysql:host=211.113.2.45;dbname=FamilyBook',
'emulatePrepare' => true,
'username' => root,
'password' => 'xcute445',
'charset' => 'utf8',
),
有没有任何解决方案可以将连接信息隐藏为IP mySQL服务器,用户名,密码?
可能MySQL服务器提供RSA机制来保护数据库信息吗?
例如,任何人都可以看到如下但无法理解或使用:
'db'=>array(
'connectionString' => '57bf064b2166366a5ea61109006b8d5c',
'emulatePrepare' => true,
'username' => '63a9f0ea7bb98050796b649e85481845',
'password' => 'e04ccf211208f8c97e4a36e584926e60',
'charset' => 'utf8',
), // value by MD5 function, example only
答案 0 :(得分:6)
不,只要您使用native MySql authentication,就无法隐藏有权访问您的来源的人的凭据。那是因为您的代码需要将凭证作为明文¹传递给服务器,因此它需要能够在连接之前“解密”它们。有权访问您的来源的人可以遵循相同的程序并解密它们。
您可以依靠某种类型的PAM authentication而非用户提供的凭据来保护您的系统,但Yii不支持此类。
¹note:事实并非如此。客户端将哈希传递给服务器,但它需要访问原始密码才能对其进行哈希处理。这意味着,对于本次讨论而言,它没有任何区别(对于正在网络上收听的人来说,这会有所不同。)
答案 1 :(得分:0)
使用Yii 1.x我使用以下方法完成。
在DbConnection
内protected/components
内创建一个类CDbConnection
class DbConnection extends CDbConnection
{
public function createPdoInstance()
{
// Decrypt the password used in config file
// e.g.: $this->password = mydecrypt($this->password);
return parent::createPdoInstance();
}
}
调整配置文件(protected/config/main.php
)
'db' => array(
'class' => 'DbConnection', // Use above classname
'password' => 'encryptedpassword',
),