データベースに対する**すべて**の権限を付与する


611

'mydb'などのデータベースを作成しました。

CREATE DATABASE mydb CHARACTER SET utf8 COLLATE utf8_bin;
CREATE USER 'myuser'@'%' IDENTIFIED BY PASSWORD '*HASH';
GRANT ALL ON mydb.* TO 'myuser'@'%';
GRANT ALL ON mydb TO 'myuser'@'%';
GRANT CREATE ON mydb TO 'myuser'@'%';
FLUSH PRIVILEGES;

これで、どこからでもデータベースにログインできますが、テーブルを作成できません。

そのデータベースおよび(将来的には)テーブルに対するすべての特権を付与する方法。'mydb'データベースにテーブルを作成できません。私はいつも得ます:

CREATE TABLE t (c CHAR(20) CHARACTER SET utf8 COLLATE utf8_bin);
ERROR 1142 (42000): CREATE command denied to user 'myuser'@'...' for table 't'

10
CURRENT_USERのグラントを表示すると何が得られますか。
対角線

5
走ってみましたFLUSH PRIVILEGESか?
ロメイン、

1
@Andy「CURRENT_USERのSHOW GRANTS;」をありがとう -それにより、入力ミスがわかりやすくなります。
marioosh

2
@Romain、 コマンドflush privilegesを使用する場合は不要ですgrantx4
Pacerier 2015年

2
あなたは使用する必要がありFLUSH PRIVILEGES;ますが、権限テーブルを変更した場合、直接のようなステートメントを使用してのみINSERTUPDATEまたはDELETE
simhumileco

回答:


910
GRANT ALL PRIVILEGES ON mydb.* TO 'myuser'@'%' WITH GRANT OPTION;

これは、「スーパーユーザー」権限を作成する方法です(通常はホストを指定します)。

重要な注意点

この回答はアクセスの問題を解決WITH GRANT OPTIONできますが、他のユーザーの権限を編集できるMySQLユーザーを作成します。

GRANT OPTION特権を使用すると、自分が所有している特権を他のユーザーに与えたり、他のユーザーから削除したりできます。

セキュリティ上の理由から、このタイプのユーザーアカウントは、一般の人がアクセスできるプロセス(Webサイトなど)には使用しないでください。このような用途では、データベース権限のみを持つユーザーを作成することをお勧めします。


35
@Romainあなたは実際にここのテーブルにたくさん持っていません-私はユーザーにmyuserという名前を付けません-質問者は単にユーザー名を例として使用していました-一貫性のために同じ例のユーザー名を使用しました。
diagonalbatman

22
けっこうだ。しかし、この質問を後で読む可能性がある他の人々、おそらくは初心者についても考える必要があります。それもSOのポイントではないでしょうか?
ロメイン

7
私もこの答えが良いとは思いません。これは、すべてのデータベースとすべてのテーブルに対する「管理者」権限を与えますが、これは要求されたものではありません。
2014

5
私はこの回答を編集して、mydb。*の代わりに言います、これは非常に広く支持され、見解が高い回答であり、特にMySQLのような洗練されたグループでのセキュリティは非常に重要であると私は考えています。読者がコピーアンドペーストではなく、回答の詳細を調査してくれることを期待しますが、私はたまに現実に住みたいです。
ジョーダン

4
MySQLサーバーを設定する@Romainユーザーmyuserは、自分のカスタムユーザー名に置き換える必要があることを認識できるほどインテリジェントである可能性があります。
AStopher、2015

524

これは古い質問ですが、受け入れられた答えは安全だとは思いません。スーパーユーザーの作成には適していますが、単一のデータベースに対する権限を付与する場合には適していません。

grant all privileges on mydb.* to myuser@'%' identified by 'mypasswd';
grant all privileges on mydb.* to myuser@localhost identified by 'mypasswd';

%それはソケット通信をカバーしていないようlocalhostです。WITH GRANT OPTIONスーパーユーザーにのみ適しています。それ以外の場合は通常、セキュリティ上のリスクがあります。

MySQL 5.7以降の更新は、次のように警告しているようです:

GRANTステートメントを使用して特権以外の既存のユーザーのプロパティを変更することは非推奨であり、将来のリリースでは削除される予定です。この操作にはALTER USERステートメントを使用します。

したがって、パスワードの設定は別のコマンドで行う必要があります。@ scary-wombatからのコメントに感謝します。

ALTER USER 'myuser'@'%' IDENTIFIED BY 'mypassword';
ALTER USER 'myuser'@'localhost' IDENTIFIED BY 'mypassword';

お役に立てれば。


26
WITH GRANT OPTIONすべてを含めるのではなく、指定したデータベースを対象にしないことを表す+1 (*)。
Adonis K. Kakoulidis 2013年

@IanBussieres「%はソケット通信をカバーしていないようです。ローカルホストが対応している」という文法は不明確です。これは実際にはどういう意味ですか?
Thufir 2014年

2
@Thufir、を検索しunix socketsます。使用する場合はlocalhostLinux上でmyslqクライアントをUNIXソケットの代わりに、サーバーへのTCP接続を使用しようとしています。
akostadinov 2014年

1
外部IPアドレスから、またはローカルサブネット上の他のコンピューターからアクセスする場合を除いて、最初のコマンドはおそらく必要ないことに注意してください。その場合は、一般にmyuser @%ではなく、許可する特定のIPアドレス(myuser@192.168.0.1(ローカルサブネット上の1つ)など)を対象とするコマンドを使用することをお勧めします。
エヴァンドノバン

1
mysql> ALTER USER 'root' @ 'localhost' IDENTIFIED BY 'new_password';
Scary Wombat

121

これは一部の人に役立ちます:

MySQLコマンドラインから:

CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'password';

悲しいことに、この時点では、newuserにはデータベースを操作する権限がありません。実際、newuserが(パスワード、passwordを使用して)ログインしようとしても、MySQLシェルにアクセスできません。

したがって、最初に行うべきことは、ユーザーに必要な情報へのアクセスを提供することです。

GRANT ALL PRIVILEGES ON * . * TO 'newuser'@'localhost';

このコマンドのアスタリスクは、アクセスできるデータベースとテーブルを(それぞれ)参照します。この特定のコマンドにより、ユーザーはすべてのデータベースとテーブルにわたってすべてのタスクを読み取り、編集、実行、実行できます。

新しいユーザーに設定する権限を確定したら、必ずすべての権限を再ロードしてください。

FLUSH PRIVILEGES;

これで変更が有効になります。

詳細情報:http : //dev.mysql.com/doc/refman/5.6/en/grant.html

コマンドラインに慣れていない場合は、MySQLワークベンチNavicatSQLyogなどのクライアントを使用できます。


5
flush privilegesgrantコマンドを使用する場合は不要です。x4
Pacerier

1
あなたは卸売Linodeのからコピー、または彼らはあなたからコピーし、次のいずれかlinode.com/docs/databases/mysql/...

私は再びGRANT ALL PRIVILEGES ON * . * TO 'newuser'@'localhost' IDENTIFIED BY 'my_password' WITH GRANT OPTION;(奇妙な...、しかし本当)で識別する必要がありました
rubo77

30

 1.データベースを作成する

CREATE DATABASE db_name;

 2.データベースdb_nameのユーザー名を作成します。

GRANT ALL PRIVILEGES ON db_name.* TO 'username'@'localhost' IDENTIFIED BY 'password';

 3.データベースを使用する

USE db_name;

 4.最後に、データベースdb_nameに移動し、create、select、およびinsert操作などのコマンドを実行します。


今日、これにより「GRANTステートメントを使用して特権以外の既存のユーザーのプロパティを変更することは推奨されておらず、将来のリリースで削除される予定です。この操作にはALTER USERステートメントを使用してください。」という警告が表示されました。では、ユーザーを作成してから特権を付与する必要があることを理解する必要がありますか?
felwithe 2018年

MySQLに、usernameすべての権限を付与する必要があるが、権限は付与しdb_nameないように指示するにはどうすればよいですDROP db_name;か?
tonix

21

このSQLはすべてのデータベースに付与しますが、基本的な権限のみを付与します。これらはDrupalやWordpressに十分であり、便利なことに、ローカルプロジェクトに1つの開発者アカウントを許可します。

GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, 
    INDEX, ALTER, CREATE TEMPORARY TABLES 
ON *.* TO 'username'@'localhost' IDENTIFIED BY 'password';

20
GRANT ALL PRIVILEGES ON mydb.* TO myuser@localhost IDENTIFIED BY 'mypasswd';

スキーマの権限で機能します:)

オプション:mypasswd追加後WITH GRANT OPTION


15

追加するだけで機能させることができましたがGRANT OPTION、常に拒否されたエラーは表示されません

GRANT ALL PRIVILEGES ON mydb.* TO 'myuser'@'localhost' WITH GRANT OPTION;

14

こんにちは私はこのコードを使用してmysqlにスーパーユーザーを作成しました

GRANT EXECUTE, PROCESS, SELECT, SHOW DATABASES, SHOW VIEW, ALTER, ALTER ROUTINE,
    CREATE, CREATE ROUTINE, CREATE TEMPORARY TABLES, CREATE VIEW, DELETE, DROP,
    EVENT, INDEX, INSERT, REFERENCES, TRIGGER, UPDATE, CREATE USER, FILE,
    LOCK TABLES, RELOAD, REPLICATION CLIENT, REPLICATION SLAVE, SHUTDOWN,
    SUPER
        ON *.* TO mysql@'%'
    WITH GRANT OPTION;

その後

FLUSH PRIVILEGES;

11
flush privilegesgrantコマンドを使用する場合は不要です。x4
Pacerier

注:の正確なリストは、GRANTMySQLのバージョンによって異なります。
リックジェームズ

6

リモートサーバーからmydbデータベースのみにアクセスするには

GRANT ALL PRIVILEGES ON mydb.* TO 'root'@'192.168.2.21';

リモートサーバーからすべてのデータベースにアクセスします。

GRANT ALL PRIVILEGES ON * . * TO 'root'@'192.168.2.21';

4

データベースのすべての特権をmydbユーザーに付与するには、次のコマンドをmyuser実行します。

GRANT ALL ON mydb.* TO 'myuser'@'localhost';

または:

GRANT ALL PRIVILEGES ON mydb.* TO 'myuser'@'localhost';

PRIVILEGESキーワードは必要ありません。

また、他の回答IDENTIFIED BY 'password'がコマンドの最後に置くことを示唆している理由がわかりません。必要ないと思います。

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