6

我和我的一些朋友在共享主机上托管了一个 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
4

2 回答 2

6

不,只要您使用本机 MySql 身份验证,您就不能向有权访问您的源的人隐藏凭据。那是因为您的代码需要将凭据以明文¹的形式传递给服务器,因此它需要能够在连接之前“解密”它们。有权访问您的源的人也可以按照相同的程序对其进行解密。

您可以依靠某种类型的PAM 身份验证而不是用户提供的凭据来保护您的系统,但 Yii 不支持这种方式。


¹注意:这实际上不是真的。客户端将哈希传递给服务器,但它需要访问原始密码才能对其进行哈希处理。这意味着就本次讨论的目的而言,它没有任何区别(对于正在网络上收听的人来说会有所不同)。

于 2012-06-20T09:46:27.300 回答
0

使用 Yii 1.x 我使用下面的方法做到了。

  1. 创建一个类,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(); } }

  2. 调整配置文件 ( protected/config/main.php) 'db' => array( 'class' => 'DbConnection', // Use above classname 'password' => 'encryptedpassword', ),

于 2015-08-24T08:54:13.810 回答