MySQL手记:用户和数据安全性

众所周知,但凡需要等到MySQL数据库都需要用已有的用户名和用户的密码。而MySQL的用户信息是存放在系统自带的mysql数据库中的user表中。如果创建了一个新用户,那么这个表中就会有一个新记录。MySQL的安全系统很灵活,它允许以多种不同方式设置用户权限,比如创建用户:

CREATEUSER ‘king’@'localhost’ IDENTIFIED BY ‘queen’;

IDENTIFIED BY后面定义的是新用户密码。至于删除用户:

DROP USER ‘king’@'localhost‘;

设置用户属性包括两部分,更改用户名和修改密码:

RENAME USER ‘king’@'localhost‘ TO ‘king2′@’localhost‘;
SET PASSWORD FOR ‘king’@'localhost‘=PASSWORD(‘queen1′);

GRANT与REVOKE是一对权限设置的SQL命令,GRANT用于授予权限,而REVOKE则是回收权限。比如授予king用户查询XS表的权限:

GRANT SELECT ON XS TO king@localhost;

授予king用户更新Employees表的Name和Sex的权限:

GRANT UPDATE(Name, Sex) ON Employees TO king@localhost;

MySQL中授予表和列的权限如下:

SELECT、INSERT、DELETE、UPATE、REFERENCES、CREATE、ALTER、INDEX、DROP、ALL

而授予数据库的则多出以下几个:

CREATE TEMPORARY TABLES、CREATE VIEW、SHOW VIEW、CREATE ROUTINE、ALTER ROUTINE、EXECUTE ROUTINE、LOCK TABLES

比如授予YGGL的查询权限给king用户:

GRANT SELECT ON YGGL.* TO king@localhost;

GRANT后面还可以更加多的子句:

WITH GRANT OPTION 授予一用户的权限同样适用于其他用户
WITH MAX_QUERIES_PER_HOUR 每小时查询数据库的次数
WITH MAX_CONNECTIONS_PER_HOUR 每小时连接的次数
WITH MAX_UPDATES_PER_HOUR 每小时更新的次数
WITH MAX_USER_CONNECTIONS 每小时最大的用户连接数

REVOKE是回收权限的意思,用法其实和GRANT近乎一样:

REVOKE SELECT ON XS FROM king@localhost;

MySQL还支持表维护语句:

更新表中的索引的可压缩性:

ANALYZE TABLE Employees:
SHOW INDEX FROM XS;

检查表是否存在错误的语句,后续还可以添加QUICK、FAST、MEDIUM、EXTENDED、CHANGED选项:

CHECK TABLE Salary FAST;

获得校验和的命令,后面可以添加QUICK和EXTENDED选项:

CHECKSUM TABLE Salary:

由于长期读写表,表会产生很多碎片,OPTIMIZE就是用来减少碎片提高速度的:

OPTIMIZE TABLE Salary;

修复表的错误:

REPAIR TABLE Salary;

Posted in 数据库 | Tagged , | 1 Comment

MySQL手记:备份与恢复

数据库的备份与恢复是一个十分重要的环节。作为一款饱受欢迎的开源数据库,MySQL也具有十分丰富的保障功能。

备份数据库有两种办法,一是在MySQL里面用SQL语言备份,另外一种办法mysqldump工具,首先是前者,把Employees表的所有列备份到/home/fedora里面:

SELECT * FROM Employees INTO OUTFILE ‘/home/fedora/Employees.txt’;

若是使用mysqldump,则可以把整个数据库的表结构备份下来:

mysql -h localhost -u root -p 123456 YGGL Salary > /home/fedora/Salary.sql

也可以把整个数据库的所有表备份:

mysqldump -u root -p 123456 –database YGGL > /home/fedora/YGGL.sql

恢复数据表可以使用LOAD DATA语句:

LOAD DATA INFILE ‘/home/fedora/Employees.txt’ REPLACE INTO TABLE Employees;

同样在bash里面,mysql也可以用于恢复数据库:

mysql -u root -p 123456 YGGL < /home/fedora/YGGL.sql

mysqlimiport提供了LOAD DATA INFILE的功能:

mysqlimport -u root -p 123456 –low-priority –replace YGGL < /home/fedora/Salary.sql

日志是一种有效的方式保证了数据的安全,MySQL提供了二进制日志保证了数据的安全。不过在默认情况,MySQL并不会启用日志。启用日志的办法是my.cnf的[mysqld]巷下添加log-bin=/var/mysql/bin-log,然后重启MySQL服务器即可。

查看日志可以通过mysqlbinlog:

mysqlbinlog bin-log

保存日志,可以在MySQL内使用SQL语句:

FLUSH LOGS;

把数据库恢复到特定日志之下:

mysqlbinlog bin-log.aaa | mysql -u root -p 123456

使用SQL语句清除所有日志:

RESET MASTER;

清楚特定文件名的日志:

PURGE MASTER LOGS TO ‘/var/mysql/bin-log’;

删除特定日期的日志:

PURGE MASTER LOGS BEFORE ’2002-10-25′;

MySQL还可以使用phpMyAdmin和MySQL Workbench等图形化客户端备份和恢复数据库,而且更加直观。

Posted in 数据库 | Tagged , | Leave a comment

MySQL手记:语言结构

这篇手记更多的是总结前面数篇手记的内容,但不代表MySQL就要结束。

先说说常量的使用,常量分为字符串常量、数值常量、十六进制常量、日期时间常量和位字段常量,其实就是和普通的编程语言相近:

SELECT 1974*124;
SELECT ‘I\Love\MySQL’;

MySQL的变量分为两部分,一部分称之为系统变量,另外一部分为用户变量。系统变量是MySQL自带的,很大的一部分为只读变量:

SELECT @@VERSION;

若是需要设置系统变量,可以使用SET语句:

SET @@SESSION.SQL_SELECT_LIMIT=10;

用户变量是用户自行设置的变量,若不设定默认值,默认值将会是NULL:

SET @female=0;

运算符的使用其实早前已经探讨过的,在这里只不过是温故而知新:

SELECT Income-Outcome FROM Salary;

运算符少不免需要用到AND、LIKE、BETWEEN这几个关键字:

SELECT (7>6) AND (‘A’='B’);

MySQL内置函数众多,前面已经介绍了一部分,在这里就多举一两个例子吧,例如求最大最小值:

SELECT GREATEST(5,76,56,158), LEAST(5,76,56,158);

连接两个字符串的和:

SELECT CONCAT(‘I Love’,'MySQL’);

怎么我感觉这篇手记的内容很废话呢??哦噢~

Posted in 数据库 | Tagged , | Leave a comment