20 MySQL 从入门到精通——权限管理及安全控制

安全保护策略:
	为操作系统和所安装的软件打补丁
	禁用所有不使用的系统服务
	关闭端口
	审计服务器的用户账户
	设置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']