MySQL权限详解

作者:IT技术圈子 浏览量:158   发表于 2024-09-23 19:57 标签:

MySQL权限

MySQL 权限大致可以分为以下几类:

  1. 全局权限(Global Privileges):适用于整个 MySQL 服务器的权限。
  2. 数据库级权限(Database Privileges):适用于特定数据库的权限。
  3. 表级权限(Table Privileges):适用于特定表的权限。
  4. 列级权限(Column Privileges):适用于特定列的权限。
  5. 存储过程和函数权限(Stored Routine Privileges):适用于存储过程和函数的权限。
  6. 代理权限(Proxy Privileges):用于代理身份认证。

常用权限说明及示例

1. 全局权限

这些权限适用于整个服务器,包括创建和管理数据库、用户等。

  • ALL PRIVILEGES:授予所有权限。
  • CREATE USER:创建新用户。
  • GRANT OPTION:允许用户将自己的权限授予其他用户。
  • RELOAD:重新加载数据库级的权限。
  • SHUTDOWN:关闭 MySQL 服务器。
  • SUPER:执行特定的管理员操作,如杀死其他用户的线程。

示例:

GRANT ALL PRIVILEGES ON *.* TO 'admin_user'@'localhost';GRANT RELOAD, SHUTDOWN ON *.* TO 'backup_user'@'localhost';

2. 数据库级权限

这些权限适用于特定数据库中的所有对象。

  • CREATE:创建新表或数据库。
  • DROP:删除数据库、表或视图。
  • ALTER:修改表结构。
  • INDEX:创建或删除索引。
  • SELECT:读取数据。
  • INSERT:插入数据。
  • UPDATE:更新数据。
  • DELETE:删除数据。

示例:

GRANT SELECT, INSERT ON mydatabase.* TO 'db_user'@'localhost';GRANT ALL PRIVILEGES ON mydatabase.* TO 'db_admin'@'localhost';

3. 表级权限

这些权限适用于特定表。

  • SELECT:读取表数据。
  • INSERT:向表中插入数据。
  • UPDATE:更新表中的数据。
  • DELETE:从表中删除数据。

示例:

GRANT SELECT, UPDATE ON mydatabase.mytable TO 'table_user'@'localhost';

4. 列级权限

这些权限适用于特定列。可用于限制用户仅对特定列的数据进行操作。

  • SELECT:读取指定列的数据。
  • INSERT:向指定列插入数据。
  • UPDATE:更新指定列的数据。

示例:

GRANT SELECT (column1, column2), UPDATE (column1) ON mydatabase.mytable TO 'column_user'@'localhost';

5. 存储过程和函数权限

这些权限用于管理和执行存储过程和函数。

  • EXECUTE:执行存储过程或函数。
  • ALTER ROUTINE:更改或删除存储过程或函数。
  • CREATE ROUTINE:创建存储过程或函数。

示例:

GRANT EXECUTE ON PROCEDURE mydatabase.myprocedure TO 'routine_user'@'localhost';GRANT CREATE ROUTINE ON mydatabase.* TO 'routine_creator'@'localhost';

6. 代理权限

用于将用户的权限代理给另一个用户。

  • PROXY:允许用户代理另一个用户。

示例:

GRANT PROXY ON 'source_user' TO 'proxy_user'@'localhost';
权限名称授权范围描述
ALL全局权限实例所有权限
CREATE ROLE全局权限创建数据库角色
CREATE TABLESPACE全局权限创建表空间
CREATE USER全局权限创建数据库用户
DROP ROLE全局权限删除数据库角色
PROCESS全局权限查看实例中的所有session(show processlist)
默认只能看登录用户的session
PROXY全局权限
RELOAD全局权限执行下面的操作需要reload权限
flush privileges
flush logs
REPLICATION CLIENT全局权限查看复制信息的权限(show slave status)
REOLICATION SLAVE全局权限复制权限(从主库复制数据)
SHUTDOWN全局权限关闭实例
SUPER全局权限超级权限
kill任何用户的session
修改参数
管理复制(start slave,change master等)
USAGE全局权限无任何权限
SHOW DATABASES全局权限查看数据库列表
show databases
CREATE数据库权限创建数据库、表
INDEX对象权限创建索引(create index)
CREATE VIEW对象权限创建视图
CREATE ROUTINE数据库权限创建存储过程、函数
DROP数据库权限删除表、视图、存储过程、触发器、定时任务
ALTER对象权限修改表结构和表的索引
即使没有index权限,也可以使用alter语句添加或删除索引
修改表名称时,同时需要drop权限
ALTER ROUTINE对象权限修改存储过程、函数
EVENT全局权限创建、删除调度任务
TRIGGER对象权限创建触发器的权限
SELECT对象权限查询数据
INSERT对象权限插入数据
UPDATE对象权限更新数据
DELETE对象权限删除数据
EXECUTE对象权限执行存储过程的权限
REFERENCE数据库权限外键引用权限
LOCK TABLES数据库权限执行lock tables权限,需要同时对表有select权限
SHOW VIEW对象权限查看视图定义(show create view)

创建用户

在分配权限之前,需要先创建用户。

CREATE USER 'username'@'host' IDENTIFIED BY 'password';

查看权限

查看某个用户的权限,可以使用 SHOW GRANTS 语句。

SHOW GRANTS FOR 'username'@'host';

撤销权限

可以使用 REVOKE 语句撤销已授予的权限。

REVOKE SELECT, INSERT ON mydatabase.* FROM 'db_user'@'localhost';

刷新权限

在某些情况下,可能需要手动刷新权限缓存,以使权限更改立即生效。

FLUSH PRIVILEGES;

授权脚本

-- 所有权限GRANT all PRIVILEGES ON *.* TO 'test'@'192.168.1.1'  with grant option;-- Root 账号-- mysql_native_password 认证方式已经即将过期 ;建议使用 caching_sha2_passwordCREATE USER 'root'@'192.168.1.1' IDENTIFIED WITH caching_sha2_password BY '**********';GRANT USAGE ON *.* TO 'root'@'192.168.1.1';GRANT all privileges ON *.* TO 'root'@'192.168.1.1' with grant option;FLUSH PRIVILEGES;-- 去掉权限  drop 权限revoke drop on *.* from 'root'@'192.168.1.1';flush privileges;-- 删除用户drop user test@'192.168.1.1';

在 MySQL 中,权限管理是确保数据库安全性的重要组成部分。MySQL 提供了一套丰富的权限系统,允许数据库管理员精细地控制用户可以执行的操作。

from:公众号【DBA小强】