第二十八~第三十章
第二十八章
MySQL的安全基础是用户不能对过多的数据具有过多的访问权,即需要给用户提供他们所需的访问权,且仅提供他们所需的访问权,这就是访问控制
在现实的日常工作中,决不能使用root,应该创建一系列的账号
MySQL用户账号和信息存储在名为mysql的MySQL数据库中,在需要获得所有用户账号列表时
USE mysql;
SELECT user FROM user;
mysql数据库中有一个名为user的表,包含所有用户账号
创建一个新用户账号,创建时不一定需要口令,再次列出账号时吗,就会看到新账号
CREATE USER ben IDENTIFIED BY 'p@$$0rd';
IDENTIFIED BY指定的口令为纯文本,MySQL将在保存到user表之前对其进行加密,为了作为散列值指定口令,使用IDENTIFIED BY xxx
GRANT语句也可以创建用户账号,但是CREATE USER更清楚简单
也可以直接插入行到user表中来增加用户,但不安全,不建议这样做
重新命名一个用户账号
RENAME USER ben TO bforta;
删除用户账号
DROP USER bforta;
新创建的用户账号没有访问权限,只能登陆MySQL,但看不到数据,也无法进行任何操作
为了看到用户账号的权限
SHOW GRANTS FOR bforta;
MySQL的权限用用户名和主机名联合定义,如果不指定主机名,使用默认主机名%,如bforta@%
设置权限
GRANT SELECT ON crashcourse.* TO bforta;
此GRANT允许用户在crashcourse.*(crashcourse数据库 的所有表)上使用SELECT,从此具有了只读访问权限
此时再执行命令查看权限,会发现多了一条
SHOW GRANTS FOR bforta;
撤销特定的权限,被撤销的访问权限必须存在,否则出错
REVOKE SELECT ON crashcourse.* FROM bforta;
GRANT和REVOKE可以在几个层次上控制访问权限
1、整个服务器,使用GRANT ALL和REVOKE ALL
2、整个数据库,使用ON database.*
3、特定的表,使用ON database.table
4、特定的列
5、特定的存储过程
相关权限见书p202~p203
简化多次授权,用逗号分隔
GRANT SELECT, INSERT ON crashcourse.* TO bforta;
更改口令,新口令必须传递到Passwor()函数进行加密
SET PASSWORD FOR bforta = Password('n3w p@$$w0rd');
不指定用户名时,更新当前登录用户的口令
SET PASSWORD = Password('n3w p@$$w0rd');
第二十九章
检查表键是否正常
ANALYZE TABLE orders;
CHECK TABLE针对许多问题对表进行检查
CHECK TABLE orders, orderitems;
在排除系统启动问题时,首先应该尽量用手动启动服务器,MySQL服务器自身通过在命令行上执行mysqld启动,几个常用的mysqld命令行选项
–help 显示帮助
–safe-mode装载减去某些最佳配置的服务器
–verbose显示全文本消息
–version显示版本信息然后退出
MySQL维护管理员依赖的一系列日志文件,主要有
1、错误日志
2、查询日志
3、二进制日志
4、缓慢查询日志
第三十章
一些改善性能的建议
MySQL是用一系列默认设置预先配置的,一段时间后可能需要调整内存分配,缓冲区大小等
MySQL是一个多用户多线程的DBMS,若某一个任务执行缓慢,则所有请求都会执行缓慢,可以用SHOW PROCESSLIST显示所有活动进程,用KILL终结某个特定的进程
一条SELECT语句有多种编写方法,寻找最佳方法
一般来说,存储过程比一条一条执行其中的MySQL语句更快
尽量不用SELECT *,只检索需要的数据
LIKE很慢,最好使用FULLTEXT
……