【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,每个数码管的显示需要从输入的数据里…...
Vue记事本应用实现教程
文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展:显示创建时间8. 功能扩展:记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...

基于FPGA的PID算法学习———实现PID比例控制算法
基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容:参考网站: PID算法控制 PID即:Proportional(比例)、Integral(积分&…...

转转集团旗下首家二手多品类循环仓店“超级转转”开业
6月9日,国内领先的循环经济企业转转集团旗下首家二手多品类循环仓店“超级转转”正式开业。 转转集团创始人兼CEO黄炜、转转循环时尚发起人朱珠、转转集团COO兼红布林CEO胡伟琨、王府井集团副总裁祝捷等出席了开业剪彩仪式。 据「TMT星球」了解,“超级…...

srs linux
下载编译运行 git clone https:///ossrs/srs.git ./configure --h265on make 编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/srs.log 开放端口 默认RTMP接收推流端口是1935,SRS管理页面端口是8080,可…...

ElasticSearch搜索引擎之倒排索引及其底层算法
文章目录 一、搜索引擎1、什么是搜索引擎?2、搜索引擎的分类3、常用的搜索引擎4、搜索引擎的特点二、倒排索引1、简介2、为什么倒排索引不用B+树1.创建时间长,文件大。2.其次,树深,IO次数可怕。3.索引可能会失效。4.精准度差。三. 倒排索引四、算法1、Term Index的算法2、 …...

selenium学习实战【Python爬虫】
selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...
DeepSeek 技术赋能无人农场协同作业:用 AI 重构农田管理 “神经网”
目录 一、引言二、DeepSeek 技术大揭秘2.1 核心架构解析2.2 关键技术剖析 三、智能农业无人农场协同作业现状3.1 发展现状概述3.2 协同作业模式介绍 四、DeepSeek 的 “农场奇妙游”4.1 数据处理与分析4.2 作物生长监测与预测4.3 病虫害防治4.4 农机协同作业调度 五、实际案例大…...

面向无人机海岸带生态系统监测的语义分割基准数据集
描述:海岸带生态系统的监测是维护生态平衡和可持续发展的重要任务。语义分割技术在遥感影像中的应用为海岸带生态系统的精准监测提供了有效手段。然而,目前该领域仍面临一个挑战,即缺乏公开的专门面向海岸带生态系统的语义分割基准数据集。受…...
NPOI Excel用OLE对象的形式插入文件附件以及插入图片
static void Main(string[] args) {XlsWithObjData();Console.WriteLine("输出完成"); }static void XlsWithObjData() {// 创建工作簿和单元格,只有HSSFWorkbook,XSSFWorkbook不可以HSSFWorkbook workbook new HSSFWorkbook();HSSFSheet sheet (HSSFSheet)workboo…...

论文阅读:LLM4Drive: A Survey of Large Language Models for Autonomous Driving
地址:LLM4Drive: A Survey of Large Language Models for Autonomous Driving 摘要翻译 自动驾驶技术作为推动交通和城市出行变革的催化剂,正从基于规则的系统向数据驱动策略转变。传统的模块化系统受限于级联模块间的累积误差和缺乏灵活性的预设规则。…...