2009-04-03 3 views
1

Какова наилучшая практика хранения учетных данных базы данных в CMS? Теперь я объявляю их в моей базе данных класса одноплодной:Как вы храните учетные данные базы данных в типичной CMS-сборке на PHP?

$this->credentials = array("hostname"=>"hostname", "username"=>"username","password"=>"password", "database"=>"database"); 

Но это не так интуитивно искать, где изменить их, а также я планирую сделать файл установки для СЦИ позже.

Где и как вы храните свои настройки подключения?

ответ

1

Вы можете использовать одноэлементный класс, как вы упомянули, или что-то более простое.

Во всех моих config.inc.php файлов У меня есть стандартный ассоциативный массив

$config['Main_Database'] = ''; 
$config['db_user'] = ''; 
$config['db_pass'] = ''; 
$config['db_host'] = ''; 

Концепция такая же, и вы на правильном пути. Сделайте это тем, что, как человек, имеет смысл для вас. Если у кого-то есть доступ к вашему серверу, вы все равно ввернете, так что это не большая проблема с точки зрения безопасности.

Что касается установочного файла, я видел, как многие приложения открывают конфигурационный файл, настраивают несколько конкретных частей с помощью кода, а затем фактически переписывают файл обратно на сервер (а не «сохраняют настройку») , Он достигает такого же результата, но делается с помощью мастера, а не вручную.

+0

Мне нравится этот подход, спасибо. –

1

CakePHP использует конфигурационный файл с именем database.php (в/приложение/Config /), в котором объявлен класс DATABASE_CONFIG:

class DATABASE_CONFIG { 

    var $default = array(
     'driver' => 'mysql', 
     'persistent' => false, 
     'host' => 'localhost', 
     'login' => 'user', 
     'password' => 'password', 
     'database' => 'database_name', 
     'prefix' => '', 
    ); 

    var $test = array(
     'driver' => 'mysql', 
     'persistent' => false, 
     'host' => 'localhost', 
     'login' => 'user', 
     'password' => 'password', 
     'database' => 'test_database_name', 
     'prefix' => '', 
    ); 
} 

Это создает единое место, где пользователь может установить все свои базы данных в то время как интуитивная структура каталогов делает его очевидным, когда хранятся конфигурации базы данных. И вы также можете указать несколько конфигураций для целей производства, разработки и тестирования, которые легко переключаться между ними.

+0

Это типичный подход к хранению такой информации о конфигурации. Иногда вместо них используются форматы .ini или XML, но идея такая же. – Kalium

+0

Одно замечание: если вы используете .ini /.xml, вы должны заблокировать доступ к ним с помощью .htaccess, иначе все смогут их увидеть. – Alekc

+0

Да, и я бы не помещал эти файлы xml и ini в корневой каталог - я бы предпочел тогда как config.php.mycustomextension или config.php, а не xml или ini или txt - несмотря на htaccess - я никогда не доверяю ему. – TheBlackBenzKid

1

Как правило, я не помещаю учетные данные непосредственно в исходный код, а сохраняю их в файлах конфигурации. Это значительно облегчает их изменение, например, когда вы переходите с вашей машины разработки на тестовую машину, которая может (должна) подключаться к другой базе данных.

Этот файл конфигурации должен храниться где-то вне каталога webroot.

Вы также можете зашифровать пароль в некотором роде, чтобы иметь немного больше безопасности, если файл конфигурации будет скомпрометирован. С другой стороны, если кто-то получает физический доступ к вашему серверу, вы все равно ввернуты, так что, возможно, это не стоит того.