您现在的位置是:首页 >学无止境 >day2 -- 数据库的安全管理和维护网站首页学无止境

day2 -- 数据库的安全管理和维护

All_Will_Be_Fine噻 2024-07-25 12:01:01
简介day2 -- 数据库的安全管理和维护

brief

  • 访问控制的目的不仅仅是防止用户的恶意企图。数据梦魇更为常见的是无意识错误的结果,如错打MySQL语句,在不合适的数据库中操作或其他一些用户错误。通过保证用户不能执行他们不应该执行的语句,访问控制有助于避免这些情况的发生。
  • 管理访问控制需要创建和管理用户账号
  • 像所有数据一样, MySQL的数据也必须经常备份


学习内容

本节主要记录的内容包括:

  • Mysql的访问控制
  • Mysql的用户管理
  • 数据库备份


详细记录

管理用户

MySQL用户账号和信息存储在名为mysql的MySQL数据库中。
mysql数据库有一个名为user的表, 它包含所有用户账号。
user表有一个名为user的列,它存储用户登录名。

Use mysql;
SELECT user from user;
  • 创建用户
# 创建一个新用户账号,指定的口令为纯文本
CREATE USER newguy IDENTIFIED BY 'textpassword';

# 创建一个新用户账号,指定的口令为散列值
CREATE USER newguy IDENTIFIED BY PASSWORD 'hashvaluepassword';

# 为重新命名一个用户账号,使用RENAME USER语句
RENANE USER newguy TO oldguy;

# 为了删除一个用户账号(以及相关的权限),使用DROP USER语句
DROP USER oldguy;
  • 设置访问权限
    在创建用户账号后,必须接着分配访问权限。新创建的用户账号没有访问权限。它们能登录MySQL,但不能看到数据,不能执行任何数据库操作。

    MySQL的权限用 用户名和主机名结合定义。如果不指定主机名,则使用默认的主机名%(授予用户访问权限而不管主机名)

为设置权限,使用GRANT语句。 GRANT要求你至少给出以下信息:

  • 要授予的权限;
  • 被授予访问权限的数据库或表;
  • 用户名
# 为看到赋予用户账号的权限,使用SHOW GRANTS FOR
SHOW GRANTS FOR newguy;

# 此GRANT允许用户在crashcourse.*( crashcourse数据库的所有表)上使用SELECT
GRANT SELECT ON crashcourse.* TO newguy;

# 每个GRANT添加(或更新)用户的一个权限。 MySQL读取所有授权,并根据它们确定权限
GRANT DELETE ON crashcourse.* TO newguy;

# GRANT的反操作为REVOKE,用它来撤销特定的权限
REVOKE DELETE ON crashcourse.* FROM newguy;
  • GRANT和REVOKE可在几个层次上控制访问权限:
  • 整个服务器,使用GRANT ALL和REVOKE ALL;
  • 整个数据库,使用ON database.*;
  • 特定的表,使用ON database.table;
  • 特定的列;
  • 特定的存储过程。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • 更改登陆密码
# 对其他用户设置密码
SET PASSWORD FOR newguy = Password('newpassword');

# 对自己更新密码
SET PASSWORD = Password('newpassword');


  • 备份数据库
  • 使用命令行实用程序mysqldump转储所有数据库内容到某个外部文件
  • 可用命令行实用程序mysqlhotcopy从一个数据库复制所有数据(并非所有数据库引擎都支持这个实用程序)
  • 可以使用MySQL的BACKUP TABLE或SELECT INTO OUTFILE转储所有数据到某个外部文件。这两条语句都接受将要创建的系统文件 名,此系统文件必须不存在,否则会出错。数据可以用RESTORE TABLE来复原
  • 为了保证所有数据被写到磁盘(包括索引数据),可能需要在进行备份前使用FLUSH TABLES语句
# 这样会将table_name表中的所有数据备份到指定的文件中
BACKUP TABLE table_name TO '/path/to/backup/file';
# 这个语句会将table_name表中的所有数据导出到指定的文件中
SELECT * INTO OUTFILE '/path/to/output/file' FROM table_name;

# 这个语句会将指定的备份文件恢复为table_name表,并覆盖已有的表数据。
# 需要注意的是,该操作将删除原有表中的所有数据,请谨慎使用
RESTORE TABLE table_name FROM '/path/to/backup/file';

# 如果是使用SELECT INTO OUTFILE命令导出的数据文件,可以使用LOAD DATA INFILE语句将数据文件导入到表中
LOAD DATA INFILE '/path/to/data/file' INTO TABLE table_name;
  • 数据库维护
# 连接到MySQL服务器
mysql -u username -p

# 显示所有数据库
SHOW DATABASES;

# 切换到特定的数据库
USE database_name;

# 显示数据库中的所有表
SHOW TABLES;

# 备份数据库
mysqldump -u username -p database_name > backup_file.sql

# 恢复数据库
mysql -u username -p database_name < backup_file.sql

# 优化数据库表
# 如果从一个表中删除大量数据,应该使用OPTIMIZE TABLE来收回所用的空间,从而优化表的性能
OPTIMIZE TABLE table_name;

# 修复数据库表
REPAIR TABLE table_name;

# 用来检查表键是否正确
ANALYZE TABLE table_name;

# 针对许多问题对表进行检查
CHECK TABLE table_name;
风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。