第十一部分 数据库安全管理和维护

全球化和本地化

几个重要术语:

  • 字符集:字母和符号的集合;
  • 编码:某个字符集成员的内部表示;
  • 校对:规定字符如何比较的指令。

示例:显示所有可用的字符集以及每个字符集的描述和默认校对

SQL语句:SHOW CHARACTER SET;

示例:查看所有支持校对的完整列表

SQL语句:SHOW COLLATION;

安全管理

数据库服务器通常包含关键的数据,确保这些数据的安全和完整需要利用访问控制。MySQL服务器的安全基础是:用户应该对他们需要的数据具有适当的访问权,既不能多也不能少。换言之,用户不能对过多的数据具有过多的访问权。而访问控制就是你需要给用户提供他们所需的访问权,且仅提供它们所需的访问权,管理访问控制需要创建和管理用户账户。

示例:创建一个新用户账号

SQL语句:CREATE USER ben IDENTIFIED BY 'p@$$w0rd';

示例:重新命名一个用户账号

SQL语句:RENAME USER ben TO bforta;

示例:删除一个用户账号以及相关的权限

SQL语句:DROP USER bforta;

示例:查看赋予用户账号的访问权限

SQL语句:SHOW GRANTS FOR bforta;

示例:使用GRANT语句设置权限,允许用户在crashcourse数据库的所有表上使用SELECT,通过只授予SELECT访问权限,用户bforta对crashcourse数据库中的所有数据具有只读访问权限

SQL语句:GRANT SELECT ON crashcourse.* TO bforta;

示例:使用REVOKE撤销特定的权限,撤销赋予用户bforta的SELECT访问权限,被撤销的访问权限必须存在,否则报错

SQL语句:REVOKE SELECT ON crashcourse.* FROM bforta;

示例:使用SET PASSWORD语句更改用户口令

SQL语句:SET PASSWORD FOR bforta=Password('n3w p@$$w0rd');

示例:SET PASSWORD更新当前登录用户的口令

SQL语句:SET PASSWORD = Password('n3w p@$$w0rd');

数据库维护

由于MySQL数据库是基于磁盘的文件,普通的备份系统和例程就能备份MySQL的数据。但是,由于这些文件总是处于打开和使用状态,普通的文件副本备份不一定总是有效。下面列出这个问题的可能解决方案:

  • 使用命令行实用程序mysqldump转储所有数据库内容到某个外部文件。在进行常规备份前这个实用程序应该正常运行,以便能正确地备份转储文件。
  • 可用命令行程序mysqlhotcopy从一个数据库复制所有数据
  • 可用使用MySQL的BACKUP TABLE 或SELECT INTO OUTFILE 转储所有数据到某个外部文件。这两条语句都接受将要创建的系统文件名,此系统文件必须不存在,否则会出错。数据可用用RESTORE TABLE 来复原。为了保证所有数据被写到磁盘,可能需要在进行备份前使用FLUSH TABLES语句。

(1) 进行数据库维护

MySQL提供了一系列的语句,可用来保证数据库正确和正常运行。

  • ANALYZE TABLE语句用来检查表键是否正确;
  • CHECK TABLE语句用来针对许多问题对表进行检查;
  • OPTIMIZE TABLE语句用于收回所用的空间,从而优化表的性能,比如从一个表中删除大量数据。

(2) 诊断启动问题

服务器启动问题通常在对MySQL配置或服务器本身进行更改时出现。MySQL在这个问题发生时报告错误,但由于多数MySQL服务器是作为系统进程或服务自动启动的,这些消息可能看不到。在排除系统启动问题时,首先应该尽量用手动启动服务器。MySQL服务器自身通过在命令行上执行mysqld启动。比如help(显示帮助,即选项列表)、verbose(显示全文本消息)、save-mode(装载减去某些最佳配置的服务器)命令等。

(3) 查看日志文件

MySQL维护管理员依赖一系列日志文件。主要的日志文件有以下几种。

  • 错误日志:它包含启动和关闭问题以及任意关键错误的细节。此日志通常名为hostname.err,位于data目录。此日志名可用--log-error命令行选项更改。
  • 查询日志:它记录所有MySQL活动,在诊断问题时非常有用。此日志文件可能会很快地变得非常大,因此不应该长期使用它。此日志通常名m为hostname.log,位于data目录中。此名字可用用--log命令行选项更改。
  • 二进制日志:它记录更新过数据(或者可能更新过数据)的所有语句。此日志通常名为hostname-bin,位于data目录内。此名字可用用--log-bin命令行选项更改。
  • 缓慢查询日志:此日志记录执行缓慢的任何查询。这个日志在确定数据库何处需要优化很有用。此日志通常名为hostname-slow.log,位于data目录中。此名字可用用--log-slow-queries命令行选项更改。

在使用日志时,可用FLUSH LOGS语句来刷新和重新开始所有日志文件。

(4) 改善性能

  • MySQL是用一系列的默认设置预先配置的,所以,可用根据需要调整内存分配、缓冲区大小等。为了查看当前设置,可使用SHOW VARIABLES;和SHOW STATUS;
  • MySQL是一个多用户多线程的DBMS,换言之,它经常同时执行多个任务。如果这些任务中的某一个执行缓慢,则所有请求都会执行缓慢。如果遇到显著的性能不良,可使用SHOW PROCESSLIST显示所有活动进程。
  • 使用不同的方法编写同一条SELECT语句,比如联结、并、子查询等。
  • 使用EXPLAIN语句让MySQL解释它将如何执行一条SELECT语句。
  • 一般来说,存储过程执行比一条一条地执行其中的各条MySQL语句快
  • 使用正确的数据类型
  • 绝不能检索比需求还要多的数据,即不要用SELECT *
  • 在导入数据时,应该关闭自动提交。
  • 将SELECT语句中一系列复杂的OR条件转换为多条SELECT语句和连接它们的UNION语句
  • 索引改善数据检索的性能,但损害数据插入、删除和更新的性能。如果一些表不经常被检索,则没有必要索引它们
  • 使用FULLTEXT而不是LIKE
----------------------------------- 心之所向,素履所往;生如逆旅,一苇以航。 ------------------------------------------
原文地址:https://www.cnblogs.com/wzw0625/p/12766979.html