MySql用户及用户权限管理

 本文实例环境及版本MySql-Community-5.7.30.0、Navicat。

一、用户管理

操作之前请确认当前用户及权限,建议使用root

1、查看所有用户信息

select User,Host,authentication_string from mysql.user;

2、查看单个用户情况

select * from mysql.user where user='root';

3、创建用户

-- 创建temp用户 密码为123456
-- 如果是本地用户可以用 localhost ,如果想让该用户可远程访问使用% 
create user tempUser@'%' IDENTIFIED by '123456';

4、修改用户密码

-- 使用set 修改temp用户密码
set password for temp@'%' = password('123');
-- 或直接修改mysql.user表  5.7以下版本密码字段为password,5.7或以上版本密码字段为authentication_string
update user set authentication_string=password('123') where user='temp';

5、删除用户

-- 删除temp用户
drop user temp;

6、用户重命名

-- 将temp用户名修改为 temp2
rename user temp@'%' to temp2@'%';

 

二、用户权限管理

1、查看用户权限

-- 查看temp用户现有的权限
show grants for temp;

如下可看到temp用户有查看、删除数据的权限

 2、给用户授权

格式: GRANT [权限] ON [数据库名].[表名] TO [用户名]@[IP]

-- 权限可以多次授权,会自动叠加。

-- 给temp用户全部权限,针对所有数据库及表
grant all privileges on *.* to temp@'%';

-- 给temp用户添加 INSERT添加权限,针对zngd数据库下所有表
grant SELECT,INSERT on zngd.* to temp@'%';

-- 给temp用户授权zngd数据库下test1表查询的权限
grant SELECT on zngd.test1 to temp@'%';

-- 授权用户temp zngd数据库下查询、删除、修改权限。并指定访问密码为123456
grant SELECT,DELETE,UPDATE on zngd.* to temp@'%' IDENTIFIED by '123456';

-- 如果想让此用户也可以授权其他用户。授权给temp用户所有数据库表权限并可以给其他用户授权。
grant all on *.* to temp@'%' with grant option;

-- 每次修改更新用户权限后需重新刷新用户权限
FLUSH PRIVILEGES;

3、回收用户权限

-- 收回temp用户针对zngd数据创建的权限
revoke CREATE on zngd.* from tempUser@'%';

 

相关用户权限官网可参考文档:https://dev.mysql.com/doc/refman/5.7/en/privileges-provided.html#priv_create

具体权限及说明如下:

特权

授予表列

语境

ALL [PRIVILEGES]

“所有特权”的同义词

服务器管理

ALTER

Alter_priv

ALTER ROUTINE

Alter_routine_priv

存储的例程

CREATE

Create_priv

数据库、表或索引

CREATE ROUTINE

Create_routine_priv

存储的例程

CREATE TABLESPACE

Create_tablespace_priv

服务器管理

CREATE TEMPORARY TABLES

Create_tmp_table_priv

CREATE USER

Create_user_priv

服务器管理

CREATE VIEW

Create_view_priv

观看次数

DELETE

Delete_priv

DROP

Drop_priv

数据库、表或视图

EVENT

Event_priv

数据库

EXECUTE

Execute_priv

存储的例程

FILE

File_priv

服务器主机上的文件访问

GRANT OPTION

Grant_priv

数据库、表或存储的例程

INDEX

Index_priv

INSERT

Insert_priv

表或列

LOCK TABLES

Lock_tables_priv

数据库

PROCESS

Process_priv

服务器管理

PROXY

见proxies_priv表

服务器管理

REFERENCES

References_priv

数据库或表

RELOAD

Reload_priv

服务器管理

REPLICATION CLIENT

Repl_client_priv

服务器管理

REPLICATION SLAVE

Repl_slave_priv

服务器管理

SELECT

Select_priv

表或列

SHOW DATABASES

Show_db_priv

服务器管理

SHOW VIEW

Show_view_priv

观看次数

SHUTDOWN

Shutdown_priv

服务器管理

SUPER

Super_priv

服务器管理

TRIGGER

Trigger_priv

UPDATE

Update_priv

表或列

USAGE

“无特权”的同义词

服务器管理

 

 

  • ALLALL PRIVILEGES

    这些权限说明符的速记可在给定的权限级别的所有权限 (除GRANT OPTION)。例如,ALL在全局或表级别授予分别授予所有全局权限或所有表级别权限。

  • ALTER

    允许使用该ALTER TABLE语句来更改表的结构。 ALTER TABLE还需要 CREATE和 INSERT权限。重命名表需要ALTER和 DROP对旧表, CREATE以及 INSERT对新表。

  • ALTER ROUTINE

    允许使用更改或删除存储例程(存储过程和函数)的语句。

  • CREATE

    允许使用创建新数据库和表的语句。

  • CREATE ROUTINE

    允许使用创建存储例程(存储过程和函数)的语句。

  • CREATE TABLESPACE

    允许使用创建、更改或删除表空间和日志文件组的语句。

  • CREATE TEMPORARY TABLES

    允许使用该CREATE TEMPORARY TABLE 语句创建临时表 

    会话创建临时表后,服务器不再对该表执行进一步的权限检查。所述创建会话可以在桌子上进行任何操作,例如DROP TABLE, INSERT, UPDATE,或 SELECT有关更多信息,请参阅第 13.1.18.2 节,“创建临时表语句”

  • CREATE USER

    允许使用的ALTER USERCREATE USER, DROP USER, RENAME USER,和 REVOKE ALL PRIVILEGES语句。

  • CREATE VIEW

    启用CREATE VIEW语句的使用

  • DELETE

    允许从数据库中的表中删除行。

  • DROP

    允许使用删除(移除)现有数据库、表和视图的语句。该 DROP权限才能使用该ALTER TABLE ... DROP PARTITION 语句的分区表。该 DROP也需要特权TRUNCATE TABLE

  • EVENT

    允许使用为事件调度程序创建、更改、删​​除或显示事件的语句。

  • EXECUTE

    允许使用执行存储例程(存储过程和函数)的语句。

  • FILE

    影响以下操作和服务器行为:

    • 使用LOAD DATAand SELECT ... INTO OUTFILE语句和 LOAD_FILE()函数在服务器主机上启用读取和写入文件拥有FILE 权限的用户可以读取服务器主机上任何世界可读或 MySQL 服务器可读的文件。(这意味着用户可以读取任何数据库目录中的任何文件,因为服务器可以访问任何这些文件。)

    • 允许在 MySQL 服务器具有写访问权限的任何目录中创建新文件。这包括服务器的数据目录,其中包含实现权限表的文件。

    • 从 MySQL 5.7.17 开始,语句启用DATA DIRECTORYorINDEX DIRECTORY表选项 CREATE TABLE

    作为安全措施,服务器不会覆盖现有文件。

    要限制可以读取和写入文件的位置,请将 secure_file_priv系统变量设置为特定目录。请参阅 第 5.1.7 节,“服务器系统变量”

  • GRANT OPTION

    使您能够向其他用户授予或撤销您自己拥有的那些权限。

  • INDEX

    允许使用创建或删除(删除)索引的语句。INDEX适用于现有表。如果您拥有CREATE的 权限,则可以在CREATE TABLE语句中包含索引定义 

  • INSERT

    允许将行插入到数据库的表中。 INSERT还需要对ANALYZE TABLE, OPTIMIZE TABLE和 REPAIR TABLE 表维护语句。

  • LOCK TABLES

    允许使用显式LOCK TABLES语句来锁定您拥有SELECT特权的表。这包括使用写锁,它可以防止其他会话读取锁定的表。

  • PROCESS

    PROCESS权限控制访问有关服务器内执行的线程的信息(即,有关语句的信息由会话执行)。可以使用SHOW PROCESSLIST 语句、mysqladmin processlist 命令和 INFORMATION_SCHEMA.PROCESSLIST 表访问可用的线程信息,如下所示:

    • 有了PROCESS 特权,用户可以访问有关所有线程的信息,甚至是属于其他用户的线程。

    • 没有PROCESS 权限,非匿名用户可以访问自己线程的信息,但不能访问其他用户的线程,匿名用户无法访问线程信息。

    笔记

    Performance Schema threads表还提供线程信息,但表访问使用不同的权限模型。请参阅 第 25.12.16.3 节,“线程表”

    PROCESS特权还允许使用SHOW ENGINE语句、访问 INFORMATION_SCHEMA InnoDB表(名称以 开头的表INNODB_)和(从 MySQL 5.7.31 开始)访问该INFORMATION_SCHEMA FILES表。

  • PROXY

    使一个用户能够冒充或成为另一个用户。请参阅第 6.2.14 节,“代理用户”

  • REFERENCES

    创建外键约束需要REFERENCES父表的 特权。

  • RELOAD

    RELOAD实现以下操作:

    • FLUSH 语句的 使用

    • 使用中mysqladmin等效于命令FLUSH 操作:flush-hosts, flush-logs, flush-privileges, flush-status, flush-tables, flush-threads, refresh,和 reload

      reload命令告诉服务器将授权表重新加载到内存中。 flush-privileges是 的同义词 reload该 refresh命令关闭并重新打开日志文件并刷新所有表。其他 命令执行类似于 的功能 ,但更具体,在某些情况下可能更可取。例如,如果您只想刷新日志文件, 则比 flush-xxxrefreshflush-logsrefresh

    • 使用执行各种操作mysqldump选项FLUSH: --flush-logs和 --master-data.

    • RESET 语句的 使用

  • REPLICATION CLIENT

    允许使用的SHOW MASTER STATUSSHOW SLAVE STATUSSHOW BINARY LOGS语句。

  • REPLICATION SLAVE

    启用该帐户已作出对数据库的源服务器上,使用请求更新 SHOW SLAVE HOSTS, SHOW RELAYLOG EVENTS和 SHOW BINLOG EVENTS 语句。使用 mysqlbinlog选项 --read-from-remote-server ( -R) 和 --read-from-remote-master将此权限授予副本服务器用于连接到当前服务器作为其源的帐户。

  • SELECT

    允许从数据库的表中选择行。 SELECT语句SELECT仅在实际访问表时才需要 特权。有些 SELECT语句不访问表,可以在没有任何数据库许可的情况下执行。

  • SHOW DATABASES

    通过发出SHOW DATABASE语句使帐户能够查看数据库名称 没有这个权限的帐户只能看到他们有一些权限的数据库,如果服务器是用该--skip-show-database选项启动的,则根本不能使用该语句 

  • SHOW VIEW

    启用SHOW CREATE VIEW语句的使用与 一起使用的视图也需要此权限EXPLAIN

  • SHUTDOWN

    启用SHUTDOWN 语句、mysqladmin 关闭 命令和 mysql_shutdown()C API 函数的使用。

  • SUPER

    影响以下操作和服务器行为:

    • 通过修改全局系统变量来启用服务器配置更改。对于某些系统变量,设置会话值也需要 SUPER权限。如果系统变量受到限制并且需要特殊权限来设置会话值,则变量描述会指示该限制。实例包括 binlog_format, sql_log_bin,和 sql_log_off另请参见 第 5.1.8.1 节,“系统变量权限”

    • 启用对全局事务特性的更改(请参阅第 13.3.6 节,“SET TRANSACTION 语句”)。

    • 使帐户能够启动和停止复制,包括组复制。

    • 允许使用CHANGE MASTER TOandCHANGE REPLICATION FILTER语句。

    • 通过PURGE BINARY LOGSand BINLOG语句启用二进制日志控制 

    • 允许在执行视图或存储程序时设置有效的授权 ID。具有此权限的用户可以在DEFINER视图或存储程序属性中指定任何帐户 

    • 允许使用的CREATE SERVERALTER SERVERDROP SERVER语句。

    • 启用mysqladmin 调试 命令的使用。

    • 启用InnoDB加密密钥轮换。

    • 启用通过该DES_ENCRYPT()函数读取 DES 密钥文件 

    • 启用版本令牌功能的执行。

    • 启用对不允许非SUPER帐户的客户端连接的控制

      • 允许使用 KILL语句或 mysqladmin kill命令来终止属于其他帐户的线程。(一个帐户总是可以杀死自己的线程。)

      • 客户端连接init_connect ,服务器不执行 系统变量内容 SUPER

      • SUPER即使max_connections 达到系统变量配置的连接限制 ,服务器也会接受来自客户端的 一个连接 

      • 处于离线模式(offline_mode 启用)的服务器不会SUPER在下一个客户端请求时终止客户端连接,而是 接受来自SUPER客户端的新连接 

      • 即使read_only启用系统变量,也可以执行更新 这适用于明确的表的更新,并使用账户管理语句,如GRANT和 REVOKE隐式更新表。

  • TRIGGER

    启用触发器操作。您必须拥有该表的此权限才能为该表创建、删除、执行或显示触发器。

    当触发器被激活(由谁拥有特权执行用户INSERT, UPDATE或 DELETE与触发器关联的表的语句),触发器执行要求谁定义触发器的用户仍然有TRIGGER对表的特权。

  • UPDATE

    允许更新数据库表中的行。

  • USAGE

    此权限说明符代表无权限”。在全局级别使用, GRANT用于修改帐户属性,例如资源限制或 SSL 特征,而无需在权限列表中命名特定帐户权限。SHOW GRANTS显示 USAGE以指示帐户在权限级别没有权限。

特权授予指南

仅授予帐户所需的权限是个好主意。您在授予FILE和管理权限时应特别小心

  • FILE可以被滥用以将 MySQL 服务器可以在服务器主机上读取的任何文件读入数据库表。这包括服务器数据目录中的所有世界可读文件和文件。然后可以访问该表 SELECT以将其内容传输到客户端主机。

  • GRANT OPTION使用户能够将他们的权限授予其他用户。具有不同权限且具有GRANT OPTION权限的两个用户可以合并权限。

  • ALTER 可用于通过重命名表来破坏特权系统。

  • SHUTDOWN 可以被滥用以通过终止服务器完全拒绝向其他用户提供服务。

  • PROCESS 可用于查看当前正在执行的语句的纯文本,包括设置或更改密码的语句。

  • SUPER 可用于终止其他会话或更改服务器的运行方式。

  • mysql系统数据库本身授予的权限可用于更改密码和其他访问权限信息

 

才疏学浅,相关文档等仅供自我总结,如有相关问题可留言交流谢谢。

 

posted @ 2021-12-08 13:14  独角马  阅读(147)  评论(0编辑  收藏  举报