【MySQL 系列】MySQL 语句篇_DCL 语句

news/2024/5/26 21:04:57/文章来源:https://blog.csdn.net/weixin_45187434/article/details/136664190

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 系统库提供了 userdbtables_privcolumns_privprocs_privproxies_priv 几个表,用于存放不同权限范围的用户账号相关数据,这些表共同组成了 MySQL 的访问权限控制系统。

MySQL 访问权限控制系统的主要功能是对从给定主机连接到 MySQL 服务器的用户进行身份验证,并校验该用户在该服务器中的数据库对象访问权限(如 SELECTINSERTUPDATEDELETE)。另外,还包括管理匿名用户访问和授予特定的 MySQL 权限的功能(如执行 LOAD DATA INFILE 语句和管理操作权限等)。

MySQL 访问权限控制系统的用户界面由几条 SQL 语句组成,如 CREATE USERGRANTREVOKE

在服务器内部,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、具体权限作用介绍
  • AllAll privileges:除 Grant option 之外,代表其他所有权限。

  • Alter:该权限用于使用 ALTER TABLE 语句来更改表的结构(除该权限之外,使用 ALTER TABLE 语句还需要有 CreateInsert 权限,使用 ALTER TABLE RENAME 语句需要有旧表上的 AlterDrop 权限,新表上的 CreateInsert权限)。

  • Alter routine:该权限用于修改或删除存储过程或存储函数。

  • Create:该权限用于创建库和表。

  • Create routine:该权限用于创建存储过程或存储函数。

  • Create tablespace:该权限用于创建、修改、删除表空间文件和日志组文件。

  • Create temporary tables:该权限用于创建临时表。使用 CREATE TEMPORARY TABLE 语句创建临时表,一旦某会话创建临时表成功后,服务器不会在该表上执行权限检查(因为其他会话看不见此表,创建此表的会话一旦断开,临时表就会自动删除)。即,创建临时表的会话可以对该临时表执行任何操作,例如 DROP TABLEINSERT
    UPDATESELECT 等操作。

  • Create user:该权限用于使用 ALTER USERCREATE USERDROP USERRENAME USERREVOKE 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 INFILESELECT … 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 TABLEOPTIMIZE TABLEREPAIR TABLE 表维护语句也需要 Insert 权限。

  • Lock tables:该权限用于使用 LOCK TABLES 语句对表显式加锁,持有表锁的用户对该表有读写权限,未持有表锁的用户对该表的读写访问会被阻塞。

  • Process:该权限用于显示有关在服务器上执行的线程信息(即,关于会话正在执行的语句相关状态信息)。拥有该权限的用户在使用 SHOW PROCESSLIST 语句或 mysqladmin processlist 命令查看有关线程信息时,除可以看到自己的线程信息之外还可以查看到属于其他账号的线程信息。另外,使用 SHOW ENGINE 语句以及查看 information_schema 系统库中的相当一部分表也需要该权限。

  • Proxy:该权限使用户能够模仿(伪装、代理)另一个用户。

  • References:在创建外键约束时,该权限需要用户具有父表的 References 权限。

  • Reload:该权限允许用户使用 FLUSH 语句。拥有该权限的用户还可以使用与 FLUSH 操作等效的 mysqladmin 子命令 flush-hostsflush-logsflush-privilegesflushstatusflush-tablesflush-threadsrefreshreload。其中,reload 子命令会通知服务器将权限表重新加载到内存中;flush-privileges 子命令的作用与 reload 相同;refresh子命令会通知服务器关闭并重新打开日志文件且刷新所有表。其他 flush-xxx 子命令也会执行类似于刷新的功能,这些子命令刷新的对象更具体。例如,只想刷新日志文件,则使用 flush-logs 子命令。

  • Replication client:该权限用于使用 SHOW MASTER STATUSSHOW SLAVE STATUS和SHOW BINARY LOGS 语句。

  • Replication slave:该权限用于从从库服务器连接到主库服务器并请求主库的 binlog 日志。如果没有此权限,从库将无法请求主库数据库变更的 binlog 日志。

  • Select:该权限用于从数据库表中查询数据行记录。使用 SELECT 语句只有实际从表中检索行记录时才需要 Select 权限。但某些 SELECT 语句不需要访问表,并且可以在没有任何数据库权限的情况下执行。例如,使用 SELECT 语句拼接的常量表达式:SELECT 1 + 1; SELECT PI()* 2;。另外,使用 UPDATEDELETE 语句,当使用 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_formatsql_log_binsql_log_off);
    • 对全局事务特征的更改(START TRANSACTION 语句);
    • 从库服务器用于执行启动和停止复制的语句,包括组复制;
    • 从库服务器用于执行 CHANGE MASTER TOCHANGE REPLICATION FILTER 语句;
    • 执行 PURGE BINARY LOGSBINLOG 语句;
    • 如果视图或存储程序定义了 DEFINER 属性,则拥有 Super 权限的用户就算不是该视图或存储程序的创建者,也仍然可以执行该视图或存储程序;
    • 执行 CREATE SERVERALTER SERVERDROP SERVER 语句;
    • 执行 mysqladmin debug 命令;
    • 用于 InnoDB key 自旋;
    • 通过执行 DES_ENCRYPT() 函数启用读取 DES 密钥文件;
    • 执行用户自定义函数时启用版本令牌;
    • 超过了最大连接数之后,具有 Super 权限的账户还可以执行的操作有:
      • 使用 KILL 语句或 mysqladmin kill 命令来终止属于其他账户的线程(注意:无论是否拥有 Super 权限,用户总是可以 kill 自己的线程);
      • 即使服务器总连接数达到 max_connections 系统变量定义的值,服务器也会接受来自具 Super 权限的用户的一个额外连接。
      • 即使服务器启用了 read_only 系统变量,具有 Super 权限的用户也仍然可以执行数据更新,包括显式的操作更新和隐式的操作更新(账户管理语句 GRANTREVOKE 等触发的表更新)。
      • 具有 Super 权限的用户连接服务器时,服务器不执行 init_connect 系统变量指定的内容。
      • 处于脱机模式(已启用 offline_mode 系统变量)的服务器不会中断具有 Super 权限的用户的连接,且仍然接受具有 Super 权限的用户的新连接请求。
    • 如果启用了二进制日志记录功能,则用户可能还需要 Super 权限才能创建或更改存储的功能。
  • Trigger:该权限用于触发器的操作。用户必须拥有某表的该权限才能针对该表创建、删除、执行或查看其触发器。

  • Update:该权限用于执行对数据库表中的数据行更新操作。

  • Usage:该权限代表用户“无任何权限”。全局级别权限,拥有该权限的用户可以登录到数据库服务器中,但在默认配置下除能够执行部分show命令之外,其他任何数据变更和数据库查询操作都无法执行。

Ps:只向用户授予其需要的权限,不要授予额外的多余的权限,特别是管理权限,例如 FileGrantoptionAlterShutdownProcessSuper 等。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_1005889.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Long-term Correlation Tracking LCT 目标跟踪算法源码运行

资源 LCT-tracker项目地址VLFeat官网OpenCV下载地址OTB50数据集百度网盘资源 参考博客 一步一步教你跑lct-tracker(Win10Matlab 2016bVisual Studio 2015)LCT代码跑起来先文章思路总结 正文 1. 环境配置 我的环境:Win11、Visual Studio…

LF253DT运算放大器芯片中文资料规格书PDF数据手册引脚图图片参数价格功能

产品概述: 这些电路是高速JFET输入双运算放大器,在单片集成电路中集成了匹配良好的高压JFET和双极晶体管。 这些器件具有高转换速率、低输入偏置和失调电流以及低失调电压温度系数。 产品功能: 无闩锁操作内部频率补偿低功耗低输入偏置和…

JS数组相关知识

获取数组的最大值/最小值&#xff1a; let arrary [2,5,4] let max arrary[0] for(let i 0;i<arrary.length;i){if(arrary[i]>max){max arrary[i]} }console.log(max);//查询数组最小值let arr [2,21,34,23,45] let min arr[0] for(let i 0;i<arr.length;i){if…

24考研调剂 | 武汉纺织大学

教育部重点实验室招收24年调剂生&#xff0c;材料、化学、机械工程、计算机、力学等相关专业 考研调剂招生信息 学校:武汉纺织大学 专业:工学->材料科学与工程 年级:2024 招生人数:100 招生状态:正在招生中 联系方式:********* (为保护个人隐私,联系方式仅限APP查看)…

JavaEE:网络编程

网络编程&#xff1a;通过代码完成基于网络的跨主机通信 跨主机通信方式&#xff1a; 1.TCP/IP网络 2.蓝牙通信 3.近场通信NFC 4.毫米波通信&#xff1a;功率高&#xff0c;带宽高&#xff0c;抗干扰能力差 其中TCP/IP网络是日常编程中最常涉及到的&#xff0c;最通用的跨主机通…

吴恩达机器学习-可选实验:使用ScikitLearn进行线性回归(Linear Regression using Scikit-Learn)

文章目录 实验一目标工具梯度下降加载数据集缩放/规范化训练数据创建并拟合回归模型查看参数作出预测绘制结果 恭喜 实验二目标工具线性回归&#xff0c;闭式解加载数据集创建并拟合模型查看参数作出预测 第二个例子恭喜 有一个开源的、商业上可用的机器学习工具包&#xff0c;…

day42 动态规划part4

先遍历物品还是先遍历背包二刷再考虑吧。累了&#xff0c;不想停留太久。 背包问题 二维 &#xff08;卡码网题目&#xff09; 各种解释&#xff1a; 要理解的是这个表格每一个格子都是当前所处情况的最大价值&#xff0c;我们用已经推导出的最大价值来推导当前情况的最大价值…

用chatgpt写论文重复率高吗?如何降低重复率?

ChatGPT写的论文重复率很低 ChatGPT写作是基于已有的语料库和文献进行训练的&#xff0c;因此在写作过程中会不可避免地引用或借鉴已有的研究成果和观点。同时&#xff0c;由于ChatGPT的表述方式和写作风格与人类存在一定的差异&#xff0c;也可能会导致论文与其他文章相似度高…

LiveGBS流媒体服务器中海康摄像头GB28181公网语音对讲、语音喊话的配置

LiveGBS海康摄像头国标语音对讲大华摄像头国标语音对讲GB28181语音对讲需要的设备及服务准备 1、背景2、准备2.1、服务端必备条件&#xff08;注意&#xff09;2.2、准备语音对讲设备2.2.1、不支持跨网对讲示例2.2.2、 支持跨网对讲示例 3、开启音频开始对讲4、搭建GB28181视频…

Linux学习笔记(一)Linux基本指令

文章目录 前言目录常见命令1. pwd 打印当前所在路径2. cd 改变路径、切换路径3. 家目录 回到顶级目录4. 当前路径和上一路径5. 上一次路径6. 绝对路径和相对路径7. ls 列出目录内容8. mkdir 创建目录9. rmdir 删除目录10. touch 创建文件11. mv 修改文件目录、移动路径12. cp 复…

鸿蒙Harmony应用开发—ArkTS声明式开发(基础手势:RemoteWindow)

远程控制窗口组件&#xff0c;可以通过此组件控制应用窗口&#xff0c;提供启动退出过程中控件动画和应用窗口联动动画的能力。 说明&#xff1a; 该组件从API Version 9开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。 该组件为系统接口。…

【Axure高保真原型】下拉列表切换图表

今天和大家分享通过下拉列表动态切换统计图表的原型模板&#xff0c;我们可以通过下拉列表选择要显示的图表&#xff0c;包括柱状图、条形图、饼图、环形图、折线图、曲线图、面积图、阶梯图、雷达图&#xff1b;而且图表数据可以在左侧表格中动态维护&#xff0c;包括增加修改…

基于php的用户登录实现(v2版)(持续迭代)

目录 版本说明 数据库连接 登录页面&#xff1a;login.html 登录处理实现&#xff1a;login.php 用户欢迎页面&#xff1a;welcome.php 密码修改页面&#xff1a;change_password.html 修改执行&#xff1a;change_password.php 用户注册页面&#xff1a;register.html …

lvs+keepalive

虚拟路由冗余协议(Virtual Router Redundancy Protocol&#xff0c;简称VRRP) VRRP能够在不改变组网的情况下&#xff0c;将多台路由器虚拟成一个虚拟路由器&#xff0c;通过配置虚拟路由器的IP地址为默认网关&#xff0c;实现网关的备份。 协议版本: VRRPv2&#xff08;常用&…

网络通信另个角度的认识(进程间通信),端口号(为什么要有,和pid的关系,分类,如何封装,和进程的定位原理+对应关系),客户端如何拿到服务端的port

目录 另一个角度认识网络通信 端口号 引入 -- 为什么要有端口号 问题 解决 端口号和pid 举例 介绍 分类 知名端口 注册端口 动态端口 客户端如何知道服务端的端口号 封装端口号 定位原理 进程和端口号的对应关系 数据如何被上层进程读到 另一个角度认识网络…

深入理解Vue3中利用mitt:实现轻量级事件监听与触发

在 Vue3 中&#xff0c;父组件和子组件之间可以通过一些方式进行通信。其中&#xff0c;父组件向子组件通信主要有两种方式&#xff1a;传值和调用子组件的方法。 一、父组件向子组件传值 当父组件需要向子组件传递数据时&#xff0c;可以通过属性绑定的方式来实现。父组件可…

【Redis】redis持久化

redis 持久化 Redis是内存数据库&#xff0c;数据都是存储在内存中&#xff0c;为了避免进程退出导致数据的永久丢失&#xff0c;需要定期将Redis中的数据以某种形式(数据或命令)从内存保存到硬盘&#xff1b;当下次Redis重启时&#xff0c;利用持久化文件实现数据恢复。除此之…

leetcode 热题 100_删除链表的倒数第 N 个结点

题解一&#xff1a; 递归&#xff1a;利用递归栈逆向遍历链表&#xff0c;并用全局变量记录当前遍历的是倒数第几位节点&#xff0c;当遍历到待删节点的上一位节点时&#xff0c;node.nextnode.next.next删除待删节点。需要注意当删除的是头节点时&#xff0c;直接return head.…

Codeforces Round 933 (Div. 3) A~D

比赛链接 : codeforces.com/contest/1941 A . Rudolf and the Ticket 直接暴力即可 ; #include<bits/stdc.h> #define IOS ios::sync_with_stdio(0);cin.tie(0);cout.tie(0); #define endl \n #define lowbit(x) (x&(-x)) #define sz(a) (int)a.size() #define p…

Docker进阶:深入了解容器数据卷

Docker进阶&#xff1a;深入了解容器数据卷 一、前言二、容器数据卷的作用三、容器数据卷的使用方法四、实战--使用docker部署前端项目&#xff08;数据卷挂载&#xff09;4.1 重要&#xff1a;准备工作&#xff0c;先在本地创建挂载目录4.2 启动一个临时的nginx容器&#xff0…