MySQLデータベースユーザー:どの特権が必要ですか?


52

WordPressの短いインストール手順("5 Minutes")には次のことが記載されています。

WebサーバーでWordPress用のデータベースを作成し、それにアクセスして変更するためのすべての権限を持つMySQLユーザーを作成します。

新しいブログを専門的に設定しているときに、MySQLデータベースのユーザー特権/アクセス許可の構成がどのように役立つかを考えていました。

  • データ: SELECTINSERTUPDATEDELETE
  • 定義: CREATEALTERDROP
  • 追加: INDEX
  • もっと:
    1. LOCK TABLES
    2. REFERENCES
    3. CREATE TEMPORARY TABLES
    4. CREATE VIEW
    5. SHOW VIEW
    6. CREATE ROUTINE
    7. EXECUTE
    8. ALTER ROUTINE

最初の3つのグループについては、ここでデータ、定義、およびエクストラと命名しました。しかし、Moreエントリの下にある他のエントリはどうでしょうか?通常、それらは必要ではないと言いますが、セカンドオピニオンを取得したいと思います。

回答:


13

あなたが指摘するように、他の人は必要ありません。

ところで、要求できるページに基づいて条件付きでユーザー/パスを設定することができます。通常の使用ではselect / insert / update / deleteで特権がなく、さらにアップグレードページにアクセスするときは定義/インデックス関連のもので特権があります。


1
WordPress環境で要求されたページ基づい条件付きでユーザー/パスを設定する方法に関する参照はありますか?TA
スーパージョス14年

@superjos:私が頭の外に気づいているわけではありませんが、その要点は、wp-configで通常のDBユーザーの選択/挿入/更新/削除を定義することであり、URLが関連する/ wp-adminページ(おそらくアップグレード、テーマのアクティブ化、プラグインのアクティブ化)。他のすべてを実行できる代替ユーザーを定義します。
デニスドベルナルディ14年

34

「すべての特権」とは、通常、すべてをユーザーに付与することを意味します。しかしながら ...

MySQLユーザーだけが必要であると主張する記事を少なくとも1つ見つけました。

  • 選択する
  • インサート
  • 更新

さらに掘り下げて、完全に動作するために(自動更新、プラグインのインストール/アンインストールなど)、WordPressには追加のアクセス許可が必要であることがわかりました。

  • 削除
  • ALTER(更新用)
  • テーブルを作成
  • ドロップテーブル

また、参照されていませんが、理にかなっています:

  • INDEX

しかし、それらは、他の場所に投稿された意見によって裏付けられている、私が見つけることができる唯一の2つの参照です。GRANT ALLに固執することを引き続きお勧めしますが、DBの使用を絶対に制限する必要がある場合は、これらの7つの特権から開始し、完全テストして、期待どおりに機能することを確認してください。


ご意見をお寄せいただきありがとうございます。インストールされたそのサイトについては、これは開発サイトではないため、すべてを付与しませんでした。INDEX。これまでのところはよさそうだ、私はそれを次の日にわたって追跡し続けると思う、それは実生活のサイトを含む。多くのプラグインの使用など。INDEXについては、コアとmysqlマニュアルを少し検索することもできます。
ハクレ

1
サードパーティのプラグインは必要なSQLステートメントを呼び出すことができることを覚えておいてください...取り消された特権に依存するものをインストールする前に、それらを適切に検査することを確認してください。
EAMann

12

以下は、データベースユーザーの権限を制限する際にCodexが言わなければならないことです。

ブログ投稿の投稿、メディアファイルのアップロード、コメントの投稿、新しいWordPressユーザーの作成、WordPressプラグインのインストールなど、通常のWordPress操作の場合、MySQLデータベースユーザーはMySQLデータベースへのデータ読み取りおよびデータ書き込み権限のみが必要です。SELECT、INSERT、UPDATE、およびDELETE。

したがって、DROP、ALTER、GRANTなどの他のデータベース構造と管理特権を取り消すことができます。そのような特権を取り消すことにより、封じ込めポリシーも改善されます。

注:一部のプラグイン、テーマ、およびWordPressの主要な更新では、新しいテーブルの追加やスキーマの変更など、データベース構造の変更が必要になる場合があります。このような場合、プラグインをインストールする前、またはソフトウェアを更新する前に、データベースユーザーに必要な権限を一時的に許可します。

http://codex.wordpress.org/Hardening_WordPress


2
私は可能な限り最小特権の原則を実践しようとします。(有用な)引用された情報は、リンクされたCodexの記事には含まれていないため、ここにコピーしていただきありがとうございます。
アンソニーG-モニカの正義

2

Redburnの投稿の「メモ」に関して、Wordpress Codexには、更新およびデータベーススキーマの変更についても読む必要がある警告もあります...

(編集:ただし、ユーザーを作成または更新するときに、権限のリストに「許可」が表示さない ことに気付きました。おそらく作成をリストに追加する必要がありますか?これに関する情報はありますか?-Hostgator cPanelの使用、2016年3月-)

警告:
これらの特権[ SELECT、INSERT、UPDATE、DELETE、DROP、ALTER、およびGRANTを持たずに更新を試みます]は、データベーススキーマの変更が発生したときに問題を引き起こす可能性があります。したがって、これらの特権を取り消すことは推奨されません。セキュリティ上の理由でこれを行う必要があると感じた場合は、最初に堅実なバックアップ計画を立て、テストした定期的なデータベース全体のバックアップが有効で、簡単に復元できることを確認してください。データベースのアップグレードの失敗は、通常、データベースを古いバージョンに復元し、適切な権限を付与してから、WordPressにデータベースの更新を再試行させることで解決できます。データベースを復元すると、その古いバージョンに戻り、WordPress管理画面が古いバージョンを検出し、必要なSQLコマンドを実行できるようになります。ほとんどのWordPressアップグレードはスキーマを変更しませんが、一部は変更します。メジャーポイントアップグレードのみ(3.7から3.8、たとえば、スキーマを変更します。マイナーアップグレード(3.8から3.8.1)は通常は行われません。それでも、定期的なバックアップを保存してください。

コーデックス:http : //codex.wordpress.org/Hardening_WordPress


0

私の意見は上記の@EAMannと同じであり、彼が言及した情報源も同様です。生産現場であっても、ユーザーマニュアルを厳守してください。

WordPressコアといくつかのプラグインにコードを提供する人として、ユーザーマニュアルで推奨されているデフォルトのDB権限を保持することをお勧めします(wpdatabasenameのGRANT ALL PRIVILEGES。* TO "wordpressusername" @ "hostname")。

WordPressのソースコード(現在および将来)は、WordPress DBユーザーが特定のWordPressデータベースに対するすべてのDB権限を持っていることを前提としています。セットアップでDB特権が失われると、WordPressをアップグレードしてプラグインを追加するときに問題が発生する場合があります。

したがって、実際に何をしているのかを知り、非常に具体的なニーズがあり、カスタムDB特権を忘れない限り、マニュアルで推奨されているデフォルトのDB特権とは異なるDB特権を使用しないでください。

その後、コーデックスのページは、さまざまなシステムの例とスクリーンショットでこれを行う方法について更新されました。 https://codex.wordpress.org/Installing_WordPress#Step_2:_Create_the_Database_and_a_User

Databseの名前とユーザーの作成(PHPMyAdmin経由):https ://codex.wordpress.org/Installing_WordPress#Using_phpMyAdmin

Databseの名前とユーザーの作成(MySQLコマンドラインクライアント経由):https ://codex.wordpress.org/Installing_WordPress#Using_the_MySQL_Client

mysql> CREATE DATABASE wpdatabasename;
Query OK, 1 row affected (0.00 sec)

mysql> GRANT ALL PRIVILEGES ON wpdatabasename.* TO "wordpressusername"@"hostname"
    -> IDENTIFIED BY "password";
Query OK, 0 rows affected (0.00 sec)

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.01 sec)

mysql> EXIT
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.