ユーザーテーブル MYSQLのmysqlデータベースのユーザーテーブル

はじめ
に MySQL を新規作成すると、mysql データベースが自動的にインストールされますが、データベース配下のテーブルはすべて権限テーブルです。
その中で、ユーザー テーブルは最も重要な権限テーブルです。サーバーへの接続を許可されたアカウント情報と一部のグローバル権限情報が記録されます。
ユーザーテーブルには 42 個のフィールドがあり、ユーザー列、権限列、セキュリティ列、リソース制御列の 4 つのカテゴリに大別されます。
mysql ユーザーテーブルのホストフィールドで、ホストの設定が正しくない場合、mysql データベースに接続できなくなる可能性があります。
user_name@host_name、host_name はホストの IP アドレスまたはホスト名です。
1) MySQL にローカルでアクセスするには、localhost またはループバック アドレス 127.0.0.1 を使用します。
2) ワイルドカード文字 % をホストとして使用すると、クライアントは任意のホストから接続するユーザーを指定できます。3) ホストが 127.0.0.1 として指定されている場合、ホストは
TCP/IP プロトコルを介して接続され、ローカルでのみアクセスできます; 4) ホストが localhost として指定されている場合、 localhost は IP アドレスに解析されず、
UNIXsocket を介して直接接続され、ローカルでのみアクセスできます。ローカルでアクセスできます。
上記のことから、ホストの値が異なる場合、文字列を駆動するサーバーは異なるコンテンツを使用する必要があり、root ユーザーであってもホストの設定に従う必要があることがわかります。

mysql ユーザーを追加するための 2 つのコマンド ライン方法を次に示します。

方法 1: CREATE USER ステートメント

CREATE USER <用户> [ IDENTIFIED BY [ PASSWORD ] 'password' ] [ ,用户 [ IDENTIFIED BY [ PASSWORD ] 'password' ]]
1<用户>:格式为 'user_name'@'host_name',这里的user_name是用户名,host_name为主机名,即用户连接 MySQL 时所用主机的名字。
如果在创建的过程中,只给出了用户名,而没指定主机名,那么主机名默认为"%",表示一组主机,即对所有主机开放权限。
2、IDENTIFIED BY子句:用于指定用户密码。新用户可以没有初始密码,若该用户不设密码,可省略此子句。
3、PASSWORD 'password':PASSWORD 表示使用哈希值设置密码,该参数可选。如果密码是一个普通的字符串,则不需要使用 PASSWORD 关键字。
'password' 表示用户登录时使用的密码,需要用单引号括起来。
这种方式不便授予用户权限,新创建的用户拥有的权限很少,它们只能执行不需要权限的操作。如登录 MySQL、使用 SHOW 语句查询所有存储引擎和字符集的列表等。
如果两个用户的用户名相同,但主机名不同,MySQL 会将它们视为两个用户,并允许为这两个用户分配不同的权限集合。

例:

mysql> CREATE USER 'test1'@'localhost' IDENTIFIED BY 'test1'; # localhost表示只有本机可以登录
mysql> CREATE USER 'test1'@'%' IDENTIFIED BY 'test1'; # %表示任何主机都可以登陆

実際のアプリケーションでは、パスワードをクリア テキストで指定することは避け、PASSWORD キーワードを使用して、パスワードのハッシュ値を使用してパスワードを設定できます。
MySQL では、password() 関数を使用してパスワードのハッシュ値を取得できます。

mysql> SELECT password('test1');
+-------------------------------------------+
| password('test1')                         |
+-------------------------------------------+
| *06C0BF5B64ECE2F648B5F048A71903906BA08E5C |
+-------------------------------------------+
1 row in set, 1 warning (0.00 sec)
mysql> CREATE USER 'test1'@'localhost' IDENTIFIED BY PASSWORD '*06C0BF5B64ECE2F648B5F048A71903906BA08E5C';
Query OK, 0 rows affected, 1 warning (0.00 sec)
# 执行成功后就可以使用密码"test1"登录了。

方法 2: GRANT ステートメント (一般的に使用される)
GRANT ステートメントは MySQL の非常に重要なステートメントであり、ユーザーの作成、ユーザー パスワードの変更、ユーザー権限の設定に使用できます。

GRANT priv_type ON database.table TO <用户> [IDENTIFIED BY [PASSWORD] 'password']
1、priv_type 参数表示新用户的权限。
2database.table 参数表示新用户的权限范围,即只能在指定的数据库和表上使用自己的权限。
3<用户> 参数指定新用户的账号,由用户名和主机名构成。
4、IDENTIFIED BY 关键字用来设置密码。
5、PASSWORD 表示使用哈希值设置密码,该参数可选。
6、password 参数表示新用户的密码。
GRANT语句不仅可以创建新用户,还可以对用户进行授权。
该语句会自动加载权限表,不需要手动刷新。
而且安全、准确、错误少。
使用GRANT语句创建用户是最常用的方法。
创建用户时,MySQL会对用户的密码自动加密,以提高安全性。

例:

# 创建新用户:用户名user01,密码123,所有主机,授予对test数据库的student表有查询权限。
mysql> GRANT SELECT ON test.student TO `user01`@`%` IDENTIFIED BY `123`
mysql> GRANT SELECT ON *.* TO 'test3'@localhost IDENTIFIED BY 'test3';
# 其中,*.*表示所有数据库下的所有表。结果显示创建用户成功,且test3用户在本机对所有表都有查询(SELECT)权限。
# 授权'user'用户可以操作'db_test'库的所有权限
mysql> GRANT ALL PRIVILEGES on db_test.* TO user@'%';
# 授权用户'user'可以操作'db_test'库的所有权限,密码为'passwd'
mysql> GRANT ALL PRIVILEGES ON db_test.* TO user@'%' IDENTIFIED BY 'passwd';
# 授权user可以操作db_test库的指定的权限,密码为'passwd'
mysql> GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, REFERENCES, INDEX, ALTER ON db_test.* TO user@'%' IDENTIFIED BY 'passwd';
# 刷新权限,执行grant语句后要刷新一下权限
mysql> FLUSH PRIVILEGES;

ユーザーテーブルを操作するためのその他のステートメント

# 删除授权 REVOKE语句
mysql> revoke privileges (columns) on what from user;
mysql> revoke all PRIVILEGES ON `db_test`.* from 'user'@'%';   # 收回db_test全部权限
mysql> REVOKE INSERT ON *.* FROM 'user04'@'localhost';    # 收回Insert权限
# 删除用户 方法一
mysql> delete from mysql.user where user='user' and host='%';
# 删除用户 方法二
mysql> DROP USER 'username'@'host';
# 修改用户密码 
# 以下方法适用于mysql5.6及以下版本,5.7以上版本会报错,因为5.7以上版本没有password字段,而是改成了authentication_string字段
mysql> UPDATE mysql.user SET password=PASSWORD('新密码') WHERE User='root' AND Host = 'localhot';
# 以下方法适用于5.7以上版本
mysql> UPDATE mysql.user SET authentication_string=PASSWORD('新密码') WHERE User='root' AND Host = 'localhot';
# 查看用户权限
mysql> show grants for 'username'@'host';

おすすめ

転載: blog.csdn.net/qq_34125713/article/details/127565824