安全保护策略:
为操作系统和所安装的软件打补丁
禁用所有不使用的系统服务
关闭端口
审计服务器的用户账户
设置MySQL的root用户密码
用户和权限管理
补充:mysql的权限表有:
1、user表,用来记录允许连接到服务器的账号信息,该表里启用的所有权限都是全局级的,适用于所有数据库;
2、db表,存储了用户对某个数据库的操作权限;
3、tables_priv表,用来对单个表进行权限设置;
4、columns_priv表,用来对单个数据列进行权限设置;
5、procs_priv表,用于对存储过程和存储函数进行权限设置。
使用CREATE USER命令创建用户
Usage:用户信息会记录在mysql.user表中
CREATE USER user [IDENTIFIED BY[PASSWORD 'PASSWORD'] [, user [IDENTIFIED BY[PASSWORD 'PASSWORD']]…
create user test1 identified by '123456';
使用DROP USER命令删除用户
Usage:
DROP USER user [, user] ...
使用RENAME USER命令重命名用户
Usage:
RENAME USER old_user TO new_user [, old_user TO new_user] ...
使用GRANT和REVOKE命令管理访问权限
查看用户权限
Usage:
SHOW GRANTS FOR 用户名@主机名;
或者查看user表信息:
select * from mysql.user \G
设置用户权限
Usage:
GRANT priv_type [(column_list)] ON database.table
TO user [IDENTIFIED BY [PASSWORD] 'password']
[, user[IDENTIFIED BY [PASSWORD] 'password']] ...
[WITH with_option [with_option]...]
#priv_type:权限类型:
FILE #允许使用SELECT...INTO OUTFILE和LOAD DATA INFILE
INDEX #允许使用CREATE INDEX和DROP INDEX
INSERT #允许使用INSERT
LOCK TABLES #允许对拥有SELECT权限的表使用LOCK TABLES
PROCESS #允许使用SHOW FULL PROCESSLIST
REFERENCES #未被实施
RELOAD #允许使用FLUSH
REPLICATION CLIENT #允许用户询问从属服务器或主服务器的地址
REPLICATION SLAVE #用于复制型从属服务器(从主服务器中读取二进制日志事件)
SELECT #允许使用SELECT
SHOW DATABASES #显示所有数据库
SHOW VIEW #允许使用SHOW CREATE VIEW
SHUTDOWN #允许使用mysqladmin shutdown
SUPER #允许使用CHANGE MASTER、KILL、PURGE MASTER LOGS和SET GLOBAL语句,mysqladmin debug命令;允许连接(一次),即使已达到max_connections
UPDATE #允许使用UPDATE
USAGE #“无权限”的同义词
GRANT OPTION #允许授予权限
示例:
GRANT INSERT,SELECT,UPDATE,DELETE ON db_database20.* TO mr;
grant all privileges on *.* to test1 #授权所有
取消权限:
revoke all privileges on *.* from test1
MySQL数据库安全常见问题
权限更改何时生效
如果更改了用户权限或密码注意刷新一下
mysql终端:flush privileges;
服务器终端:
mysqladmin flush-privileges
mysqladmin reload
设置账户密码
mysqladmin命令:
mysqladmin -u user_name –p"oldpwd" -h host_name password "newpwd"
MySQL内部:
SET PASSWORD FOR 'mr'@'%' = '123456';
例(root设置自己的密码): set password='123456'
日志文件
错误日志
查看错误日志路径:
SHOW VARIABLES LIKE '%log_error%'; #如果显示的相对路径,可以从配置文件my.cnf中查看到具体安装路径
慢查询日志
查看慢查询日志路径:
SHOW VARIABLES LIKE '%slow_query_log%'
开启:
SET GLOBAL slow_query_log=ON
设置时间:
SHOW VARIABLES LIKE '%long_query_time%'
SET GLOBAL long_query_time=1
查询日志
查看查询日志路径:
show variables like '%general%';
开启:
set global general_log=ON;
关闭:
set global general_log=OFF;
修改日志输出类型,默认以文件形式存储
set global log_output='FILE';
二进制日志:不可读
作用:
恢复(recovery):某些数据的恢复需要二进制日志,例如,在一个数据库全备文件恢复后,用户可以通过二进制日志进行point-in-time的恢复。
复制(replication):其原理与恢复类似,通过复制和执行二进制日志使一台远程的MySQL数据库(一般称为slave或standby)与一台MySQL数据库(一般称为master或primary)进行实时同步。
审计(audit):用户可以通过二进制日志中的信息来进行审计,判断是否有对数据库进行注入的攻击。
查看二进制日志开启:
SHOW VARIABLES LIKE 'log_bin%';
查看二进制日志文件名:
SHOW BINARY LOGS;
对事件进行回放:
SHOW BINLOG EVENTS [IN 'log_name']