1. 创建库 db1
和用户表 t1
首先,创建数据库 db1
,并在其中创建表 t1
,然后插入10条记录。
CREATE DATABASE db1;
USE db1;
CREATE TABLE t1 (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50),
age INT,
gender ENUM('male', 'female')
);
INSERT INTO t1 (name, age, gender) VALUES
('Alice', 25, 'female'),
('Bob', 30, 'male'),
('Charlie', 35, 'male'),
('David', 40, 'male'),
('Eve', 22, 'female'),
('Frank', 28, 'male'),
('Grace', 32, 'female'),
('Heidi', 27, 'female'),
('Ivan', 23, 'male'),
('Judy', 29, 'female');
2. 创建远程账户 egon1
并授权
创建用户 egon1
,并授予其对所有库下的所有表的所有权限(除了GRANT权限之外)。
CREATE USER 'egon1'@'%' IDENTIFIED BY 'Passw@rd1';
GRANT ALL PRIVILEGES ON *.* TO 'egon1'@'%';
3. 创建远程账户 egon2
并授权
创建用户 egon2
,并授予其对 db1
库下所有表的所有权限,然后远程登录验证。
CREATE USER 'egon2'@'%' IDENTIFIED BY 'Passw@rd2';
GRANT ALL PRIVILEGES ON db1.* TO 'egon2'@'%' WITH GRANT OPTION;
4. 创建远程账户 egon3
并授权
创建用户 egon3
,并授予其对 db1
库下 t1
表的 SELECT 权限,然后远程登录验证只能看到 db1
下的 t1
表,并且只能 SELECT 不能做其他操作。
CREATE USER 'egon3'@'%' IDENTIFIED BY 'Passw@rd3';
GRANT SELECT ON db1.t1 TO 'egon3'@'%';
5. 创建远程账户 egon4
并授权
创建用户 egon4
,并授予其对 db1
库下 t1
表的 id
和 name
字段的 SELECT 权限,对 age
字段有 UPDATE 权限,然后远程登录验证。
CREATE USER 'egon4'@'%' IDENTIFIED BY 'Passw@rd4';
GRANT SELECT(id, name, age), UPDATE(age) ON db1.t1 TO 'egon4'@'%';
6. 查出上述权限存于 MySQL 中的记录
SELECT
*
FROM
mysql.user
WHERE
user IN ('egon1', 'egon2', 'egon3', 'egon4')\G
SELECT
user, host, db, table_name, table_priv, column_priv
FROM
mysql.tables_priv
WHERE
user IN ('egon1', 'egon2', 'egon3', 'egon4');
SELECT
user, host, db, table_name, column_name, column_priv
FROM
mysql.columns_priv
WHERE
user IN ('egon1', 'egon2', 'egon3', 'egon4');
SELECT
*
FROM
information_schema.user_privileges
WHERE
grantee IN ('\'egon1\'@\'%\'', '\'egon2\'@\'%\'', '\'egon3\'@\'%\'', '\'egon4\'@\'%\'');
7. 撤销上述所有授权
REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'egon1'@'%';
REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'egon2'@'%';
REVOKE ALL PRIVILEGES ON db1.t1 FROM 'egon3'@'%';
REVOKE SELECT(id, name, age), UPDATE(age) ON db1.t1 FROM 'egon4'@'%';
DROP USER 'egon1'@'%';
DROP USER 'egon2'@'%';
DROP USER 'egon3'@'%';
DROP USER 'egon4'@'%';
验证步骤
- 验证
egon1
: 远程登录后,应能对所有库和表进行所有操作(除了授予权限)。 - 验证
egon2
: 远程登录后,应能对db1
库下所有表进行所有操作。 - 验证
egon3
: 远程登录后,只能看到db1
库下的t1
表,并且只能执行 SELECT 操作。 - 验证
egon4
: 远程登录后,只能对t1
表的id
和name
字段执行 SELECT 操作,对age
字段执行 UPDATE 操作。