MYSQL中mysql数据库的用户表User表

前言
新建MySQL时,会自动安装一个mysql的数据库,该数据库下面的表都是权限表。
其中:user表是最重要权限表。记录了允许连接到服务器的账号信息以及一些全局权限信息。
user表有42个字段,大致分为4类:用户列、权限列、安全列及资源控制列。
mysql用户表中host字段,如果host设置不正确,可能导致无法连接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连接,并且只能在本机访问。
通过上面可以知道,host为不同的值的时候,驱动字符串的server要使用不同的内容,哪怕是root用户也要遵从host的设定。

下面介绍两种添加mysql用户的命令行方法:

方法一: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"登录了。

方法二: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';

你可能感兴趣的:(数据库,mysql,服务器)