在讨论安全时,我们需要考虑整个服务器主机安全(而不仅仅是MySQL服务)需要抵御攻击, 窃听, 扫描, 破解等。
MySQL对所有连接数据库用户进行了ACL访问控制,减少服务器被内部不规范操作导致故障。
MySQL还支持客户端和服务器之间的SSL加密连接。
当然这里讨论的许多概念都不是特定于MySQL几乎所有的应用程序都适用相同的一般思路。
MySQL运行时,请遵循以下准则:
• 不要给用户配置超级用户权限
• 不要在数据库中存储明文密码
• 不要使用较为简单的字符密码
• 不允许非授信任主机使用扫描
用户账户管理
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");
访问权限系统
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)';
访问权限回收
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';
文档更新时间: 2019-02-04 17:20 作者:李延召