实验:MySQL数据库用户和权限管理

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 表的 idname 字段的 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'@'%';

验证步骤

  1. 验证 egon1 远程登录后,应能对所有库和表进行所有操作(除了授予权限)。
  2. 验证 egon2 远程登录后,应能对 db1 库下所有表进行所有操作。
  3. 验证 egon3 远程登录后,只能看到 db1 库下的 t1 表,并且只能执行 SELECT 操作。
  4. 验证 egon4 远程登录后,只能对 t1 表的 idname 字段执行 SELECT 操作,对 age 字段执行 UPDATE 操作。
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇