web-dev-qa-db-ja.com

MySQLで新しいユーザーを作成し、それに1つのデータベースへのフルアクセスを与えます

私はMySQLで新しいユーザーを作成し、それに私がcreate database dbTest;のようなコマンドで作成するdbTestと言う1つのデータベースだけへのフルアクセスを与えたいです。そのためのMySQLコマンドは何でしょうか。

560
jimgh

これを試して、ユーザーを作成してください。

CREATE USER 'user'@'hostname';

これを試して、データベースdbTestへのアクセスを許可してください。

GRANT ALL PRIVILEGES ON dbTest.* To 'user'@'hostname' IDENTIFIED BY 'password';

同じマシン上でMySQLにアクセスするコード/サイトを実行している場合、hostnameはlocalhostになります。

今、故障しました。

GRANT - これは、ユーザーを作成し、データベース、テーブルなどに対する権限を付与するために使用されるコマンドです。

ALL PRIVILEGES - これは、ユーザーがすべての標準特権を持つことを意味します。ただし、これにはGRANTコマンドを使用する特権は含まれていません。

dbtest.* - これはMySQLにdbtestデータベース全体での使用のためにこれらの権利を適用するよう指示します。必要に応じて*を特定のテーブル名またはストアルーチンに置き換えることができます。

TO 'user'@'hostname' - 'user'は、作成しているユーザーアカウントのユーザー名です。注:そこには一重引用符が必要です。 'hostname'はユーザーに接続できるホストをMySQLに伝えます。同じマシンからだけ入手したい場合はlocalhostを使用してください。

IDENTIFIED BY 'password' - ご想像のとおり、これはそのユーザーのパスワードを設定します。

770
Dan McGrath

構文

MySQL/MariaDB 5.7.6以降でユーザーを作成するには、 CREATE USER構文 を使用します。

CREATE USER 'new_user'@'localhost' IDENTIFIED BY 'new_password';

データベースへのすべてのアクセスを許可するには(たとえばmy_db)、 GRANT Syntax を使用します。

GRANT ALL ON my_db.* TO 'new_user'@'localhost';

ALLpriv_type)は、SELECTINSERTUPDATEALTERなどの特定の特権に置き換えることができます。

それから新しく割り当てられた許可をリロードするために実行します。

FLUSH PRIVILEGES;

実行中

上記のコマンドを実行するには、mysqlコマンドを実行してそれらをPromptに入力し、quitコマンドでログアウトする必要があります。 Ctrl - D

Shellから実行するには、-eパラメータを使用します(SELECT 1を上記のコマンドの1つに置き換えます)。

$ mysql -e "SELECT 1"

または標準入力からのステートメントを印刷します。

$ echo "FOO STATEMENT" | mysql

上記でアクセスが拒否された場合は、-u(ユーザーの場合)および-p(パスワードの場合)パラメータを指定するか、長期アクセスの場合は~/.my.cnfの信任状、例えば.

[client]
user=root
password=root

シェル統合

MySQLの構文に慣れていない人のために、ここに覚えて使いやすい便利なシェル関数があります(それらを使用するには、さらに含まれているシェル関数をロードする必要があります)。

これが例です。

$ mysql-create-user admin mypass
| CREATE USER 'admin'@'localhost' IDENTIFIED BY 'mypass'

$ mysql-create-db foo
| CREATE DATABASE IF NOT EXISTS foo

$ mysql-grant-db admin foo
| GRANT ALL ON foo.* TO 'admin'@'localhost'
| FLUSH PRIVILEGES

$ mysql-show-grants admin
| SHOW GRANTS FOR 'admin'@'localhost'
| Grants for admin@localhost                                                                                   
| GRANT USAGE ON *.* TO 'admin'@'localhost' IDENTIFIED BY PASSWORD '*6C8989366EAF75BB670AD8EA7A7FC1176A95CEF4' |
| GRANT ALL PRIVILEGES ON `foo`.* TO 'admin'@'localhost'

$ mysql-drop-user admin
| DROP USER 'admin'@'localhost'

$ mysql-drop-db foo
| DROP DATABASE IF EXISTS foo

上記のコマンドを使用するには、以下の関数をあなたのrcファイルにコピー&ペーストして(例えば .bash_profile )シェルを再ロードするか、ファイルを入手します。この場合はsource .bash_profileと入力するだけです。

# Create user in MySQL/MariaDB.
mysql-create-user() {
  [ -z "$2" ] && { echo "Usage: mysql-create-user (user) (password)"; return; }
  mysql -ve "CREATE USER '$1'@'localhost' IDENTIFIED BY '$2'"
}

# Delete user from MySQL/MariaDB
mysql-drop-user() {
  [ -z "$1" ] && { echo "Usage: mysql-drop-user (user)"; return; }
  mysql -ve "DROP USER '$1'@'localhost';"
}

# Create new database in MySQL/MariaDB.
mysql-create-db() {
  [ -z "$1" ] && { echo "Usage: mysql-create-db (db_name)"; return; }
  mysql -ve "CREATE DATABASE IF NOT EXISTS $1"
}

# Drop database in MySQL/MariaDB.
mysql-drop-db() {
  [ -z "$1" ] && { echo "Usage: mysql-drop-db (db_name)"; return; }
  mysql -ve "DROP DATABASE IF EXISTS $1"
}

# Grant all permissions for user for given database.
mysql-grant-db() {
  [ -z "$2" ] && { echo "Usage: mysql-grand-db (user) (database)"; return; }
  mysql -ve "GRANT ALL ON $2.* TO '$1'@'localhost'"
  mysql -ve "FLUSH PRIVILEGES"
}

# Show current user permissions.
mysql-show-grants() {
  [ -z "$1" ] && { echo "Usage: mysql-show-grants (user)"; return; }
  mysql -ve "SHOW GRANTS FOR '$1'@'localhost'"
}

注:Bash履歴に(パスワードなどの)トレースを残したくない場合は、次の点を確認してください。 コマンドがbash履歴に表示されないようにする方法は?

269
kenorb

ユーザーを作成し、データベースに対するすべての特権を付与します。

MySQLにログインします。

mysql -u root

今作成して付与

GRANT ALL PRIVILEGES ON dbTest.* To 'user'@'hostname' IDENTIFIED BY 'password';

匿名ユーザー(ローカルテスト専用)

別の方法として、データベースへの完全な無制限アクセス(たとえば、テストインスタンス用のローカルマシン上)を許可するだけの場合は、次のように匿名ユーザーにアクセスを許可することができます。

GRANT ALL PRIVILEGES ON dbTest.* To ''@'hostname'

気をつけて

これは開発中のがらくたデータには問題ありません。あなたが気にするものでこれをしないでください。

56
superluminary
$ mysql -u root -p -e "grant all privileges on dbTest.* to
`{user}`@`{Host}` identified by '{long-password}'; flush privileges;"

mysqlユーザーにパスワードがない場合は -p オプションを無視してください/ または 単に[Enter]ボタンを押してバイパスします。中括弧で囲まれた文字列は実際の値に置き換える必要があります。

15
S.K. Venkat

CREATE USER ステートメントを使用して新しいユーザーを作成し、 _ grant _ を使用してそれらのユーザーに権限を付与することができます。

13
candiru

私にはこれはうまくいった。

CREATE USER 'spowner'@'localhost' IDENTIFIED BY '1234'; 
GRANT ALL PRIVILEGES ON test.* To 'spowner'@'localhost'; 
FLUSH PRIVILEGES;

どこで

  • 所有者:ユーザー名
  • 1234:鋤のパスワード
  • テスト:データベース 'spowner'には以下のアクセス権があります。
5
Park JongBum

下記のコマンドは、あなたがあなたのlocalhost上の特定のデータベース(あなたのMysql内のすべてのデータベースではない)へのすべてのアクセスを彼に与える新しいユーザを作成したい場合にうまくいくでしょう。

GRANT ALL PRIVILEGES ON test_database.* TO 'user'@'localhost' IDENTIFIED BY 'password';

これにより、localhost上のそのユーザーに、1つのデータベースtest_database(この場合はdbTest)に対するすべての特権が付与されます。

Belowコマンドを実行して、上記のコマンドがそのユーザーに発行した権限を確認します。

SHOW GRANTS FOR 'user'@'localhost'

念のために、ユーザーアクセスを1つのテーブルだけに制限したい場合

GRANT ALL ON mydb.table_name TO 'someuser'@'Host';
1
Prabhakar