回答:
これを試してユーザーを作成します。
CREATE USER 'user'@'hostname';
これを試して、データベースへのアクセスを許可しますdbTest
。
GRANT ALL PRIVILEGES ON dbTest.* To 'user'@'hostname' IDENTIFIED BY 'password';
同じマシンでMySQLにアクセスするコード/サイトを実行している場合、ホスト名はlocalhostになります。
さて、故障。
GRANT
-これは、ユーザーを作成し、データベース、テーブルなどへの権限を付与するために使用されるコマンドです。
ALL PRIVILEGES
-これは、ユーザーがすべての標準権限を持っていることを示しています。ただし、GRANTコマンドを使用する権限は含まれません。
dbtest.*
-この説明MySQLは、dbtestデータベース全体で使用するためにこれらの権利を適用します。必要に応じて、*を特定のテーブル名またはストアルーチンに置き換えることができます。
TO 'user'@'hostname'
-'user'は、作成するユーザーアカウントのユーザー名です。注:単一引用符が必要です。'hostname'は、ユーザーが接続できるホストをMySQLに通知します。同じマシンからのみ必要な場合は、localhost
IDENTIFIED BY 'password'
-ご想像のとおり、これによりそのユーザーのパスワードが設定されます。
MySQL / MariaDB 5.7.6以降でユーザーを作成するには、CREATE USER
構文を使用します。
CREATE USER 'new_user'@'localhost' IDENTIFIED BY 'new_password';
その後、データベース(例えばへのすべてのアクセス権を付与するためにmy_db
使用し、)GRANT
構文を、例えば
GRANT ALL ON my_db.* TO 'new_user'@'localhost';
ここで、ALL
(priv_typeには)特定の権限などに置き換えることができSELECT
、INSERT
、UPDATE
、ALTER
、等
次に、新しく割り当てられた権限を再ロードするには、次のコマンドを実行します。
FLUSH PRIVILEGES;
上記のコマンドを実行するには、コマンドを実行mysql
してプロンプトに入力し、quit
コマンドまたはCtrl-でログアウトする必要がありますD。
シェルから実行するには、-e
パラメーターを使用します(SELECT 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の履歴にコマンドが表示されないようにする方法
~/.my.cnf
上記のようにパスワードを追加すると、パスワードで機能します。
MySQLにログインします。
mysql -u root
作成して付与する
GRANT ALL PRIVILEGES ON dbTest.* To 'user'@'hostname' IDENTIFIED BY 'password';
あるいは、データベースへの完全な無制限のアクセスを許可したいだけの場合(たとえば、テストインスタンス用のローカルマシン上)、次のように匿名ユーザーにアクセスを許可できます。
GRANT ALL PRIVILEGES ON dbTest.* To ''@'hostname'
これは、開発中のジャンクデータには問題ありません。気になることをこれで行わないでください。
以下のコマンドは、新しいユーザーを作成して、ローカルホスト上の特定のデータベース(Mysqlのすべてのデータベースではない)へのすべてのアクセス権をユーザーに付与する場合に機能します。
GRANT ALL PRIVILEGES ON test_database.* TO 'user'@'localhost' IDENTIFIED BY 'password';
これにより、1つのデータベースtest_database
(あなたの場合dbTest
)に対するすべての権限がlocalhost上のそのユーザーに付与されます。
以下のコマンドを実行して、上記のコマンドがそのユーザーに発行した権限を確認します。
SHOW GRANTS FOR 'user'@'localhost'
念のため、ユーザーアクセスを1つのテーブルのみに制限する場合
GRANT ALL ON mydb.table_name TO 'someuser'@'host';