Xinu

Mysql权限管理控制及安全相关
授权操作详解授权五要素要授予的权限【权限列表中的内容】被授予访问权限的数据库或表【授权级别表中的内容】用户名地址【...
扫描右侧二维码阅读全文
19
2019/05

Mysql权限管理控制及安全相关

授权操作详解

授权五要素

  1. 要授予的权限【权限列表中的内容】
  2. 被授予访问权限的数据库或表【授权级别表中的内容】
  3. 用户名
  4. 地址【地址列表中的内容,mysql.user表中的host字段】
  5. 密码【非必须】

授权立即生效

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';

安全性相关

  1. 删除任何无关的管理员用户和空密码的管理员用户,有需求再开
  2. 删除test库(5.7没了),因为这个库默认是所有人都有权限读写,存在漏洞 drop database test;
  3. 删除存放数据库的表信息。 delete from mysql.db;
  4. 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
特定的列
特定的存储过程

地址列表

关键字说明
%匹配所有主机
localhostlocalhost不会被解析成IP地址,直接通过UNIXsocket连接
127.0.0.1会通过TCP/IP协议连接,并且只能在本机访问
::1::1就是兼容支持ipv6的,表示同ipv4的127.0.0.1
x.x.x.x指定的地址
x.x.x.%指定的地址段
Last modification:May 19th, 2019 at 01:48 pm

Leave a Comment