2012-12-19 1 views
9

PHPスクリプトでmysqldumpを実行するcronジョブを実行しています。ダンプにはRELOAD権限が必要です。 MySQL管理者アカウントを使用するのは気分が悪いですが、管理者特権を持つユーザを作成することもありません。PHPのcronジョブ中にmysqldumpのMySQLリロード権限:MySQL管理者アカウントを使用するか、一意のユーザーを作成しますか?セキュリティ?

私の主な関心事はセキュリティの側面です。使用しているクラスの保護された配列の "プロパティ"にdb属性(ユーザー名、パスワードなど)をロードします。

どちらのアプローチが理にかなっているのか、同じ結果を達成する別の方法があるのだろうかと思います。


概要:
LAMPサーバー:CentOSの5.8は、Apache 2.2.3、MySQLの5.0.95、PHP 5.3.3

cronジョブの概要:

  1. 生の統計情報をダンプウェブサイトdb内の2つのInnoDBテーブルからのデータ、 には、外部キーの関係があります。
  2. は、ウェブサイトからコピーしたデータ を削除し、クエリの主キーの値を使用し
  3. を移し、自動インクリメントの主キーの最後の値を取得する統計情報の表にデシベル
  4. データを読み込み統計で転送されるデータは、処理が完了すると、統計情報からデシベル
を生統計データを削除したレポートに テーブル
  • を移入するDB DB
  • プロセス

    ウェブサイトデータベースはバイナリロギングのマスターとして設定されており、統計データがWebサイトデータベースに格納されて処理されなくなると複製されたサーバーがセットアップされます(ウェブサイトデータベースの複製は統計情報を自分のデータベース)。

    cronジョブでアクセスされるすべてのファイルは、DocumentRootディレクトリの外にあります。


    核心:
    最初のステップで実行mysqldumpをはRELOAD権限を必要とし、ここではコマンドです:

    <?php 
    $SQL1 = "--no-create-info --routines --triggers --master-data "; 
    $SQL1 .= "--single-transaction --quick --add-locks --default-character-set=utf8 "; 
    $SQL1 .= "--compress --tables stats_event stats_event_attributes"; 
    
    $OUTPUT_FILENAME = "/var/stats/daily/daily-stats-18.tar.gz"; 
    
    $cmd1 = "/usr/bin/mysqldump -u website_user -pXXXXXX website_db $SQL1 | gzip -9 > $OUTPUT_FILENAME"; 
    
    exec($cmd1); 
    ?> 
    

    エラーメッセージ:

    mysqldump: Couldn't execute 'FLUSH TABLES': Access denied; you need the RELOAD privilege for this operation (1227) 
    

    mysql管理者の資格情報を使用すると正常に動作します。

  • 答えて

    5

    どちらのアプローチが理にかなっているのか、同じ結果を達成する別の方法があるのだろうか。

    結論として、そのmysqldumpコマンドを実行するには特定の権限を持つユーザーが必要です。新しいユーザを作成することは愚かなことかもしれませんが、この1つのcronジョブの場合はとなりますが、少なくともそれは外見上の孤独感を与える最も簡単で簡単なアプローチです。

    これは、レプリケーションを開始して実行できるようになるまで、これがストップギャップ対策であることを考えると、ここで実際に行われる害はありません。レプリケーションによってこれを行うことはまったくの道のりであり、ストップギャップの尺度は正気ではないようです。

    また、複製を取得する時間が来たら、xtrabackupはあなたの友人です。これには、スナップショットにバイナリログの命名と位置情報が含まれているため、新しいスレーブを風に設定するとになります。

    +0

    を私は他のすべての組み合わせよりも、彼らはより多くのスペースを取るし、処理は、時には物事をダウン湿原ので、それがウェブサイトのデータベースのためだ、我々は最初のオフの統計を移動したい、レプリケーションについて明確ではありませんでした。統計情報のダンプを保存しようとすると、報告が少し遅れてしまうことは重要ではありません。だから一時的ではない。私の懸念事項は何よりもセキュリティに関するものだと思うが、私はその質問にそれを強調する。特にセキュリティに関する考え? – codewaggle

    +0

    私は盲目的には、これがコンテキストからの共有ホスティングにないと仮定しています。ユーザーが目的のホストからのみ接続でき、安全なパスワードを選択できることを確認しますか?おそらく、ここには本当の脅威はありません。 – Charles

    +0

    ちょうど私が聞きたかったもの。私たちはサーバーを所有しており、ユーザーを@localhostに設定すると考えました。統計情報を別のサーバーに移動することを考えていましたが、ローカルホストは今のところ動作します。 – codewaggle

    3

    MySQLルートユーザーとして実行していても、同じエラー(おそらくあなたが作業していたサイトで:)を実行しました。私はではなく、 --skip-add-locksを指定して回避することができました。これは働いていた:

    /usr/bin/mysqldump -u USERNAME -pPW DATABASE_NAME --skip-lock-tables --single-transaction --flush-logs --hex-blob 
    
    関連する問題