权限管理
1. “用户 + IP”的概念
MySQL中同一个用户名,比如Bob,能否登录,以及用什么密码登录,可以访问什么库等等,都需要加上IP,才可以表示一个完整的用户标识
bob@127.0.0.1
和bob@loalhost
以及bob@192.168.1.100
这三个其实是不同
的 用户标识
2. 用户权限管理
-
系统表权限信息:
- a) 用户名和IP是否允许
- b) 查看mysql.user表
// 查看全局所有库的权限
- c) 查看mysql.db表
// 查看指定库的权限
- d) 查看mysql.table_priv表
// 查看指定表的权限
- e) 查看mysql.column_priv表
// 查看指定列的权限
tips: mysql> desc [tablename]; 可以查看表的结构信息;
-
常用权限:
- SQL语句:SELECT、INSERT、UPDATE、DELETE、INDEX
- 存储过程:CREATE ROUTINE、ALTER ROUTINE、EXECUTE、TRIGGER
- 管理权限:SUPER、RELOAD、SHOW DATABASE、SHUTDOWN、
-
可选资源:
- MAX_QUERIES_PER_HOUR count
- MAX_UPDATES_PER_HOUR count
- MAX_CONNECTIONS_PER_HOUR count
- MAX_USER_CONNECTIONS count
tips: 只能精确到小时,对于部分场景不适用,可以考虑中间件方式,事实上企业用这块用的还是比较少,但在云上,则有这方面的管制,类似像阿里云,会有导入导出之类的限制,也会有窗口使用的限制*
-
显示当前用户的权限
#这三个是同一个意思 mysql> show grants; mysql> show grants for current_user; mysql> show grants for current_user();
3. 基本操作
mysql> create user 'bob'@'127.0.0.1' identified by '123';
#创建一个认证用户为'bob'@'127.0.0.1',密码是123
mysql> grant all on NWDB.* to 'bob'@'127.0.0.1';
#授予他NWDB库下面所有表的所有访问权限; *.*表示所有库的所有表
mysql> grant all on NWDB.* to 'alice'@'127.0.0.1' identified by '123';
#这个grant语句会搜索用户,如果用户不存在,则自动创建用户,
#如果不带identified by, 则该用户名密码为空
mysql> grant all on *.* to 'tom'@'192.168.10.%' identified by '123' with grant option;
#表示这个用户'tom'@'127.0.0.1'可以访问所有库的所有表,
#同时,他还可以给其他用户授予权限(with grant option),
#注意如果,*.*改成了某一个指定的非USER库,
#则tom没法去新建其他用户了,因为User库没有权限了
#192.168.10.% 表示属于192.168.10.0/24网段的用户可以访问
4. 撤销权限
revoke
关键字,该关键字只删除用户权限,不删除用户revoke
语法同grant
一致, 从grant ... to
变为revoke ... from
tips: 如需删除用户,使用
drop user@'xxx'