在讨论安全时,我们需要考虑整个服务器主机安全(而不仅仅是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,delete2.库名表名
        ○ *.*所有库下的所有表Global level
        ○ bgx.*针对bgx库下的所有表Database level
        ○ bgx.student 针对bgx库下的student表Table levelSELECT (id),INSERT (name,age) ON bgx.t1针对bgx库下面t1表的字段 Column level3.客户端主机
        ○ 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   作者:李延召