我正在与我的一些朋友在共享主机上托管一个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
不,只要您使用本机 MySql 身份验证,就无法向有权访问您的源的人隐藏凭据。这是因为您的代码需要将凭据作为明文¹传递给服务器,因此它需要能够在连接之前"解密"它们。有权访问您的源的人也可以按照相同的过程对其进行解密。
你可以依靠某种类型的 PAM 认证而不是用户提供的凭据来保护你的系统,但 Yii 不支持这样的认证。
¹注意:这实际上不是真的。客户端将哈希传递给服务器,但它需要有权访问原始密码才能对其进行哈希处理。这意味着就本次讨论而言,它没有任何区别(对于在网络上收听的人来说会有所不同)。
使用 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', ),