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;
运行结果如下:
语法解析:上面结果中的 usage 表示 dbadmin 用户帐户只能登录到数据库服务器,没有其他权限。 * . * 中,前面的 * 表示数据库,后面的 * 表示表,*.*表示所有数据库中的所有表。
要授予用户权限,您可以使用 GRANT 语句。
用户授权
给新用户 dbadmin 授予超级管理员权限,代码如下所示:
-- 授予全部权限
grant all on *.* to 'dbadmin'@'localhost' with grant option;
-- 查询权限
show grants for dbadmin@localhost;
运行结果如下:
查询结果表明 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