使用非root用户登录时创建数据库会提示Error1044,使用root用户登录则能创建数据库。百度了一下似乎是权限问题,我该如何操作将我所登录的用户能创建数据库?
Mysql版本: 5.7.10 MySQL Community Server
使用系统是: Mac OS X
可用Terminal和Workbench
情况如下:
mysql> create database test1;
ERROR 1044 (42000): Access denied for user 'yisa'@'localhost' to database 'test1'
データベース オブジェクトに対する権限をユーザーに付与します。
に選択、挿入、更新、削除を許可します1. 通常のデータ ユーザーに、データベース内のすべてのテーブル データのクエリ、挿入、更新、および削除を行う権限を付与します。
testdb.* の選択を common_user@'%' に許可
testdb.* の挿入を common_user@'%' に許可
testdb.* の更新を common_user@'%' に許可
削除を許可testdb.* で common_user@'%'
または
testdb.* で common_user@'%'
cc
Python.* での選択、挿入、更新、削除を user@'%' IDENTIFIED BY '123456' に許可します
アカウント root とパスワード 123456 を持つユーザーに、すべての IP セグメントおよびすべてのライブラリの下ですべての権限の実行を許可します
GRANT ALL PRIVILEGES ON . TO 'root'@'%' IDENTIFIED BY ' 123456'付与オプションあり;
2. データベース開発者に権限を与え、テーブル、インデックス、ビュー、ストアド プロシージャ、関数を作成します。 。 。およびその他の権限。
にドロップできるようになりました。MySQL データ テーブル構造を作成、変更、削除する権限を付与します。
testdb.* での作成を開発者@'192.168.0.%' に許可;
testdb.* で変更を開発者@'192.168.0.%' に許可;
testdb.* でドロップを許可developer@'192.168.0.%';
MySQL 外部キーを操作する権限を付与します。
testdb.* の参照を開発者@’192.168.0.%’ に付与します。
MySQL 一時テーブルを操作する権限を付与します。
testdb.* での一時テーブルの作成を開発者@’192.168.0.%’ に付与します。
MySQL インデックスを操作する権限を付与します。
testdb.* のインデックスを開発者@’192.168.0.%’ に付与します。
MySQL ビューを操作し、ビューのソース コードを表示する権限を付与します。
testdb.* の作成ビューを開発者@'192.168.0.%' に許可;
testdb.* の表示ビューを開発者@'192.168.0.%' に許可;
操作を許可 MySQL ストアド プロシージャ、機能の権限。
testdb.* の作成ルーチンを開発者@'192.168.0.%' に許可します。これで、プロシージャのステータスを表示できます。
testdb.* のルーチンを開発者@'192.168.0.%' に許可します。これで、プロシージャ
grant run on testdb.* を開発者@'192.168.0.%';
3. 通常の DBA に MySQL データベースを管理する権限を付与します。
testdb 上のすべての権限を dba@'localhost' に付与します
このうち、キーワード「privileges」は省略可能です。
4. 上級 DBA に、MySQL 内のすべてのデータベースを管理する権限を付与します。
に付与します. のすべてを dba@'localhost'
5. MySQL の許可権限は複数のレベルで適用できます。
許可は MySQL サーバー全体で機能します:
select on . to dba@localhost; — dba は MySQL のすべてのデータベースのテーブルをクエリできます。
. のすべてを dba@localhost に付与 — dba は MySQL
内のすべてのデータベースを管理できます。許可は単一のデータベースで動作します:
select on testdb.* to dba@localhost; dba は testdb 内のテーブルをクエリできます。
grant は単一のデータテーブルで動作します:
dba@localhost への testdb.orders の選択、挿入、更新、削除;
1 人のユーザーに複数のテーブルを認可する場合、上記のステートメントを複数回実行できます。例:
smp.users で select(user_id,username) を mo_user@'%' ('123345' で識別) に許可;
smp.mo_sms で select(user_id,username) を mo_user@'%' ('123345' で識別) に許可;
grant はテーブル内の列に対して機能します:
select(id, se, Rank) on testdb.apache_log to dba@localhost;
grant はストアド プロシージャと関数に対して機能します:
プロシージャ testdb.pr_add を「dba」@「localhost」に実行します
関数 testdb.fn_add の実行を「dba」@「localhost」に許可します
6. MySQL ユーザー権限を表示します
現在のユーザー (自分) 権限を表示します:
show Grants;
他の MySQL ユーザー権限を表示します:
shangkh@localhost の権限を表示します;
7. MySQL ユーザーに付与されている権限を取り消します。
revoke の構文は、grant と同様で、キーワード「to」を「from」に置き換えるだけです。
grant all on . to dba@localhost;
revoke all on 。 dba@localhost から;
8. MySQL のユーザー権限の付与と取り消しに関する注意事項
ユーザー権限を付与、取り消す場合、権限を有効にするためにユーザーは MySQL データベースに再接続する必要があります。
承認されたユーザーにこれらの権限を他のユーザーに付与したい場合は、オプション「grant option"
認可オプションを使用して testdb.* を dba@localhost に選択します;
この機能は通常は使用されません。実際には、データベース権限は DBA によって均一に管理されるのが最適です。
MySQL 認可テーブルには、user、db、host、tables_priv、columns_priv の 5 つのテーブルがあります。
認可テーブルの内容は、次の目的に役立ちます。
ユーザー テーブル
ユーザー テーブルには、サーバーに接続できるユーザーとそのパスワードがリストされ、ユーザーがどのようなグローバル (スーパーユーザー) 権限を持っているかが指定されます。ユーザーテーブルで有効になっている権限はすべてグローバル権限であり、すべてのデータベースに適用されます。たとえば、DELETE 権限が有効になっている場合、ここにリストされているユーザーは任意のテーブルからレコードを削除できるため、これを行う前に慎重に検討してください。
db テーブル
db テーブルには、ユーザーがアクセス権限を持つデータベースがリストされます。ここで指定した権限は、データベース内のすべてのテーブルに適用されます。
ホスト テーブル
ホスト テーブルは、データベースに対する特定のホストのアクセス権をより適切なレベルで制御するために、db テーブルと組み合わせて使用されます。これは、db を単独で使用するよりも優れている場合があります。このテーブルは GRANT および REVOKE ステートメントの影響を受けないため、まったく使用していないことがわかるかもしれません。
tables_priv テーブル
tables_priv テーブルは、ここで指定した権限がテーブルのすべての列に適用されることを指定します。
columns_priv テーブル
columns_priv テーブルは列レベルの権限を指定します。ここで指定した権限は、テーブルの特定の列に適用されます。
注:
GRANT USAGE ON については、マニュアルで次の概要と例を確認してください:
mysql>. TO 'zhangkh'@'localhost';アカウント ユーザー名 zhangkh はありますが、パスワードはありません。このアカウントは、このマシンからの接続にのみ使用されます。許可が与えられていません。 GRANT ステートメントで USAGE 権限を使用すると、権限を付与せずにアカウントを作成できます。すべてのグローバル権限を「N」に設定できます。後でこのアカウントに特定の権限を付与することを想定しています。
root としてログインし、次のコマンドを実行します
リーリー引用符内のパスワードは、別のパスワード、つまりユーザー yisa のログイン パスワードに置き換えることができます