
MySQL安全方面配置
在讨论安全时,我们需要考虑整个服务器主机安全(而不仅仅是MySQL服务)需要抵御攻击, 窃听, 扫描, 破解等。
MySQL对所有连接数据库用户进行了ACL访问控制,减少服务器被内部不规范操作导致故障。
MySQL还支持客户端和服务器之间的SSL加密连接。
当然这里讨论的许多概念都不是特定于MySQL几乎所有的应用程序都适用相同的一般思路。
- MySQL运行时,请遵循以下准则:
- 不要给用户配置超级用户权限
- 不要在数据库中存储明文密码
- 不要使用较为简单的字符密码
- 不允许非授信任主机使用扫描
1.用户账户管理
1.登录和退出MySQL, 使用mysql -u root -p可以连接数据库, 但这只是本地连接数据库的方式, 在生产很多情况下都是连接网络中某一个主机上的数据库
-P //指定连接远程数据库端口[默认3306] -h //指定连接远程数据库地址[默认localhost] -u //指定连接远程数据库账户[默认root] -p //指定连接远程数据库密码[默认密码为空] -e //执行mysql数据库sql指令 -S //指定mysql数据库Socket//不安全 [root@sql ~]# mysql -uroot -p'mypass' //推荐方式 [root@sql ~]# mysql -uroot -p Enter password: //推送远程登录方式 [root@sql ~]# mysql -h192.168.56.11 -P3306 -uroot -p Enter password: //非交互式操作数据库 [root@sql ~]# mysql -uroot -pBgx123.com -e "show databases;" mysql: [Warning] Using a password on the command line interface can be insecure. +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | sys | +--------------------+2.创建用户
//先创建用户, 后授权(CREATE USER 语句创建) mysql> create user bgx1@'localhsot' identified by 'BGX123.com'; //基于已有用户进行授权 mysql> grant all on *.* to bgx4@'localhost'; //使用GRANT 语句创建用户并授权 mysql> grant all on *.* to bgx2@'localhost' identified by 'BGX123.com';3.删除用户
//1.drop user 语句删除 mysql> drop user 'bgx1'@'localhost'; #注意mysql5.6:先回收权限, 然后删除 mysql> revoke all privilege user_name; mysql> drop user user_name; //2.delete语句删除 mysql> delete from mysql.user where user='bgx1' and host='localhost';4.修改root用户密码
//方法1, Shell修改方式 # mysqladmin -uroot -p'old_password' password 'new_password' //方法2, 修改数据表 mysql> update mysql.user set authentication_string=password('new_password') where user='root' and host='localhost'; //刷新权限 mysql> flush privileges; //方法3, 设定密码 mysql> set password=password('new_password');5.修改其他用户密码
//方法1 mysql> create user bgx1@'localhost' identified by 'Bgx123.com'; mysql> set password for bgx1@'localhost'=password('new_password'); //方法2, 修改数据表 mysql> update mysql.user set authentication_string=password('new_password') where user='bgx1' and host='localhost'; //刷新权限 mysql> flush privileges; //普通用户自己修改自己密码 set password=password("new_password");
2.访问权限系统
- mysql权限表
mysql.user 全局授权
- 用户字段
- 权限字段
- 安全字段
- 资源控制字段
mysql.db (数据库级)
- 用户字段
- 权限字段
mysql.tables_priv(表级)
mysql.columns_priv(列级)
权限应用的顺序
- user->db->tables->columns
语法格式:
grant 权限列表 on 库名.表名 to '用户名'@'客户端主机' [identified by ' 密码' with option 参数];
相关参数:
1.权限列表
- all 所有权限(不包括授权权限)
- 单独授权select,update,insert,delete
2.库名表名
- *.*所有库下的所有表Global level
- bgx.*针对bgx库下的所有表Database level
- bgx.student 针对bgx库下的student表Table level
- SELECT (id),INSERT (name,age) ON bgx.t1针对bgx库下面t1表的字段 Column level
3.客户端主机
- localhost 指定本机
- 192.168.56.11 指定具体主机
- 192.168.56.0 网段的所有主机
- 192.168.2.% 网段的所有主机
- % 指定所有主机
4.with参数
- GRANT OPTION 授权选项
- MAX_QUERIES_PER_HOUR 定义每小时允许执行的查询数
- MAX_UPDATES_PER_HOUR 定义每小时允许执行的更新数
- MAX_CONNECTIONS_PER_HOUR 定义每小时可以建立的连接数
- MAX_USER_CONNECTIONS 定义单个用户同时可以建立的连接数
grant授权示例 // GRANT ALL ON *.* TO admin1@'%' IDENTIFIED BY '(Bgx123.com)'; // GRANT ALL ON *.* TO admin2@'%' IDENTIFIED BY '(Bgx123.com)' WITH GRANT OPTION; // GRANT ALL ON bbs.* TO admin3@'%' IDENTIFIED BY '(Bgx123.com)'; // GRANT ALL ON bbs.* TO admin3@'192.168.70.160' IDENTIFIED BY '(Bgx123.com)'; // GRANT ALL ON bbs.user TO admin4@'%' IDENTIFIED BY '(Bgx123.com)'; // GRANT SELECT(id),INSERT(name,age) ON bbs.user TO admin5@'%' IDENTIFIED BY '(Bgx123.com)';3.访问权限回收
1.查看用户权限
mysql> show grants; +---------------------------------------------------------------------+ | Grants for root@localhost | +---------------------------------------------------------------------+ | GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION | | GRANT PROXY ON ''@'' TO 'root'@'localhost' WITH GRANT OPTION | +---------------------------------------------------------------------+ 2 rows in set (0.00 sec) SHOW GRANTS\G //查看其它用户权限 mysql> show grants for bgx2@'localhost'; +---------------------------------------------------+ | Grants for bgx2@localhost | +---------------------------------------------------+ | GRANT ALL PRIVILEGES ON *.* TO 'bgx2'@'localhost' | +---------------------------------------------------+ 1 row in set (0.00 sec)2.回收权限
语法: REVOKE 权限列表 ON 数据库名 FROM 用户名@'客户端主机'; //回收Delete权限 mysql> revoke DELETE on *.* from bgx2@'localhost'; //回收所有权限 mysql> revoke ALL PRIVILEGES ON *.* from 'bgx2'@'localhost'; //回收grant权限 mysql> revoke GRANT OPTION ON *.* from 'bgx2'@'localhost';