授权操作详解
授权五要素
- 要授予的权限【权限列表中的内容】
- 被授予访问权限的数据库或表【授权级别表中的内容】
- 用户名
- 地址【地址列表中的内容,mysql.user表中的host字段】
- 密码【非必须】
授权立即生效
flush privileges;
# 使用flush privileges;立即使权限生效,否则需要重启服务
授权取消授权 语句
grant 权限 on 授权范围 to username@'地址' [identified by '密码'];
# 授权给账户root所有权限,允许任意地址连接,密码为123456
grant all on *.* to root@'%' identified by '123456';
# all privileges 中的 privileges 可省略
flush privileges;
# 回收权限
revoke 权限 on 授权范围 from username@'地址';
# 回收root用户的查询权限
revoke select on *.* from root@'%';
flush privileges;
常用操作
注意: 用户名@host
才是唯一用户
查看账号root@'%'
的权限
show grants for root@'%';
删除用户root@'%'
drop user 'root'@'%';
用户改名、修改host
rename user root@'%' to admin@'localhost';
修改用户root@'localhost'
密码
set password for root@'localhost' = password('123456');
导出数据表内容
select * into outfile '/tmp/outfile.txt' from loadtest;
# 上面的语句只能将文件导出到mysql服务所在的主机上
mysql -h192.168.1.1 -uroot -p123456 -P3306 -e"select * from testdb.testtable;" > /tmp/loadtest.txt
# 此方式可将数据导出到客户机上
授权指定列
grant select(id, username, password) on testdb.users to root@'localhost';
授权存储过程
grant execute on procedure testdb.pr_add to root@'localhost';
安全性相关
- 删除任何无关的管理员用户和空密码的管理员用户,有需求再开
- 删除test库(5.7没了),因为这个库默认是所有人都有权限读写,存在漏洞
drop database test;
- 删除存放数据库的表信息。
delete from mysql.db;
- SSL加密设置,用途就是把数据加密,防止被截取后破解,5.6要加ssl指定文件位置配置,5.7自动开,然后执行命令就可以了.
#执行命令,在数据目录创建key文件,下面这个命令是封装了整个创建过程,就不用做那么多复杂的事了
#不过这个命令文件是5.7新加入的,5.6中没有这个命令文件,但是可以放到在5.6上面用,还算方便.
/usr/local/mysql/bin/mysql_ssl_rsa_setup --datadir=/data/mysql/data/
#然后看看开启了没有
mysql>SHOW VARIABLES LIKE 'have_ssl';
| have_ssl | YES |
#进入mysql,授权ssl专用用户
mysql> grant all privileges on *.* to 'sslroot'@'%' identified by '123123' require ssl;
#用ssl专用用户登录
mysql -usslroot -p'123123' -h127.0.0.1
#查看当前状态,SSL已启用
mysql> \s
Current user: sslroot@127.0.0.1
SSL: Cipher in use is ECDHE-RSA-AES128-GCM-SHA256
不过开启SSL需要谨慎,因为数据进行了加密处理,毫无疑问服务器需要消耗资源来校验密文,官方说明可能会下降25%的性能,还是比较高的.
对于高并发的环境自然是性能下降明显,除非安全要求非常高,不然不建议开,一般来说只要授权限制访问IP是内网的就已经可以解决安全问题.
权限相关参考内容
权限列表
权限关键字 | 级别 | 说明 | |
---|---|---|---|
ALL PRIVILEGES | 所有 | 授予所有权限 | |
CREATE | 数据库、表或索引 | 创建数据库、表或索引权限 | |
DROP | 数据库或表 | 删除数据库或表权限 | |
GRANT OPTION | 数据库、表或保存的程序 | 赋予权限选项 | |
REFERENCES | 数据库或表 | ||
ALTER | 表 | 更改表,添加字段、索引、修改字段等 | |
DELETE | 表 | 删除数据权限 | |
INDEX | 表 | 索引权限 | |
INSERT | 表 | 插入权限 | |
SELECT | 表 | 查询权限 | |
CREATE VIEW | 视图 | 创建视图权限 | |
SHOW VIEW | 视图 | 查看视图权限 | |
ALTER ROUTINE | 存储过程 | 更改存储过程权限 | |
CREATE ROUTINE | 存储过程 | 创建存储过程权限 | |
EXECUTE | 存储过程 | 执行存储过程权限 | |
FILE | 服务器主机上的文件访问 | 文件访问权限 | |
CREATE TEMPORARY TABLES | 服务器管理 | 创建临时表权限 | |
LOCK TABLES | 服务器管理 | 锁表权限 | |
CREATE USER | 服务器管理 | 创建用户权限 | |
PROCESS | 服务器管理 | 查看进程权限 | |
RELOAD | 服务器管理 | 执行flush-hosts,flush-logs,flush-privileges,flush-status,flush-tables,flush-threads,refresh,reload等命令的权限 | |
REPLICATION CLIENT | 服务器管理 | 复制权限 | |
REPLICATION SLAVE | 服务器管理 | 复制权限 | |
SHOW DATABASES | 服务器管理 | 查看数据库权限 | |
SHUTDOWN | 服务器管理 | 关闭数据库权限 | |
SUPER | 服务器管理 | 执行kil线程权限 |
授权级别
grant和revoke可以在几个层次上控制访问权限
授权范围 | 说明 |
---|---|
整个服务器 | 使用 *.* |
整个数据库 | 使用on database.* |
特定表 | 使用on database.table |
特定的列 | |
特定的存储过程 |
地址列表
关键字 | 说明 |
---|---|
% | 匹配所有主机 |
localhost | localhost不会被解析成IP地址,直接通过UNIXsocket连接 |
127.0.0.1 | 会通过TCP/IP协议连接,并且只能在本机访问 |
::1 | ::1就是兼容支持ipv6的,表示同ipv4的127.0.0.1 |
x.x.x.x | 指定的地址 |
x.x.x.% | 指定的地址段 |