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 DATA
andSELECT ... INTO OUTFILE
语句和LOAD_FILE()
函数在服务器主机上启用读取和写入文件。拥有FILE
权限的用户可以读取服务器主机上任何世界可读或 MySQL 服务器可读的文件。(这意味着用户可以读取任何数据库目录中的任何文件,因为服务器可以访问任何这些文件。) -
允许在 MySQL 服务器具有写访问权限的任何目录中创建新文件。这包括服务器的数据目录,其中包含实现权限表的文件。
-
从 MySQL 5.7.17 开始,为语句启用
DATA DIRECTORY
orINDEX 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-
xxx
refresh
flush-logs
refresh
-
使用执行各种操作的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 TO
andCHANGE REPLICATION FILTER
语句。 -
通过
PURGE BINARY LOGS
andBINLOG
语句启用二进制日志控制 。 -
允许在执行视图或存储程序时设置有效的授权 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
系统数据库本身授予的权限可用于更改密码和其他访问权限信息
才疏学浅,相关文档等仅供自我总结,如有相关问题可留言交流谢谢。