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 に答える