web-dev-qa-db-ja.com

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

私はデータベースを作成しました、例えば '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'
563
marioosh
GRANT ALL PRIVILEGES ON mydb.* TO 'myuser'@'%' WITH GRANT OPTION;

これが私が自分の "スーパーユーザー"特権を作成する方法です(私は通常ホストを指定しますが)。

重要な注意点

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

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

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

844
diagonalbatman

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

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はスーパーユーザーにのみ有効です。それ以外の場合は通常セキュリティ上のリスクです。

お役に立てれば。

490
akostadinov

これは何人かの人々にとって役に立つでしょう:

MySQLのコマンドラインから:

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

残念ながら、現時点ではnewuserはデータベースに対して何かをする権限を持っていません。実際、newuserが(パスワード、パスワードを使用して)ログインしようとしても、MySQLシェルにアクセスすることはできません。 

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

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

このコマンドのアスタリスクは、それぞれアクセスできるデータベースとテーブルを表します。この特定のコマンドを使用すると、ユーザーはすべてのデータベースとテーブルですべてのタスクを読み取り、編集、実行、実行できます。 

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

FLUSH PRIVILEGES;

変更が有効になります。

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

コマンドラインに慣れていない場合は、 MySQL workbenchNavicat または SQLyog のようなクライアントを使用できます。

107
user3008525

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に入り、作成、選択、挿入などのコマンドを実行します。

28
Bhavnesh

このSQLはすべてのデータベースに付与しますが、基本的な権限だけにします。 DrupalやWordpressにはこれで十分で、そのおかげで1つの開発者アカウントでローカルプロジェクトを実行できます。 

GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, 
    INDEX, ALTER, CREATE TEMPORARY TABLES 
ON *.* TO 'username'@'localhost' IDENTIFIED BY 'password';
20
s6712
GRANT ALL PRIVILEGES ON mydb.* TO myuser@localhost IDENTIFIED BY 'mypasswd';

スキーマに対する権限で動作します:) 

オプション:mypasswdの後にWITH GRANT OPTIONを追加できます

13
Dutch Glory

こんにちは私は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;
12
gastonnina

私はGRANT OPTIONを追加することによってのみそれを動作させることができました、それなしでそれは常に許可拒否エラーを受け取ります

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

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

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

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

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

データベースmydbに対するすべての権限をユーザーmyuserに付与するには、次のコマンドを実行するだけです。

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

または

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

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

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

0
pgmank