MySQL学习笔记(三):用户权限

1.用户权限

1.1 用户权限级别

MySQL中的用户权限级别分为:

(1)全局权限:拥有对所有数据库和用户进行操作的权限。用户的全局(所有)权限信息存储在“mysql.user”数据表中。

(2)数据库权限:可以操作数据库。用户的数据库权限信息存储在“mysql.db”数据表中。

(3)数据表权限:可以操作数据表。用户的数据表权限信息存储在“mysql.table_priv”数据表中。

(4)字段权限:可以操作字段。用户的字段权限信息存储在“mysql.columns_priv”数据表中。

(5)存储过程权限:可以操作存储过程。用户的存储过程权限信息存储在“mysql.proc_priv”数据表中。

1.2 各级别权限的详细信息

权限名

mysql.user表中的字段

权限级别

权限说明

CREATE

Create_priv

数据库、表或索引

创建数据库、表或索引的权限

DROP

Drop_priv

数据库、表或索引

删除数据库、表或索引的权限

GRANT OPTION

Grant_priv

数据库、表或保存的程序

授予所有权限的权限

REFERENCES

References_priv

数据表

创建数据表外键的权限

ALTER

Alter_priv

数据库、表

修改数据库、表的权限,如添加字段和索引等

DELETE

Delete_priv

数据表

删除数据表的权限

INDEX

Index_priv

数据表

索引的权限

INSERT

Insert_priv

数据表、视图

插入数据的权限

SELECT

Select_priv

数据表、视图

查询数据的权限

UPDATE

Update_priv

数据表、视图

修改数据的权限

CREATE VIEW

Create_view_priv

视图

创建视图的权限

SHOW VIEW

Show_view_priv

视图

查询视图的权限

ALTER ROUTINE

Alter_routine_priv

存储过程、函数

更改存储过程或函数的权限

CREATE ROUTINE

Create_routine_priv

存储过程、函数

创建存储过程或函数的权限

EXECUTE

Execute_priv

存储过程、函数

执行存储过程和函数的权限

FILE

File_priv

主机文件

访问服务器主机文件的权限

CREATE TEMPORARY TABLES

Create_tmp_table_priv

服务器管理

创建临时表的权限

LOCK TABLES

Lock_tables_priv

服务器管理

锁定特定数据表的权限

CREATE USER

Create_user_priv

服务器管理

创建用户的权限

PROCESS

Process_priv

服务器管理

查看进程的权限

RELOAD

Reload_priv

服务器管理

执行flush-hosts、flush-logs、flush-privileges、flush-status、flush-tables、flush-threads、refresh、reload等命令的权限

REPLICATION CLIENT

Repl_client_priv

服务器管理

复制权限

REPLICATION SLAVE

Repl_slave_priv

服务器管理

复制权限

SHOW DATABASES

Show_db_priv

服务器管理

查看数据库列表的权限

SHUTDOWN

Shutdown_priv

服务器管理

关闭数据库的权限

SUPER

Super_priv

服务器管理

执行kill线程的权限

2.授予用户权限

2.1 授予全局权限

GRANT [ALL|ALL PRIVILEGES] ON *.* TO '用户名'@{'主机名'|'IP地址'};

(1)“[...|...]”:可选其一,也可都不选。

(2)“{...|...}”:必选其一。

(3)“*.*”:表示所有数据库和所有数据表。

2.2 授予数据库、表权限

GRANT 权限名 ON 数据库名[.数据表名|.视图] TO '用户名'@{'主机名'|'IP地址'}
    [WITH GRANT OPTION];  # 使用效果:被授权的用户有权限把自身所有权限授权给别的用户

2.3 授予字段权限

GRANT 权限名(字段名1, 字段名2, ...) ON 数据库名.数据表名 TO '用户名'@{'主机名'|'IP地址'}
    [WITH GRANT OPTION];

2.4 授予存储过程权限

GRANT 权限名 ON PROCEDURE 数据库名.存储过程名 TO '用户名'@{'主机名'|'IP地址'}
    [WITH GRANT OPTION];

3.查询用户权限

3.1 查询当前用户权限

SHOW GRANTS;

3.2 查询其他用户权限

SHOW GRANT FOR '用户名'@{'主机名'|'IP地址'};

3.3 查询用户权限列表

DESC 权限列表;           # 查询权限列表的结构, 包括对应级别的所有权限
SELECT * FROM 权限列表;  # 查询所有用户对应级别的权限信息
# 权限列表:mysql.user、mysql.db、mysql.table_priv、mysql.columns_priv、mysql.proc_priv

4.撤销用户权限

REVOKE 权限名[(字段名1, 字段名2, ...)] ON 数据库名.数据表名
    FROM '用户名'@{'主机名'|'IP地址'};

5 例子

5.1 创建MySQL对象

# 创建MySQL中的对象(用户, 数据库, 数据表和存储过程)
CREATE USER 'test_user'@'localhost' IDENTIFIED BY '123456';  # 创建一个用户

CREATE DATABASE test_database;  # 创建一个数据库

USE test_database;              # 连接创建的数据库

CREATE TABLE test_table         # 在test_database数据库中创建一个数据表
(
    id VARCHAR(255) PRIMARY KEY,
    name VARCHAR(255),
    age VARCHAR(255)
);

DELIMITER \\
CREATE PROCEDURE test_proc()    # 在test_database数据库中创建一个存储过程
BEGIN
    DECLARE count INT;
    SELECT COUNT(*) INTO count FROM test_table;
END \\
DELIMITER ;

5.2 查询用户权限

5.2.1 查询当前用户权限

SHOW GRANTS;

上图是VS code中MySQL插件(VS code模组仓库中搜索MySQL shell for VS code)返回的结果,如果用MySQL自带的编辑器可以使用如下命令,可以让返回的结果更可读,下述命令也都是如此。

SHOW GRANTS\G

5.2.2 查询新创建的用户权限

SHOW GRANTS FOR 'test_user'@'localhost';

5.2.3 查询权限列表

SELECT * FROM mysql.user;

从上图可以看出,新创建的用户“test_user”的权限基本都为“N”。

5.3 授予用户权限

5.3.1 授予存储过程权限

(1)查看存储过程权限列表

SELECT * FROM mysql.procs_priv;  # 查询存储过程权限

(2)授予用户存储过程权限

# 授予用户"test_user"执行存储过程"test_database.test_proc"的权限
GRANT EXECUTE ON PROCEDURE test_database.test_proc TO 'test_user'@'localhost';

 (3)再次查看存储过程权限列表

SELECT * FROM mysql.procs_priv;  # 再次查询存储过程权限

5.3.2 授予字段权限

(1)查看字段权限列表

SELECT * FROM mysql.columns_priv;  # 查询字段权限

(2)授予用户字段权限

# 字段权限:授予用户"test_user"修改字段"age"的权限
GRANT UPDATE(age) ON test_database.test_table TO 'test_user'@'localhost';

 (3)再次查看字段权限列表

SELECT * FROM mysql.columns_priv;  # 再次查询字段权限

5.3.3 授予数据库、表权限

(1)查看数据库、表权限列表

SELECT * FROM mysql.tables_priv;  # 查询数据表权限
SELECT * FROM mysql.db;           # 查询数据库权限

(2)授予用户数据库、表权限

# 授予用户"test_user"查询"test_database.test_table"数据表的权限
GRANT SELECT ON test_database.test_table TO 'test_user'@'localhost';

# 授予用户"test_user"执行所有数据库程序的权限
GRANT EXECUTE ON *.* TO 'test_user'@'localhost';

(3)再次查看数据库、表权限列表

SELECT * FROM mysql.tables_priv;  # 再次查询数据表权限
SELECT * FROM mysql.db;           # 再次查询数据库权限

5.3.4 授予用户全局权限

(1)查看全局权限列表

SELECT * FROM mysql.user;  # 查询全局权限

(2)授予用户全局权限

# 授予用户"test_user"所有全局权限
GRANT ALL ON *.* TO 'test_user'@'localhost';

(3)再次查看全局权限列表

SELECT * FROM mysql.user;  # 再次查询全局权限

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值