《MySQL必知必会》第二十八~第三十章

懵懂的女人 提交于 2020-03-08 18:51:57

第二十八~第三十章

第二十八章

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

……

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!