一、用户
1.用户信息
MySQL中的用户,都存储在系统数据库mysql的user表中
mysql> use mysql;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> select host,user,authentication_string from user\G
*************************** 1. row ***************************
host: 39.97.230.215
user: zbr
authentication_string: A005$9\Es[o#Np :uS:iRLKTLVJMyOGm/4o706Ao4P4VPhftw8vTC1FK/sYHQiGvT8
*************************** 2. row ***************************
host: localhost
user: debian-sys-maint
Ki%B3QdfrOpOZZq9ZY9yBFzStHJaGf8XGKvakOeJ2NrMNB
*************************** 3. row ***************************
host: localhost
user: home
authentication_string: A005$Tx<>J,yj?yH7zgV3FnfTlsDozoVQxJ/B2.VBSbmylv3beVxnB/Vg58wiMIW0
*************************** 4. row ***************************
host: localhost
user: mysql.infoschema
authentication_string: A005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED
*************************** 5. row ***************************
host: localhost
user: mysql.session
authentication_string: A005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED
*************************** 6. row ***************************
host: localhost
user: mysql.sys
authentication_string: A005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED
*************************** 7. row ***************************
host: localhost
user: r
字段解释:
- host:表示这个用户可以从哪个主机登录,如果是localhost,表示只能从本主机登录
- user:用户名
- authentication_string:用户密码通过password函数加密后的值
2.创建用户
语法
create user '用户名'@'登录主机/ip' identified by '密码';
案例
mysql> create user 'xxz'@'localhost' identified by '密码';
mysql> select user,host from user;
+------------------+---------------+
| user | host |
+------------------+---------------+
| zbr | 39.97.230.215 |
| debian-sys-maint | localhost |
| home | localhost |
| mysql.infoschema | localhost |
| mysql.session | localhost |
| mysql.sys | localhost |
| root | localhost |
| xxz | localhost |
+------------------+---------------+
8 rows in set (0.00 sec)
3.删除用户
删除的时候是根据用户名+主机名来删的
语法
drop user '用户名'@'主机名';
用例
mysql> drop user 'xxz'@'localhost';
Query OK, 0 rows affected (0.03 sec)
4.修改用户代码
语法
自己改自己的密码
alter user '用户名'@'主机名' identified by 'Xhx20060722';
二、数据库权限
MySQL数据库提供的权限列表

1.给用户授权
刚创建的用户没有任何权限。需要给用户授权
语法
grant 权限列表 on 库.对象名 to '用户名'@'登录位置' identified by '密码';
说明
权限列表,多个权限用逗号分开
grant select,delete ,create on
- *.* 代表本系统中的所有数据库的所有对象(表,视图,存储过程)
- 库.* 表示某个数据库中的所有数据对象
- identified by 可选,如果用户存在,则在赋予权限的同时改密码
mysql> grant select on myschool.* to 'xxz'@'localhost' ;
mysql> select * from students;+----+-----+------+-------+
| id | sn | name | qq |
+----+-----+------+-------+
| 1 | 100 | xhx | 10001 |
| 3 | 101 | zbr | 10003 |
| 4 | 102 | zbr | 10003 |
| 5 | 103 | xxz | NULL |
+----+-----+------+-------+
4 rows in set (0.01 sec)
-- 无删除权限
mysql> delete from students;
ERROR 1142 (42000): DELETE command denied to user 'xxz'@'localhost' for table 'students'
2.回收权限
语法
revoke 权限列表 on 库.对象名 from '用户名'@'登录位置';
实例
mysql> revoke select on myschool.* from 'xxz'@'localhost';
Query OK, 0 rows affected (0.02 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.02 sec)
mysql> show databases;+--------------------+
| Database |
+--------------------+
| information_schema |
| performance_schema |
+--------------------+
2 rows in set (0.00 sec)
三、角色
角色可以理解为权限的集合包
例:开发岗位要增删查改
测试岗位要只读
不用给每个用户一条条授权,把权限根据人员的不同,组织成一个包来赋权,这个包就是角色
1.创建角色
语法
create role 角色名;
实例
mysql> create role r_role;
Query OK, 0 rows affected (0.03 sec)
2.给角色授权
语法
grant select on 数据库名.表名 to 角色;
示例
mysql> grant select on myschool.* to r_role;
Query OK, 0 rows affected (0.01 sec)
3.把角色授予用户
语法
grant 角色名 to '用户名'@'地址';
示例
mysql> grant r_role to 'xxz'@'localhost';
Query OK, 0 rows affected (0.02 sec)
4.激活角色
需要用户自己进行激活自己的角色
set role 角色名; --只对当前一次有效
set default role 角色名 to '用户名'@'地址'; -- 永久绑定
5.查看用户有哪些角色
同查看有哪些权限一样
6.收回角色
revoke 角色名 from '用户名'@'地址';
7.删除角色
drop role 角色名;