669

'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'
4

11 に答える 11

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

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

重要な注意点

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

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

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

于 2011-02-16T12:45:05.047 に答える
555

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

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

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

ALTER USER 'myuser'@'%' IDENTIFIED BY 'mypassword';
ALTER USER 'myuser'@'localhost' IDENTIFIED BY 'mypassword';
于 2013-03-29T16:56:29.950 に答える
134

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

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ワークベンチNavicatSQLyogなどのクライアントを使用できます。

于 2013-11-19T11:26:45.303 に答える
32

 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操作などのコマンドを実行します。

于 2016-03-20T05:13:36.217 に答える
23

このSQLは、基本的な特権だけを除いて、すべてのデータベースに付与します。DrupalやWordpressには十分であり、優れた点として、1人の開発者アカウントでローカルプロジェクトを実行できます。

GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, 
    INDEX, ALTER, CREATE TEMPORARY TABLES 
ON *.* TO 'username'@'localhost' IDENTIFIED BY 'password';
于 2014-12-09T00:37:02.917 に答える
21
GRANT ALL PRIVILEGES ON mydb.* TO myuser@localhost IDENTIFIED BY 'mypasswd';

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

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

于 2015-06-07T08:21:13.260 に答える
17

追加するだけで動作させることができましたがGRANT OPTION、常に許可拒否エラーが発生することはありません

GRANT ALL PRIVILEGES ON mydb.* TO 'myuser'@'localhost' WITH GRANT OPTION;
于 2015-10-25T14:49:00.307 に答える
16

こんにちは私はこのコードを使用して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;
于 2014-10-07T19:53:56.923 に答える
8

MySQL Ver 8.0.21で作業しているときに、この課題が発生しました

ホストで実行しmy_app_dbているrootユーザーに名前付きデータベースのアクセス許可を付与したかったのです。localhost

しかし、コマンドを実行すると:

use my_app_db;

GRANT ALL PRIVILEGES ON my_app_db.* TO 'root'@'localhost';

エラーが発生します:

エラー1064(42000):SQL構文にエラーがあります。'my_app_db。*TO'root'@' localhost''の1行目で使用する正しい構文については、MySQLサーバーのバージョンに対応するマニュアルを確認してください>

これが私が修正した方法です

MySQLコンソールにログインします。ログインするrootユーザー変更できます。

mysql -u root -p

mysqlルートパスワードを入力します

次に、MySQLサーバー上のすべてのユーザーとそのホストを一覧表示します。PostgreSQLとは異なり、これは多くの場合mysqlデータベースに保存されます。したがって、mysql最初にデータベースを選択する必要があります。

use mysql;
SELECT user, host FROM user;

:を実行しないuse mysqlと、no database selectedエラーが発生します。

これにより、次のような出力が得られます。

+------------------+-----------+
| user             | host      |
+------------------+-----------+
| mysql.infoschema | localhost |
| mysql.session    | localhost |
| mysql.sys        | localhost |
| root             | localhost |
+------------------+-----------+
4 rows in set (0.00 sec)

次に、リストから取得した情報に基づいて、必要なユーザーに特権を付与します。データベースに権限を付与する前に、まずデータベースを選択する必要があります。私の場合、ホストrootで実行されているユーザーを使用しています。localhost

use my_app_db;
GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost';

:このGRANT ALL PRIVILEGES ON database_name.* TO 'root'@'localhost';コマンドは、MySQLの最新バージョンでは機能しない場合があります。MyQLの最新バージョンのほとんどは、使用するデータベースを選択した後、特権の付与database_nameコマンドでwithを置き換えます。*

その後、MySQLコンソールを終了できます。

exit

それでおしまい。

これがお役に立てば幸いです

于 2020-09-30T16:53:45.843 に答える
6

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

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

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

GRANT ALL PRIVILEGES ON * . * TO 'root'@'192.168.2.21';
于 2015-06-25T11:32:54.747 に答える
4

データベース上のすべての特権をmydbユーザーに付与するには:myuser、実行するだけです:

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

また:

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

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

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

于 2018-03-29T14:16:08.497 に答える