任务8.1

添加数据库用户

1.MySQL的权限表

MySQL权限表存放在名称为MySQL数据库中。常用的权限表有 user、db、host、table_priv、columns_priv和 procs_priv。

(1)user权限表

user是MySQL中最重要的一个权限表,user列主要分为4个部分:用户列、权限列、安全列和资源控制列。

① 用户列:用户登录时通过表中Host、User和Password列判断连接的IP、用户名称和密码是否存在于表中来通过身份验证或拒绝连接。

② 权限列:user表中包含多个以“_priv”结尾的字段,这些字段决定了该用户的权限,既包括查询权限、插入权限、更新权限、删除权限等普通权限,也包括关服务器和加载用户等高级管理权限。

③ 安全列:ssl(加密)、x509(标识用户)开头的字段,以及 plugin 和 authentication string 字段(验证用户身份、授权的插件)。

④ 资源控制列:max(最大允许次数,0表示无限制)开头的字段。

max_questions:表示每小时允许执行查询数据库的次数。

max_updates:表示每小时允许执行更新数据库的次数。

max_connections:表示每小时许执行接数据库的次数。

max_user_conntions:表示单个用户同时连接数据库的次数。

(2)db、host权限表

host 权限表是db权限表的扩展,配合db权限表对给定主机上数据库级操作权限做更细致的控制。host 权限表很少使用,只有在db表的范围内扩展一个条目时才会用到。

(3)table_priv权限表

记录数据表级别的操作权限。table_priv权限表与db权限表相似,不同之处是它用于数据表而不是数据库。

(4)columns_priv权限表

记录数据字段级别的操作权限。columns_priv权限表的作用与table_priv权限表类似,不同之处是它针对某些表的特定字段的权限

(5)procs_priv权限表

该权限表存储用户在存储过程和函数上的操作权限。

2.添加用户

新安装的MySQL中只有一个名称为root的用户。这个用户是安装服务器时由系统创建并赋予了MySQL的所有权限。

添加用户可以通过CREATE USER INSERT和GRANT语句来实现。
(1)CREATE USER 语句的语法格式为:

CREATE USER<用户名>@<主机>[IDENTIFIED BY[PASSWORD]

[<'密码'>]]:

说明:

①使用CREATE USER语句可以创建一个或多个用户,用户之间用逗号分隔。

②“主机”可以是主机名或IP地址,本地主机名可以使用localhost,“%”表示一组主机。
③“IDENTIFIEDBY”关键字用于设置用户的密码,若指定用户登录不需要密码则可以省略该选项。
④“PASSWORD”关键字指定使用哈希值设置密码。密码的哈希值可以使用 PASSWORD()函数获取。

(2)INSERT 语句的语法格式为:

INSERT INTO mysql.user(User,Host,Password)
Values(<'用户名'>,<'主机'>,PASSWORD(<'密码 '>));

说明:

通常语句只能添加 Host、User、Password字段的值,分别表示 user 数据表中的主机名字段、用户名字段和密码字段。

任务8.2

授予、回收数据库用户权限

新添加的数据库用户既不允许访问其他用户的数据库,也不能创建自己的数据库只有在授予了相应的权限后才能访问或创建数据库。

为满足L器需考虑以下内容。

①多数用户只需要对数据表进行读、写操作,只有少数用户需要创建、删除数据表。
② 某些用户需要读、写数据而不需要修改数据。

③某些用户允许添加数据而不允许删除数据。
④ 管理员用户需要有管理用户的权力,而其他用户则不需要。
⑤ 某些用户允许通过存储过程来访问数据,而不允许直接访问数据表。

1.授予用户权限

GRANT 语句不仅是授权语句,还可以达到添加新用户或修改用户密码的作用。

GRANT语句的语法格式为:

GRANT<权限名称>[(字段列表)]ON<对象名>TO用户名>@<主机>

[FIDENTIFIED BY[PASSWORD]<'新密码>1[WITH GRANT OPTION];

说明:

① “权限名称”中常用的权限如下。
ALL[PRIVILEGES]:除GRANT OPTION之外的所有简单权限。

CREATE:允许创建数据表。

ALTER:允许修改数据表。

DROP:允许删除数据表。

SELECT:允许检索数据表。
INSERT:允许在数据表中插入数据。

DELETE:允许在数据表中删除数据。

UPDATE:允许在数据表中更新数据。

INDEX:允许在数据表中定义索引。

CREATE VIEW:允许创建视图。
EXECUTE:允许运行指定的存储过程。

②“对象名”有以下权限级别。

全局权限:适用于一个给定服务器中的所有数据库,可以用“*.*”来表示。

数据库权限:适用于一个给定数据库中的所有数据库对象,可以用“数据库名.*”来表示。

表权限:适用于一个给定表中的所有列,可以用“数据库名.表名”来表示。
列权限:适用于一个给定表中的单一列,可以先用“数据库名、表名”来表示,再在权限名称后加上“[(字段列表)]”可选项,如 SELECT(员工ID,姓名)。

子程序权限:适用于给定存储过程或函数,可以用“PROCEDURE|FUNCTION数据库名.过程名”来表示。

③ “<' 用户名 '>@<' 主机 !>”中若“用户名”不存在则添加用户。”[IDENTIFIED BY[PASSWORD]<'新密码'>]”可选项可以设置新用户的密码,若“用户名”已经存在,则此选项可以修改用户的密码
④“[WITH GRANT OPTION]”可选项表示允许用户将获得的权限授予其他用户。

2.查看用户权限

(1)使用SHOW GRANTS语句查看授权信息

        其语法格式为:

SHOW GRANTS FOR<'用户名'>@<'主机'>

(2)使用SELECT 语句查看mysql.user表中用户的全局权限

其语法格式为:

SELECT<权限字段> FROM mysql.user
[WHERE User=<'用户名'> AND Host=<'主机'>];

说明:

“mysql.user”表可以查询到用户的全局权限,“<权限字段>”中常用的权限字段有Select_priv、Insert_priv、Create_priv等,mysql.db中可以查询到用户的数据库权限。

3.回收用户权限

使用REVOKE语句回收用户权限

其语法格式为:
REVOKE<权限名称>[(字段列表)]ON<对象名>FROM<用户名>@主机'>;
说明:

REVOKE语句用来取消指定用户的某些指定权限,与 GRANT 语句类似。

任务8.3

数据库用户管理

1.修改用户名称

使用RENAME USER语句可以修改用户的名称

其语法格式为:
RENAME USER<'旧的用户名>@<'主机'>TO<'新的用户名>@<主机'>;

说明:RENAME USER语句可以对用户进行重命名,该语句可以同时对多个已存在的用户进行重命名,各个用户之间使用逗号分隔。

2.修改用户密码

(1)使用mysqladmin命令修改用户密码的语法格式为:
mysqladmin-u<用户名>[-h<主机>]-p password[<新密码>

说明:“mysqladmin”是一条外部命令,必须在服务器端的“命令提示符”下执行。

(2)使用SET PASSWORD语句修改用户密码的语法格式为:
SET PASSWORD[FOR<'用户名>@<'主机>]=PASSWORD<新密码>);
说明:

SET PASSWORD语句可以修改用户的密码,语句中若不加“[FOR<用户名>@<'主机'>]”可选项,则修改当前用户密码,
(3)使用UPDATE语句修改用户密码的语法格式为:
UPDATE mysql. user SET Password=PASSWORD(<新密码>)

WHERE User<'用户名'> AND Host=<主机>;

说明:“新密码”需要用“PASSWORDO”函数来加密。

3.删除用户

(1)使用 DROP USER 语句删除用户的语法格式为:

DROP USER<'用户名'>@<'主机'>;
说明:

DROP USER语句可以删除一个或多个普通用户,各用户之间用逗号分隔如果删除用户已经创建的数据库对象,那么该用户将继续保留。

(2)使用DELETE语句删除用户的语法格式为:
DELETE FROM mysql.user WHERE User=<'用户名'>AND Host<主机>;

说明:

使用DELETE语句删除用户时,使用者必须拥有“mysql.user”的“De- lete”权限。