【MySQL 系列】MySQL 语句篇_DCL 语句
DCL( Data Control Language,数据控制语言)用于对数据访问权限进行控制,定义数据库、表、字段、用户的访问权限和安全级别。主要关键字包括 GRANT、 REVOKE 等。
文章目录
- 1、MySQL 中的 DCL 语句
- 1.1、数据控制语言--DCL
- 1.2、MySQL 权限概述
- 2、MySQL 中库表的 DQL 语句详解
- 2.1、MySQL 服务器登录
- 2.2、创建用户
- 2.3、修改用户
- 2.4、删除用户
- 2.5、设置当前用户密码
- 2.6、修改其他用户密码
- 2.7、列出所有用户
- 2.8、用户授权
- 2.9、显示权限
- 2.10、撤销权限
- 3、MySQL 提供了哪些权限
- 4.1、根据Context字段内容划分权限
- 4.2、按照经验划分
- 4.3、具体权限作用介绍
1、MySQL 中的 DCL 语句
1.1、数据控制语言–DCL
DCL( Data Control Language,数据控制语言)用于对数据访问权限进行控制,定义数据库、表、字段、用户的访问权限和安全级别。主要关键字包括 GRANT、 REVOKE 等。
1.2、MySQL 权限概述
MySQL 的 mysql 系统库提供了 user、db、tables_priv、columns_priv、procs_priv、proxies_priv 几个表,用于存放不同权限范围的用户账号相关数据,这些表共同组成了 MySQL 的访问权限控制系统。
MySQL 访问权限控制系统的主要功能是对从给定主机连接到 MySQL 服务器的用户进行身份验证,并校验该用户在该服务器中的数据库对象访问权限(如 SELECT、INSERT、UPDATE 和 DELETE)。另外,还包括管理匿名用户访问和授予特定的 MySQL 权限的功能(如执行 LOAD DATA INFILE 语句和管理操作权限等)。
MySQL 访问权限控制系统的用户界面由几条 SQL 语句组成,如 CREATE USER、GRANT 和 REVOKE。
在服务器内部,MySQL 将权限信息存储在 mysql 系统库的权限表中。MySQL 服务器在启动时将这些表的内容读入内存,后续针对用户的访问控制决策基于权限表的内存副本来实现。
MySQL 访问权限控制系统可以确保只有被允许的(与用户权限匹配的)操作才能够在服务器中执行。当一个用户连接到 MySQL 服务器时,其认证身份由 “请求连接的主机名和用户名” 确定,MySQL 使用 “主机名+用户名” 的方式来识别和区分 “相同主机不同用户” 和 “不同主机相同用户” 发出的请求(例如:从 office.example.com 连接的用户 Lizhengi 和从 home.example.com 连接的用户 Lizhengi 在 MySQL 服务器中实际上是被当作两个不同的连接者来处理的,所以可以设置不同的密码、不同的权限)。
举例:
mysql> show grants for Lizhengi@'localhost';
+-----------------------------------------------+
| Grants for Lizhengi@localhost |
+-----------------------------------------------+
| GRANT SELECT ON *.* TO 'Lizhengi'@'localhost' |
+-----------------------------------------------+
1 row in set (0.00 sec)mysql> show grants for Lizhengi@'%';
+-----------------------------------------------+
| Grants for Lizhengi@% |
+-----------------------------------------------+
| GRANT SELECT ON *.* TO 'Lizhengi'@'%' |
+-----------------------------------------------+
1 row in set (0.00 sec)
当用户使用客户端程序连接到 MySQL 服务器时,MySQL 的访问控制分为如下两个阶段:
-
阶段 1:服务器根据身份标识(“主机名+用户名” 组成的账号名称)在 MySQL 的访问权限控制表中查询相关信息,以确定需要接受或拒绝该用户的连接(没有查询到就拒绝连接).如果查询到了用户记录,则校验用户提供的账号密码是否正确,如果密码不正确则拒绝连接。
这个阶段的报错信息类似于:
ERROR 1045 (28000): Access denied for user 'Lizhengi'@'localhost'(using password: YES)。 -
阶段 2:用户连接成功之后,服务器会检查用户访问请求中的每个声明,确定是否有足够的权限来执行。例如:如果尝试从数据库的表中查询数据行或从数据库中删除表,服务器将验证该用户否具有该表的
SELECT权限或数据库的DROP权限。如果无对应权限,则这个阶段的报错信息类似于:
ERROR 1142 (42000) at line 1: UPDATE command denied to user'Lizhengi'@'localhost' for table 'test_table1'。
如果某用户在连接期间发生了权限变更(自己或者其他用户修改了权限),那么该用户执行下一条语句时,该权限变更不一定会立即生效。如果未生效,则需要执行 FLUSH PRIVILEGES; 语句。
2、MySQL 中库表的 DQL 语句详解
2.1、MySQL 服务器登录
启动 MySQL 服务后,可以通过 mysql 命令来登录 MySQL 服务器,命令如下:
mysql –h hostname|hostIP –P port –u username –p DatabaseName –e "SQL语句"
下面详细介绍命令中的参数:
-h参数:后面接主机名或者主机 IP,hostname 为主机,hostIP为 主机IP-P参数:后面接 MySQL 服务的端口,通过该参数连接到指定的端口。MySQL 服务的默认端口是 3306,不使用该参数时自动连接到 3306 端口,port 为连接的端口号-u参数:后面接用户名,username 为用户名-p参数:会提示输入密码DatabaseName参数:指明登录到哪一个数据库中。如果没有该参数,就会直接登录到 MySQL 数据库中,然后可以使用 USE 命令来选择数据库-e参数:后面可以直接加 SQL 语句。登录 MySQL 服务器以后即可执行这个 SQL 语句,然后退出 MySQL 服务器
举例:
mysql -u root -p -h localhost -P 3306 mysql -e "select host,user from user"
2.2、创建用户
用户是 MySQL 认证的基本元素。您只能通过正确的用户名和密码登录进 MySQL 数据库,然后授予用户不同的权限,以便让不同的用户可以进行不同的操作。
创建用户是精确控制权限的第一步。
在 MySQL 中,您可以使用 CREATE USER 语句在数据库服务器中创建一个新用户。
CREATE USER 语句的基本语法形式如下:
CREATE USER 用户名 [IDENTIFIED BY '密码'][,用户名 [IDENTIFIED BY '密码']];
- 用户名参数表示新建用户的账户,由 用户(User) 和 主机名(Host) 构成
[ ]表示可选,也就是说,可以指定用户登录时需要密码验证,也可以不指定密码验证,这样用户可以直接登录。不过,不指定密码的方式不安全,不推荐使用。如果指定密码值,这里需要使用IDENTIFIED BY指定明文密码值- CREATE USER语句可以同时创建多个用户
举例:
CREATE USER zhang3 IDENTIFIED BY '123123'; -- 默认host是 %
CREATE USER 'robofly'@'localhost' IDENTIFIED BY '123456';
2.3、修改用户
修改用户名:
UPDATE mysql.user SET USER='li4' WHERE USER='wang5';
FLUSH PRIVILEGES;
2.4、删除用户
方式1:使用 DROP 方式删除(推荐)
使用 DROP USER 语句来删除用户时,必须用于 DROP USER 权限。DROP USER 语句的基本语法形式如下:
DROP USER user[,user]…;
举例:
DROP USER li4 ; # 默认删除host为%的用户
DROP USER 'robofly'@'localhost';
方式2:使用 DELETE 方式删除
DELETE FROM mysql.user WHERE Host=’hostname’ AND User=’username’;FLUSH PRIVILEGES; # 执行完 DELETE 命令后要使用 FLUSH 命令来使用户生效
举例:
DELETE FROM mysql.user WHERE Host='localhost' AND User='Emily';
FLUSH PRIVILEGES;
注意:不推荐通过 DELETE FROM USER u WHERE USER='lizhengi' 进行删除,系统会有残留信息保留。而 DROP USER 命令会删除用户以及对应的权限,执行命令后你会发现 mysql.user 表和 mysql.db 表的相应记录都消失了。
2.5、设置当前用户密码
旧的写法如下 :
# 修改当前用户的密码:(MySQL5.7测试有效)
SET PASSWORD = PASSWORD('123456');
这里介绍推荐的写法 :使用 `ALTER USER· 命令来修改当前用户密码。
用户可以使用 ALTER 命令来修改自身密码,如下语句代表修改当前登录用户的密码。基本语法如下:
ALTER USER USER() IDENTIFIED BY 'new_password';
使用 SET 语句来修改当前用户密码。
使用 root 用户登录 MySQ L后,可以使用 SET 语句来修改密码,具体 SQL语句如下:
SET PASSWORD='new_password';
该语句会自动将密码加密后再赋给当前用户。
2.6、修改其他用户密码
使用 ALTER 语句来修改普通用户的密码。
可以使用 ALTER USER 语句来修改普通用户的密码。基本语法形式如下:
ALTER USER user [IDENTIFIED BY '新密码']
[,user[IDENTIFIED BY '新密码']]…;
使用 SET 命令来修改普通用户的密码。
使用 root 用户登录到 MySQL 服务器后,可以使用 SET 语句来修改普通用户的密码。SET 语句的代码如下:
SET PASSWORD FOR 'username'@'hostname'='new_password';
使用 UPDATE 语句修改普通用户的密码(不推荐)。
UPDATE MySQL.user SET authentication_string=PASSWORD("123456")
WHERE User = "username" AND Host = "hostname";
2.7、列出所有用户
要列出 MySQL 服务器的所有用户,您必须以管理员身份登录 MySQL 数据库服务器。在 mysql 客户端中,我们可以按照如下操作:
mysql -u root -p
输入 root 帐户的密码并按 Enter :
Enter password: ********
使用下面的 SELECT 语句 从 mysql 数据库中的 user 表中查询所有的用户:
SELECT user, host FROM mysql.user;
2.8、用户授权
当您创建了一个新用户之后,这个新的用户可以登录 MySQL 数据库服务器,但是他可能没有任何权限。只有在赋予他数据库和相关表的权限之后,他才可以进行选择数据库和查询等操作。
在 MySQL 中, GRANT 语句用于给用户赋予权限。
下面是 MySQL GRANT 的语法:
GRANT privilege_type [,privilege_type],..
ON privilege_object
TO user_account;
在这个语法中:
-
privilege_type权限类型。要赋予给用户的权限。 常用的包括:
ALL,SELECT,UPDATE,DELETE,ALTER,DROP以及INSERT等。 更详细的内容请参考:https://dev.mysql.com/doc/refman/8.0/en/privileges-provided.html#priv_all -
privilege_object权限对象。可以是所有对象,也可以是某个数据库中的所有对象,表 等。常用的包括:
*,*.*,db_name.*,db_name.table_name,table_name等。 -
user_account用户账户。 它使用
username@host的形式。
2.9、显示权限
MySQL 允许您使用 SHOW GRANTS 语句来显示分配给用户帐户或角色的权限。
以下是 SHOW GRANTS 语句的基本语法:
SHOW GRANTS
[FOR {user | role}
[USING role [, role] ...]]
在这个语法中:
- 首先,在
FOR关键字后指定要显示先前授予用户帐户或角色的权限的用户帐户或角色的名称。如果跳过FOR子句,则SHOW GRANTS返回当前用户的权限。 - 其次,使用
USING子句检查与用户角色相关的权限。您在USING子句中指定的角色必须事先授予用户。
除了可以显示当前用户的权限和角色,要执行 SHOW GRANTS 的语句,你需要有 mysql 系统数据库的 SELECT 权限。
2.10、撤销权限
下面说明了 REVOKE 撤销用户帐户的一项或多项权限的语句的基本语法:
REVOKEpriv1 [, priv2 [, ...] ]
ON [object_type] privilege_level
FROM user1 [, user2 [, ...]];
在这个语法中:
- 在
REVOKE关键字后指定要从用户帐户中撤销的以逗号分隔的权限列表。 - 在
ON关键字后指定权限的对象类型和权限级别;查看GRANT语句以获取有关权限级别的更多信息。 - 在
FROM子句中指定一个或多个您要撤销其权限的用户帐户。
请注意,要执行这种形式的 REVOKE 语句,您必须具有 GRANT OPTION 权限或必须具有您要撤销的权限。
3、MySQL 提供了哪些权限
MySQL 提供的权限列表如下所示(其中,All 或者 All privileges 代表权限列表中除 Grant option 权限之外的所有权限)。
mysql> show privileges;
+----------------------------+---------------------------------------+-------------------------------------------------------+
| Privilege | Context | Comment |
+----------------------------+---------------------------------------+-------------------------------------------------------+
| Alter | Tables | To alter the table |
| Alter routine | Functions,Procedures | To alter or drop stored functions/procedures |
| Create | Databases,Tables,Indexes | To create new databases and tables |
| Create routine | Databases | To use CREATE FUNCTION/PROCEDURE |
| Create role | Server Admin | To create new roles |
| Create temporary tables | Databases | To use CREATE TEMPORARY TABLE |
| Create view | Tables | To create new views |
| Create user | Server Admin | To create new users |
| Delete | Tables | To delete existing rows |
| Drop | Databases,Tables | To drop databases, tables, and views |
| Drop role | Server Admin | To drop roles |
| Event | Server Admin | To create, alter, drop and execute events |
| Execute | Functions,Procedures | To execute stored routines |
| File | File access on server | To read and write files on the server |
| Grant option | Databases,Tables,Functions,Procedures | To give to other users those privileges you possess |
| Index | Tables | To create or drop indexes |
| Insert | Tables | To insert data into tables |
| Lock tables | Databases | To use LOCK TABLES (together with SELECT privilege) |
| Process | Server Admin | To view the plain text of currently executing queries |
| Proxy | Server Admin | To make proxy user possible |
| References | Databases,Tables | To have references on tables |
| Reload | Server Admin | To reload or refresh tables, logs and privileges |
| Replication client | Server Admin | To ask where the slave or master servers are |
| Replication slave | Server Admin | To read binary log events from the master |
| Select | Tables | To retrieve rows from table |
| Show databases | Server Admin | To see all databases with SHOW DATABASES |
| Show view | Tables | To see views with SHOW CREATE VIEW |
| Shutdown | Server Admin | To shut down the server |
| Super | Server Admin | To use KILL thread, SET GLOBAL, CHANGE MASTER, etc. |
| Trigger | Tables | To use triggers |
| Create tablespace | Server Admin | To create/alter/drop tablespaces |
| Update | Tables | To update existing rows |
| Usage | Server Admin | No privileges - allow connect only |
| FLUSH_TABLES | Server Admin | |
| FLUSH_OPTIMIZER_COSTS | Server Admin | |
| INNODB_REDO_LOG_ENABLE | Server Admin | |
| APPLICATION_PASSWORD_ADMIN | Server Admin | |
| REPLICATION_APPLIER | Server Admin | |
| AUDIT_ADMIN | Server Admin | |
| TABLE_ENCRYPTION_ADMIN | Server Admin | |
| SERVICE_CONNECTION_ADMIN | Server Admin | |
| SESSION_VARIABLES_ADMIN | Server Admin | |
| FLUSH_USER_RESOURCES | Server Admin | |
| REPLICATION_SLAVE_ADMIN | Server Admin | |
| CLONE_ADMIN | Server Admin | |
| CONNECTION_ADMIN | Server Admin | |
| SYSTEM_USER | Server Admin | |
| ENCRYPTION_KEY_ADMIN | Server Admin | |
| RESOURCE_GROUP_ADMIN | Server Admin | |
| SHOW_ROUTINE | Server Admin | |
| XA_RECOVER_ADMIN | Server Admin | |
| PERSIST_RO_VARIABLES_ADMIN | Server Admin | |
| BINLOG_ADMIN | Server Admin | |
| BINLOG_ENCRYPTION_ADMIN | Server Admin | |
| BACKUP_ADMIN | Server Admin | |
| GROUP_REPLICATION_ADMIN | Server Admin | |
| SYSTEM_VARIABLES_ADMIN | Server Admin | |
| SET_USER_ID | Server Admin | |
| ROLE_ADMIN | Server Admin | |
| RESOURCE_GROUP_USER | Server Admin | |
| FLUSH_STATUS | Server Admin | |
| INNODB_REDO_LOG_ARCHIVE | Server Admin | |
+----------------------------+---------------------------------------+-------------------------------------------------------+
62 rows in set (0.00 sec)
4.1、根据Context字段内容划分权限
在上表所示的权限列表中,Context 字段显示了该权限的使用环境(或者叫权限的作用域)。根据 Context 字段内容的不同,权限分为如下三类。
管理权限:用于管理 MySQL 服务器的操作。这些权限是全局性的,授权范围不能是特定的数据库或数据库对象(只能使用 *.* 方式授予,不能使用 db.* 或 db.tb 方式)
|Create user|Event|Process|Proxy|Reload|Replication client|Replication slave|Show databases|Shutdown|Super|Create tablespace|Usage|Grant option|
数据库级别权限:授权范围可以是某数据库或某数据库中的所有对象,也可以是所有数据库(可以使用 *.* 代表全局对象;也可以使用 db.* 代表某库下的所有对象)
|Create|Create routine|Create temporary tables|Drop|Lock tables|References|
数据库对象级别权限:授权范围可以为数据库中的特定对象、数据库内给定类型的对象,也可以是所有数据库(*.* 代表全局对象,db.* 代表某库下的所有对象,db.tb 代表某库下的某对象)。
|Alter|Alter routine|Create view|Delete|Execute|Fil|Indexe|Insert|Select|Show view|Trigger|Update
4.2、按照经验划分
此外,通常还可以根据使用经验按照如下方式划分
开发权限:
|Delete|Insert|Select|Update|Alter|Create temporary tables|Trigger|Create view|Show view|Alter routine|Create routine|Execute|Index|Event|
管理权限——表级别(这里把带表级别的管理命令都归类为表级别):
|Create|File|Drop|Lock tables
管理权限——服务器级别
|Grant option|Create tablespace|Create user|Process|Proxy|Reload|Replication client|Replication slave|Show databases|Shutdown|Super|Usage|
4.3、具体权限作用介绍
-
All或All privileges:除Grant option之外,代表其他所有权限。 -
Alter:该权限用于使用ALTER TABLE语句来更改表的结构(除该权限之外,使用ALTER TABLE语句还需要有Create和Insert权限,使用ALTER TABLE RENAME语句需要有旧表上的Alter和Drop权限,新表上的Create和Insert权限)。 -
Alter routine:该权限用于修改或删除存储过程或存储函数。 -
Create:该权限用于创建库和表。 -
Create routine:该权限用于创建存储过程或存储函数。 -
Create tablespace:该权限用于创建、修改、删除表空间文件和日志组文件。 -
Create temporary tables:该权限用于创建临时表。使用CREATE TEMPORARY TABLE语句创建临时表,一旦某会话创建临时表成功后,服务器不会在该表上执行权限检查(因为其他会话看不见此表,创建此表的会话一旦断开,临时表就会自动删除)。即,创建临时表的会话可以对该临时表执行任何操作,例如DROP TABLE、INSERT、
UPDATE、SELECT等操作。 -
Create user:该权限用于使用ALTER USER、CREATE USER、DROP USER、RENAME USER、REVOKE ALL PRIVILEGES语句。 -
Create view:该权限用于使用CREATE VIEW语句。 -
Delete:该权限用于从数据库表中删除数据记录。 -
Drop:该权限用于删除现有库、表、视图等对象。另外,如果在分区表上使用ALTER TABLE … DROP PARTITION语句,则必须要有表的Drop权限,执行TRUNCATETABLE也需要有Drop权限(但要注意,如果将MySQL数据库的Drop权限授予用户,则该用户可以删除存储MySQL访问权限记录的数据库mysql)。 -
Event:该权限用于创建、更改、删除或查看Event Scheduler事件。 -
Execute:该权限用于执行存储过程或存储函数。 -
File:该权限用于执行LOAD DATA INFILE和SELECT … INTO OUTFILE语句以及LOAD_FILE()函数来读写服务器主机上的文件。具有File权限的用户可以读取服务器主机上的任何可读文件或MySQL服务器可读文件。(即,用户可读取datadir目录中的任何文件),File权限还使用户能够在 MySQL 服务器有写入权限的任何目录下创建新文件。所以,作为安全保护措施,服务器不会覆盖现有文件(即,在执行导出数据到文本时,如果文件名重复,则导出语句无法成功执行)。在 MySQL 5.7 版本中,可以使用
secure_file_priv系统变量限制File权限的读写目录。 -
Grant option:该权限用于授予或回收其他用户或自己拥有的权限。 -
Index:该权限用于创建或删除索引。Index权限适用于在已存在的表上使用CREATE INDEX语句,如果用户具有Create权限,则可以在CREATE TABLE语句中包含
索引定义语句。 -
Insert:该权限用于向表中插入数据记录行。对于ANALYZE TABLE、OPTIMIZE TABLE和REPAIR TABLE表维护语句也需要Insert权限。 -
Lock tables:该权限用于使用 LOCK TABLES 语句对表显式加锁,持有表锁的用户对该表有读写权限,未持有表锁的用户对该表的读写访问会被阻塞。 -
Process:该权限用于显示有关在服务器上执行的线程信息(即,关于会话正在执行的语句相关状态信息)。拥有该权限的用户在使用SHOW PROCESSLIST语句或mysqladmin processlist命令查看有关线程信息时,除可以看到自己的线程信息之外还可以查看到属于其他账号的线程信息。另外,使用SHOW ENGINE语句以及查看information_schema系统库中的相当一部分表也需要该权限。 -
Proxy:该权限使用户能够模仿(伪装、代理)另一个用户。 -
References:在创建外键约束时,该权限需要用户具有父表的References权限。 -
Reload:该权限允许用户使用FLUSH语句。拥有该权限的用户还可以使用与FLUSH操作等效的mysqladmin子命令flush-hosts、flush-logs、flush-privileges、flushstatus、flush-tables、flush-threads、refresh和reload。其中,reload子命令会通知服务器将权限表重新加载到内存中;flush-privileges子命令的作用与reload相同;refresh子命令会通知服务器关闭并重新打开日志文件且刷新所有表。其他flush-xxx子命令也会执行类似于刷新的功能,这些子命令刷新的对象更具体。例如,只想刷新日志文件,则使用flush-logs子命令。 -
Replication client:该权限用于使用SHOW MASTER STATUS、SHOW SLAVE STATUS和SHOW BINARY LOGS语句。 -
Replication slave:该权限用于从从库服务器连接到主库服务器并请求主库的 binlog 日志。如果没有此权限,从库将无法请求主库数据库变更的 binlog 日志。 -
Select:该权限用于从数据库表中查询数据行记录。使用SELECT语句只有实际从表中检索行记录时才需要Select权限。但某些SELECT语句不需要访问表,并且可以在没有任何数据库权限的情况下执行。例如,使用SELECT语句拼接的常量表达式:SELECT 1 + 1; SELECT PI()* 2;。另外,使用UPDATE或DELETE语句,当使用WHERE子句指定了某字段的条件值时,也需要该字段的SELECT权限;否则,你会发现可以使用UPDATE不带WHERE子句更新全表,却不能使用WHERE语句指定更新某些行记录。对基表或视图使用EXPLAIN语句,也需要用户对表或视图具有该权限。 -
Show databases:该权限用于执行SHOW DATABASE语句,对于没有此权限的用户,则只能看到其具有对应访问权限的数据库列表。如果服务器使用了–skip-show database选项启动,则没有该权限的用户即使对某库有其他访问权限,也不能使用SHOW DATABASES语句查看任何数据库列表(会报错:ERROR 1227 (42000): Access denied; you need (at least one of) the SHOW DATABASES privilege(s) for this operation)。 -
`Show view:该权限用于执行SHOW CREATE VIEW语句。对视图使用EXPLAIN语句也需要此权限。
-
Shutdown:该权限用于执行SHUTDOWN语句、mysqladmin shutdown命令和mysql_shutdown()C API 函数。 -
Super:该权限用于进行如下操作和服务器行为:- 修改全局系统配置变量需要此权限。对于某些系统变量,修改会话级别的系统配置变量也需要
Super权限(如果修改会话级别的系统配置变量需要Super权限,在变量的解释文档中会进行说明,例如binlog_format、sql_log_bin和sql_log_off); - 对全局事务特征的更改(
START TRANSACTION语句); - 从库服务器用于执行启动和停止复制的语句,包括组复制;
- 从库服务器用于执行
CHANGE MASTER TO和CHANGE REPLICATION FILTER语句; - 执行
PURGE BINARY LOGS和BINLOG语句; - 如果视图或存储程序定义了
DEFINER属性,则拥有Super权限的用户就算不是该视图或存储程序的创建者,也仍然可以执行该视图或存储程序; - 执行
CREATE SERVER、ALTER SERVER和DROP SERVER语句; - 执行
mysqladmin debug命令; - 用于
InnoDB key自旋; - 通过执行
DES_ENCRYPT()函数启用读取 DES 密钥文件; - 执行用户自定义函数时启用版本令牌;
- 超过了最大连接数之后,具有
Super权限的账户还可以执行的操作有:- 使用
KILL语句或mysqladmin kill命令来终止属于其他账户的线程(注意:无论是否拥有Super权限,用户总是可以kill自己的线程); - 即使服务器总连接数达到
max_connections系统变量定义的值,服务器也会接受来自具Super权限的用户的一个额外连接。 - 即使服务器启用了
read_only系统变量,具有Super权限的用户也仍然可以执行数据更新,包括显式的操作更新和隐式的操作更新(账户管理语句GRANT和REVOKE等触发的表更新)。 - 具有
Super权限的用户连接服务器时,服务器不执行init_connect系统变量指定的内容。 - 处于脱机模式(已启用
offline_mode系统变量)的服务器不会中断具有Super权限的用户的连接,且仍然接受具有Super权限的用户的新连接请求。
- 使用
- 如果启用了二进制日志记录功能,则用户可能还需要 Super 权限才能创建或更改存储的功能。
- 修改全局系统配置变量需要此权限。对于某些系统变量,修改会话级别的系统配置变量也需要
-
Trigger:该权限用于触发器的操作。用户必须拥有某表的该权限才能针对该表创建、删除、执行或查看其触发器。 -
Update:该权限用于执行对数据库表中的数据行更新操作。 -
Usage:该权限代表用户“无任何权限”。全局级别权限,拥有该权限的用户可以登录到数据库服务器中,但在默认配置下除能够执行部分show命令之外,其他任何数据变更和数据库查询操作都无法执行。
Ps:只向用户授予其需要的权限,不要授予额外的多余的权限,特别是管理权限,例如 File、Grantoption、Alter、Shutdown、Process、Super 等。
相关文章:
【MySQL 系列】MySQL 语句篇_DCL 语句
DCL( Data Control Language,数据控制语言)用于对数据访问权限进行控制,定义数据库、表、字段、用户的访问权限和安全级别。主要关键字包括 GRANT、 REVOKE 等。 文章目录 1、MySQL 中的 DCL 语句1.1、数据控制语言--DCL1.2、MySQ…...
什么是序列化?为什么需要序列化?
1、典型回答 序列化(Serialization)序列化是将对象转换为可存储或传输的形式的过程(例如: 将对象转换为字节流) 反序列化(Deserialization) 是将序列化后的数据(例如: 二进制文件)转换回原始对象的过程。通过反序列化,可以从存储介质 (如磁盘、数据库) 或通过网络…...
Linux本地搭建FastDFS系统
文章目录 前言1. 本地搭建FastDFS文件系统1.1 环境安装1.2 安装libfastcommon1.3 安装FastDFS1.4 配置Tracker1.5 配置Storage1.6 测试上传下载1.7 与Nginx整合1.8 安装Nginx1.9 配置Nginx 2. 局域网测试访问FastDFS3. 安装cpolar内网穿透4. 配置公网访问地址5. 固定公网地址5.…...
docker和docker-compose安装
一、docker安装 1、移除旧版本 依次执行如下命令移除旧版本docker,如未安装过无需执行 yum -y remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-selinux docker-engine-selinux…...
深入理解Spring的ApplicationContext:案例详解与应用
深入理解Spring的ApplicationContext:案例详解与应用 在Spring框架的丰富生态中,ApplicationContext扮演着至关重要的角色。作为BeanFactory的扩展,ApplicationContext不仅继承了其所有功能,还引入了更多高级特性,使得…...
6.Java并发编程—深入剖析Java Executors:探索创建线程的5种神奇方式
Executors快速创建线程池的方法 Java通过Executors 工厂提供了5种创建线程池的方法,具体方法如下 方法名描述newSingleThreadExecutor()创建一个单线程的线程池,该线程池中只有一个工作线程。所有任务按照提交的顺序依次执行,保证任务的顺序性…...
英语阅读挑战
英语阅读真是令人头痛的东西。可怜的子航想利用寒假时间突破英语难题。当他拿到一篇英语阅读时,他很好奇作者最喜欢用那些字母。 输入 一句30词以内的英语句子 输出 统计每个字母出现的次数 样例输入 复制 However,the British dont have a history of exporting th…...
备战蓝桥之思维
平台重叠真的坑 给你一句样例,如果你觉得自己的代码没问题那就试试吧 2 1 1 3 1 0 4 正确答案 0 0 0 0 P1105 平台 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) import java.awt.Checkbox; import java.awt.PageAttributes.OriginType; import java.io.B…...
09 string的实现
注意 实现仿cplus官网的的string类,对部分主要功能实现 实现 头文件 #pragma once #include <iostream> #include <assert.h> #include <string>namespace mystring {class string{friend std::ostream& operator<<(std::ostream&a…...
Git 进行版本控制时,配置 user.name 和 user.email
在使用 Git 进行版本控制时,配置 user.name 和 user.email 是一个非常重要的初始步骤,但不是绝对必须的。这两个配置项定义了当你进行提交(commit)时用于标识提交者的信息。 为什么建议配置 user.name 和 user.email 标识提交者…...
传统开发读写优化与HBase
目录: 一、传统开发数据读写性能优化 1. Mysql 分表、主从复制与读写分离 2. Redis(缓存型数据库)主从复制与读写分离 二、HBase 一、传统开发数据读写性能优化 1、Mysql 分表、主从复制与读写分离 mysql分库分表方案 一种分表方案:设置表A 表B 表A 自增列从1开始…...
【OpenGL实现 03】纹理贴图原理和实现
目录 一、说明二、纹理贴图原理2.1 纹理融合原理2.2 UV坐标原理 三、生成纹理对象3.1 需要在VAO上绑定纹理坐标3.2 纹理传递3.3 纹理buffer生成 四、代码实现:五、着色器4.1 片段4.2 顶点 五、后记 一、说明 本篇叙述在画出图元的时候,如何贴图纹理图片…...
FDU 2021 | 二叉树关键节点的个数
文章目录 1. 题目描述2. 我的尝试 1. 题目描述 给定一颗二叉树,树的每个节点的值为一个正整数。如果从根节点到节点 N 的路径上不存在比节点 N 的值大的节点,那么节点 N 被认为是树上的关键节点。求树上所有的关键节点的个数。请写出程序,并…...
精读《React Conf 2019 - Day2》
1 引言 这是继 精读《React Conf 2019 - Day1》 之后的第二篇,补充了 React Conf 2019 第二天的内容。 2 概述 & 精读 第二天的内容更为精彩,笔者会重点介绍比较干货的部分。 Fast refresh Fast refresh 是更好的 react-hot-loader 替代方案&am…...
向ChatGPT高效提问模板
PS: ChatGPT无限次数,无需魔法,登录即可使用,网页打开下面 tj4.mnsfdx.net [点击跳转链接](http://tj4.mnsfdx.net/) 我想请你XXXX,请问我应该如何向你提问才能得到最满意的答案,请提供全面、详细的建议,针对每一个建…...
android metaRTC编译
参考文章: metaRTC3.0稳定版本编译指南_metartc 编译-CSDN博客 源码下载: Releases metartc/metaRTC GitHub 版本v6.0-b4即可...
HDFS面试重点
文章目录 1. HDFS的架构2. HDFS的读写流程3.HDFS中,文件为什么以block块的方式存储? 1. HDFS的架构 HDFS的架构可以分为以下几个主要组件: NameNode(名称节点): NameNode是HDFS的关键组件之一,…...
Java中的IO流是什么?
Java中的IO流(Input/Output Stream)是Java编程语言中用于处理输入和输出操作的一种重要机制。在Java中,IO流被用来读取和写入数据,这些数据可以来自各种来源,如文件、网络连接、内存缓冲区等。Java的IO流提供了丰富的类…...
Spring boot 集成netty实现websocket通信
一、netty介绍 Netty 是一个基于NIO的客户、服务器端的编程框架,使用Netty 可以确保你快速和简单的开发出一个网络应用,例如实现了某种协议的客户、服务端应用。Netty相当于简化和流线化了网络应用的编程开发过程,例如:基于TCP和U…...
数码管的动态显示(二)
1.原理 这个十六进制是右边的dp为高位。 数码管的动态显示,在第一个计数周期显示个位,在第二个周期显示十位,在第三个周期显示百位由于人眼的视觉和数码管的特性,感觉就是显示了234,每个数码管的显示需要从输入的数据里…...
【OSG学习笔记】Day 18: 碰撞检测与物理交互
物理引擎(Physics Engine) 物理引擎 是一种通过计算机模拟物理规律(如力学、碰撞、重力、流体动力学等)的软件工具或库。 它的核心目标是在虚拟环境中逼真地模拟物体的运动和交互,广泛应用于 游戏开发、动画制作、虚…...
Appium+python自动化(十六)- ADB命令
简介 Android 调试桥(adb)是多种用途的工具,该工具可以帮助你你管理设备或模拟器 的状态。 adb ( Android Debug Bridge)是一个通用命令行工具,其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利,如安装和调试…...
Mybatis逆向工程,动态创建实体类、条件扩展类、Mapper接口、Mapper.xml映射文件
今天呢,博主的学习进度也是步入了Java Mybatis 框架,目前正在逐步杨帆旗航。 那么接下来就给大家出一期有关 Mybatis 逆向工程的教学,希望能对大家有所帮助,也特别欢迎大家指点不足之处,小生很乐意接受正确的建议&…...
Python爬虫实战:研究feedparser库相关技术
1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的信息资源。RSS(Really Simple Syndication)作为一种标准化的信息聚合技术,被广泛用于网站内容的发布和订阅。通过 RSS,用户可以方便地获取网站更新的内容,而无需频繁访问各个网站。 然而,互联网…...
1688商品列表API与其他数据源的对接思路
将1688商品列表API与其他数据源对接时,需结合业务场景设计数据流转链路,重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点: 一、核心对接场景与目标 商品数据同步 场景:将1688商品信息…...
linux 错误码总结
1,错误码的概念与作用 在Linux系统中,错误码是系统调用或库函数在执行失败时返回的特定数值,用于指示具体的错误类型。这些错误码通过全局变量errno来存储和传递,errno由操作系统维护,保存最近一次发生的错误信息。值得注意的是,errno的值在每次系统调用或函数调用失败时…...
2025盘古石杯决赛【手机取证】
前言 第三届盘古石杯国际电子数据取证大赛决赛 最后一题没有解出来,实在找不到,希望有大佬教一下我。 还有就会议时间,我感觉不是图片时间,因为在电脑看到是其他时间用老会议系统开的会。 手机取证 1、分析鸿蒙手机检材&#x…...
【RockeMQ】第2节|RocketMQ快速实战以及核⼼概念详解(二)
升级Dledger高可用集群 一、主从架构的不足与Dledger的定位 主从架构缺陷 数据备份依赖Slave节点,但无自动故障转移能力,Master宕机后需人工切换,期间消息可能无法读取。Slave仅存储数据,无法主动升级为Master响应请求ÿ…...
让AI看见世界:MCP协议与服务器的工作原理
让AI看见世界:MCP协议与服务器的工作原理 MCP(Model Context Protocol)是一种创新的通信协议,旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天,MCP正成为连接AI与现实世界的重要桥梁。…...
3403. 从盒子中找出字典序最大的字符串 I
3403. 从盒子中找出字典序最大的字符串 I 题目链接:3403. 从盒子中找出字典序最大的字符串 I 代码如下: class Solution { public:string answerString(string word, int numFriends) {if (numFriends 1) {return word;}string res;for (int i 0;i &…...
