MySQL 访问控制系统

MySQL 实现了复杂的访问控制和权限系统,允许您创建用于处理客户端操作的全面的访问规则,并有效防止未经授权的客户端访问数据库系统。

当客户端连接到服务器时,MySQL 访问控制有两个阶段:

  • 连接验证:连接到 MySQL 数据库服务器的客户端需要有一个有效的用户名和密码。此外,客户端连接的主机必须与MySQL授权表中的主机相匹配。默认情况下,mysql授权的主机只有本机,只允许本地连接,远程连接需要修改授权列表。
  • 请求验证:当连接成功建立后,对于客户端发出的每个语句,MySQL会检查客户端是否具有足够的权限 来执行该特定语句。 MySQL 能够检查数据库,表和字段级别的权限。

用户账户管理

查看用户

查询数据库当前用户信息,代码如下所示:

-- 使用 mysql 数据库
use mysql;
-- 查询用户信息
select * from user;

创建删除用户

创建一个新用户 dbadmin,密码为 pwd123,代码如下所示:

-- @localhost本地的
create user dbadmin@localhost identified by 'pwd123';
select * from user;
-- 删除用户
drop user 'dbadmin'@'localhost';

语法解析:

identified by 用于指定密码,@localhost 表示该用户只能从本机登录,如果希望用户可以从任意主机连接,可以使用@’%’。

查看新用户 dbadmin 的权限,代码如下所示:

show grants for dbadmin@localhost;

运行结果如下:

mysql 怎么更新字段内容为NULL_MySQL

语法解析:上面结果中的 usage 表示 dbadmin 用户帐户只能登录到数据库服务器,没有其他权限。 * . * 中,前面的 * 表示数据库,后面的 * 表示表,*.*表示所有数据库中的所有表。

要授予用户权限,您可以使用 GRANT 语句。

用户授权

给新用户 dbadmin 授予超级管理员权限,代码如下所示:

-- 授予全部权限
grant all on *.* to 'dbadmin'@'localhost' with grant option;
-- 查询权限
show grants for dbadmin@localhost;

运行结果如下:

mysql 怎么更新字段内容为NULL_MySQL_02

查询结果表明 dbadmin 用户拥有所有数据库的所有表的权限,with grant option 表示允许用户向其他用户授权,这样 dbadmin 就拥有了超级管理员权限。

也可以授予用户部分权限,例如:

CREATE USER rfc IDENTIFIED BY 'mypasswd';
GRANT SELECT, UPDATE, DELETE ON test.* TO rfc;

语法解析:

上面代码表示创建一个 rfc 账号,密码为 mypasswd,该用户只能操作 test 数据库中的表,并且只能查询、修改和删除表中的数据,如果用 rfc 用户在 test 数据库创建表就会报错。

撤销权限

在 MySQL 数据库中,可以使用 revoke 撤销用户权限。

撤销 rfc 用户的 select 权限,代码如下:

revoke select on test.* from rfc;
show GRANTS for rfc;

注意:

  • 要从用户帐户撤销权限,必须具有 GRANT OPTION 权限和要撤销的权限;
  • 注意授权是 grant…to…,而撤销权限是revoke…from…。

数据表维护

查看表

查看 test 数据库中的所有表和视图,代码如下所示:

use test;-- 使用 test 数据库
show tables;-- 显示表

Show tables 命令可以查看指定数据库中的所有表和视图,如果需要显示类型可以使用 show full tables,例如:

use test;-- 使用 test 数据库
show full tables;-- 显示表

也可以加上查询条件,例如:

use test;-- 使用 test 数据库
show tables like '%t%';-- 显示表

分析表

语法:analyze table 表名

优化表

语法:optimize table 表名

对 test 数据库中的 goods 表进行碎片整理,代码如下所示:

OPTIMIZE table goods;

检查表

语法:check table 表名

修复表

语法:repair table 表名

数据库维护

备份数据库

备份数据库语法如下:

mysqldump -u [username] –p[password] [database_name] > [dump_file.sql]

参数解释:

1、 [username]:有效的 MySQL 用户名;
2、 [password]:用户的有效密码。请注意,-p 和密码之间没有空格;
3、[database_name]: 要备份的数据库名称;
4、[dump_file.sql]: 要生成的转储文件。

如果只想备份数据库结构而不需要备份数据,那么只需要添加一个选项–no-data 来告诉 mysqldump 只需要导出数据库结构即可,例如:

mysqldump -u root -padmin --no-data test > D:\test.sql

如果要将多个数据库备份到一个数据文件,代码如下:

mysqldump -u[username] -p[password] --databases [dbname1 dbname2] > filename.sql

例如:

mysqldump -u root -p admin --databases empdb studb > D:\test. sql