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 |
“无特权”的同义词 |
服务器管理 |
-
ALL,ALL 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 USER,CREATE 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 DATAandSELECT ... 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_SCHEMAInnoDB表(名称以 开头的表INNODB_)和(从 MySQL 5.7.31 开始)访问该INFORMATION_SCHEMAFILES表。 -
-
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 STATUS,SHOW SLAVE STATUS和SHOW 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 LOGSandBINLOG语句启用二进制日志控制 。 -
允许在执行视图或存储程序时设置有效的授权 ID。具有此权限的用户可以在
DEFINER视图或存储程序的属性中指定任何帐户 。 -
允许使用的
CREATE SERVER,ALTER SERVER和DROP 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系统数据库本身授予的权限可用于更改密码和其他访问权限信息
才疏学浅,相关文档等仅供自我总结,如有相关问题可留言交流谢谢。

浙公网安备 33010602011771号