Mysql权限-系统表user,db,talbes_priv,columns_priv详解
一、MySQL 权限场景
- 可以根据登录用户限制用户访问资源(库、表)
- 可以根据登录用户限制用户的操作权限(能对哪些库、表执行增删改查操作)
- 可以指定用户登录IP或者域名
- 可以限制用户权限分配
二、Mysql五个层级权限级别分析
Mysql权限级别分为了五个层级,并且每个级别的权限都对应着不同的表,这些表都存在于mysql库下,在Mysql官方文档中有详细介绍权限的概念MYSQL官方中文文档,以下将简单讲述这五个级别的作用和范围。
(1)全局级别
全局权限适用于一个给定服务器中的所有数据库。这些权限存储在mysql.user表中。GRANT ALL ON *.*和REVOKE ALL ON *.*用于授予和撤销全局权限。
在mysql数据库里,存在一张user表,mysql中所有的用户都是存放在user表中,user表的字段可以分为四大类(用户列、权限列、安全例、资源控制列)
(1.1) USER表的组成结构
通过查看user表结构可以看出,user表保存了用户的登录信息和权限,这个权限是全局性的,针对的是全部数据库资源,换句话说,只要user表里的某个权限是Y(Y表示YES,N表NO),那么这个权限可以作用于全部数据库资源。
表名称:user | 描述:Users and global privileges | |||||||
字符集:utf8 | ||||||||
数据库:mysql@rm-d2xt21zt5fp4k7m94.mysql.rds.ops.zzub-chinaunicom.cn:3306【zzzhjc-master-mysql】 | ||||||||
列名 | 类型 | 长度 | 精度 | 标度 | 是否为空 | 缺省值 | 描述 | 安全级别 |
Host | char(60) | 60 | N | 低敏感 | ||||
User | char(32) | 32 | N | 低敏感 | ||||
Select_priv | enum('N','Y') | 1 | N | N | 低敏感 | |||
Insert_priv | enum('N','Y') | 1 | N | N | 低敏感 | |||
Update_priv | enum('N','Y') | 1 | N | N | 低敏感 | |||
Delete_priv | enum('N','Y') | 1 | N | N | 低敏感 | |||
Create_priv | enum('N','Y') | 1 | N | N | 低敏感 | |||
Drop_priv | enum('N','Y') | 1 | N | N | 低敏感 | |||
Reload_priv | enum('N','Y') | 1 | N | N | 低敏感 | |||
Shutdown_priv | enum('N','Y') | 1 | N | N | 低敏感 | |||
Process_priv | enum('N','Y') | 1 | N | N | 低敏感 | |||
File_priv | enum('N','Y') | 1 | N | N | 低敏感 | |||
Grant_priv | enum('N','Y') | 1 | N | N | 低敏感 | |||
References_priv | enum('N','Y') | 1 | N | N | 低敏感 | |||
Index_priv | enum('N','Y') | 1 | N | N | 低敏感 | |||
Alter_priv | enum('N','Y') | 1 | N | N | 低敏感 | |||
Show_db_priv | enum('N','Y') | 1 | N | N | 低敏感 | |||
Super_priv | enum('N','Y') | 1 | N | N | 低敏感 | |||
Create_tmp_table_priv | enum('N','Y') | 1 | N | N | 低敏感 | |||
Lock_tables_priv | enum('N','Y') | 1 | N | N | 低敏感 | |||
Execute_priv | enum('N','Y') | 1 | N | N | 低敏感 | |||
Repl_slave_priv | enum('N','Y') | 1 | N | N | 低敏感 | |||
Repl_client_priv | enum('N','Y') | 1 | N | N | 低敏感 | |||
Create_view_priv | enum('N','Y') | 1 | N | N | 低敏感 | |||
Show_view_priv | enum('N','Y') | 1 | N | N | 低敏感 | |||
Create_routine_priv | enum('N','Y') | 1 | N | N | 低敏感 | |||
Alter_routine_priv | enum('N','Y') | 1 | N | N | 低敏感 | |||
Create_user_priv | enum('N','Y') | 1 | N | N | 低敏感 | |||
Event_priv | enum('N','Y') | 1 | N | N | 低敏感 | |||
Trigger_priv | enum('N','Y') | 1 | N | N | 低敏感 | |||
Create_tablespace_priv | enum('N','Y') | 1 | N | N | 低敏感 | |||
ssl_type | enum('','ANY','X509','SPECIFIED') | 9 | N | 低敏感 | ||||
ssl_cipher | blob | 65535 | N | 低敏感 | ||||
x509_issuer | blob | 65535 | N | 低敏感 | ||||
x509_subject | blob | 65535 | N | 低敏感 | ||||
max_questions | int(11) unsigned | 10 | 0 | N | 0 | 低敏感 | ||
max_updates | int(11) unsigned | 10 | 0 | N | 0 | 低敏感 | ||
max_connections | int(11) unsigned | 10 | 0 | N | 0 | 低敏感 | ||
max_user_connections | int(11) unsigned | 10 | 0 | N | 0 | 低敏感 | ||
plugin | char(64) | 64 | N | mysql_native_password | 低敏感 | |||
authentication_string | text | 65535 | Y | 低敏感 | ||||
password_expired | enum('N','Y') | 1 | N | N | 低敏感 | |||
password_last_changed | timestamp | Y | 低敏感 | |||||
password_lifetime | smallint(5) unsigned | 5 | 0 | Y | 低敏感 | |||
account_locked | enum('N','Y') | 1 | N | N | 低敏感 | |||
索引名 | 类型 | 包含字段 | ||||||
PRIMARY | Primary | Host,User |
(1.1.1) 用户列
user表中的用户列包括字段Host、User、Password:
Host: 登录的主机名,表示允许用户从哪台机器登录接连到Mysql服务器。可以使用IP地址或者域名,%表示允许从任何主机连接到Mysql服务器。
User:登录的用户名
Password: 用户登录数据库的密码,当该字段为空时,表示该用户账号登录不需要密码
(1.1.2) 权限列
user表中的权限列是以_priv结尾的字段,这些字段默认为N,N表示该权限不能用到所有数据库上,Y则与N的效果相反。以下是权限列各个字段的说明:
列名 | 说明 |
Select_priv | 是否拥有SELECT权限命令查询数据 |
Insert_priv | 是否拥有INSERT权限命令插入数据 |
Update_priv | 是否拥有UPDATE权限命令修改数据 |
Delete_priv | 是否拥有DELETE权限命令删除数据 |
Create_priv | 是否拥有权限创建新的数据库和表 |
Drop_priv | 是否拥有权限删除现有数据库和表 |
Reload_priv | 是否拥有权限执行刷新和重新加载MySQL所用各种内部缓存的特定命令,包括日志、权限、主机、查询和表 |
Shutdown_priv | 是否拥有权限关闭MySQL服务器 |
Process_priv | 是否拥有权限通过SHOW PROCESSLIST命令查看其他用户的进程 |
File_priv | 是否拥有权限执行SELECT INTO OUTFILE和LOAD DATA INFILE命令 |
Grant_priv | 是否拥有权限将自己已授权的权限授权给其他用户 |
Index_priv | 是否拥有权限创建和删除表索引 |
Alter_priv | 是否拥有权限重命名和修改表结构 |
Show_db_priv | 是否拥有权限查看服务器上所有数据库的名字,包括用户拥有足够访问权限的数据库 |
Super_priv | 是否拥有权限执行某些强大的管理功能,例如通过KILL命令删除用户进程,使用SET GLOBAL修改全局MySQL变量,执行关于复制和日志的各种命令 |
Create_tmp_table_priv | 是否拥有权限创建临时表 |
Lock_tables_priv | 是否拥有权限使用LOCK TABLES命令阻止对表的访问/修改 |
Repl_slave_priv | 是否拥有权限读取用于维护复制数据库环境的二进制日志文件。此用户位于主系统中,有利于主机和客户机之间的通信 |
Create_view_priv | 是否拥有权限创建视图 |
Show_view_priv | 是否拥有权限查看视图或了解视图如何执行 |
Create_routine_priv | 是否拥有权限更改或放弃存储过程和函数 |
Alter_routine_priv | 是否拥有权限修改或删除存储函数及函数 |
Create_user_priv | 是否拥有权限执行CREATE USER命令,这个命令用于创建新的MySQL账户 |
Event_priv | 是否拥有权限创建、修改和删除事件 |
Trigger_priv | 是否拥有权限创建和删除触发器 |
(1.1.3) 安全列
user表的安全列有4个字段:ssl_type、ssl_cipher、x509_issuer、x509_subject
ssl用于加密;
x509标准可以用来标识用户。普通的发行版都没有加密功能。可以使用SHOW VARIABLES LIKE 'have_openssl’语句来查看是否具有ssl功能。如果取值为DISABLED,那么则没有ssl加密功能。
(1.1.4) 资源控制列
user表的4个资源控制列是:max_questions、max_updates、max_connections、max_user_connections
max_questions:每小时可以允许执行多少次查询;
max_updates:每小时可以允许执行多少次更新;
max_connections:每小时可以建立多少连接;
max_user_connections:单个用户可以同时具有的连接数。
默认值为0,表示无限制。
(2)数据库层级
数据库权限适用于一个给定数据库中的所有目标。这些权限存储在mysql.db和mysql.host表中。GRANT ALL ON
db_name.*和REVOKE ALL ON db_name.*用于授予和撤销数据库权限。
刚刚我们已经讨论了全局级别的权限配置,对user表进行了解析,但是user表上的权限都是针对与所有数据库的,如果我们想将权限力度划分的更细,如果我想让某个数据库用户只能查看某个数据库里的表数据,那么此时就需要用到数据库层级的权限控制,主要分析mysql库里的db表。
(2.1)db表结构
表名称:db | 描述:Database privileges | |||||||
字符集:utf8 | ||||||||
数据库:mysql@rm-d2xt21zt5fp4k7m94.mysql.rds.ops.zzub-chinaunicom.cn:3306【zzzhjc-master-mysql】 | ||||||||
列名 | 类型 | 长度 | 精度 | 标度 | 是否为空 | 缺省值 | 描述 | 安全级别 |
Host | char(60) | 60 | N | 低敏感 | ||||
Db | char(64) | 64 | N | 低敏感 | ||||
User | char(32) | 32 | N | 低敏感 | ||||
Select_priv | enum('N','Y') | 1 | N | N | 低敏感 | |||
Insert_priv | enum('N','Y') | 1 | N | N | 低敏感 | |||
Update_priv | enum('N','Y') | 1 | N | N | 低敏感 | |||
Delete_priv | enum('N','Y') | 1 | N | N | 低敏感 | |||
Create_priv | enum('N','Y') | 1 | N | N | 低敏感 | |||
Drop_priv | enum('N','Y') | 1 | N | N | 低敏感 | |||
Grant_priv | enum('N','Y') | 1 | N | N | 低敏感 | |||
References_priv | enum('N','Y') | 1 | N | N | 低敏感 | |||
Index_priv | enum('N','Y') | 1 | N | N | 低敏感 | |||
Alter_priv | enum('N','Y') | 1 | N | N | 低敏感 | |||
Create_tmp_table_priv | enum('N','Y') | 1 | N | N | 低敏感 | |||
Lock_tables_priv | enum('N','Y') | 1 | N | N | 低敏感 | |||
Create_view_priv | enum('N','Y') | 1 | N | N | 低敏感 | |||
Show_view_priv | enum('N','Y') | 1 | N | N | 低敏感 | |||
Create_routine_priv | enum('N','Y') | 1 | N | N | 低敏感 | |||
Alter_routine_priv | enum('N','Y') | 1 | N | N | 低敏感 | |||
Execute_priv | enum('N','Y') | 1 | N | N | 低敏感 | |||
Event_priv | enum('N','Y') | 1 | N | N | 低敏感 | |||
Trigger_priv | enum('N','Y') | 1 | N | N | 低敏感 | |||
索引名 | 类型 | 包含字段 | ||||||
PRIMARY | Primary | Host,Db,User | ||||||
User | Normal | User |
db表里的权限列与user表里的含义差不多一致,只是db表的权限只是针对与某个数据库,而非全局数据库。其中DB字段存储的是数据库名称。
(3)表层级
表权限适用于一个给定表中的所有列。这些权限存储在mysql.talbes_priv表中。GRANT ALL ON
db_name.tbl_name和REVOKE ALL ON db_name.tbl_name只授予和撤销表权限
如果你清楚了全局级别的权限和数据库层的权限,那么表层级的权限就相对好理解了,表层级的权限是用于控制用户对某个数据库里的某个表是否有权限进行操作。比如你想指定某个用户只能操作指定数据库里的某张表,此时就需要用到表层级的权限来控制。
(3.1)tables_priv表结构
tables_priv表的字段相比较与user和db表要少的多,因为它控制的权限更细,它的结构如下:
表名称:tables_priv | 描述:Table privileges | |||||||
字符集:utf8 | ||||||||
数据库:mysql@rm-d2xt21zt5fp4k7m94.mysql.rds.ops.zzub-chinaunicom.cn:3306【zzzhjc-master-mysql】 | ||||||||
列名 | 类型 | 长度 | 精度 | 标度 | 是否为空 | 缺省值 | 描述 | 安全级别 |
Host | char(60) | 60 | N | 低敏感 | ||||
Db | char(64) | 64 | N | 低敏感 | ||||
User | char(32) | 32 | N | 低敏感 | ||||
Table_name | char(64) | 64 | N | 低敏感 | ||||
Grantor | char(93) | 93 | N | 低敏感 | ||||
Timestamp | timestamp | N | CURRENT_TIMESTAMP | 低敏感 | ||||
Table_priv | set('Select','Insert','Update','Delete','Create','Drop','Grant','References','Index','Alter','Create View','Show view','Trigger') | 98 | N | 低敏感 | ||||
Column_priv | set('Select','Insert','Update','References') | 31 | N | 低敏感 | ||||
索引名 | 类型 | 包含字段 | ||||||
PRIMARY | Primary | Host,Db,User,Table_name | ||||||
Grantor | Normal | Grantor |
(3.2) tables_priv表的组成结构
列名 | 说明 |
Host | 用户登录的主机,可以是IP或者域名 |
Db | 数据库名称 |
User | 登录用户名 |
Talbe_name | 表名称 |
Grantor | 权限的设置者 |
Table_priv | 对表进行操作的权限,对表的操作权限有:Select、Insert、Update、Delete、Create、Drop、Grant、Index、Alter、Create View、Show View以及Trigger |
Column_priv | 对表中的数据列进行操作的权限 Insert、Update、References |
(4)列层级
列权限适用于一个给定表中的单一列。这些权限存储在mysql.columns_priv表中。当使用REVOKE时,您必须指定与被授权列相同的列。
列层级的使用还是比较少,所以这里就不再过多阐述。
(4.1)columns_priv表结构
表名称:columns_priv | 描述:Column privileges | |||||||
字符集:utf8 | ||||||||
数据库:mysql@rm-d2xt21zt5fp4k7m94.mysql.rds.ops.zzub-chinaunicom.cn:3306【zzzhjc-master-mysql】 | ||||||||
列名 | 类型 | 长度 | 精度 | 标度 | 是否为空 | 缺省值 | 描述 | 安全级别 |
Host | char(60) | 60 | N | 低敏感 | ||||
Db | char(64) | 64 | N | 低敏感 | ||||
User | char(32) | 32 | N | 低敏感 | ||||
Table_name | char(64) | 64 | N | 低敏感 | ||||
Column_name | char(64) | 64 | N | 低敏感 | ||||
Timestamp | timestamp | N | CURRENT_TIMESTAMP | 低敏感 | ||||
Column_priv | set('Select','Insert','Update','References') | 31 | N | 低敏感 | ||||
索引名 | 类型 | 包含字段 | ||||||
PRIMARY | Primary | Host,Db,User,Table_name,Column_name |
(5)子程序层级
REATE ROUTINE, ALTER ROUTINE,EXECUTE和GRANT权限适用于已存储的子程序。这些权限可以被授予为全局层级和数据库层级。而且,除了CREATE ROUTINE外,这些权限可以被授予为子程序层级,并存储在mysql.procs_priv表中。
(5.1)procs_priv表结构
表名称:procs_priv | 描述:Procedure privileges | |||||||
字符集:utf8 | ||||||||
数据库:mysql@rm-d2xt21zt5fp4k7m94.mysql.rds.ops.zzub-chinaunicom.cn:3306【zzzhjc-master-mysql】 | ||||||||
列名 | 类型 | 长度 | 精度 | 标度 | 是否为空 | 缺省值 | 描述 | 安全级别 |
Host | char(60) | 60 | N | 低敏感 | ||||
Db | char(64) | 64 | N | 低敏感 | ||||
User | char(32) | 32 | N | 低敏感 | ||||
Routine_name | char(64) | 64 | N | 低敏感 | ||||
Routine_type | enum('FUNCTION','PROCEDURE') | 9 | N | 低敏感 | ||||
Grantor | char(93) | 93 | N | 低敏感 | ||||
Proc_priv | set('Execute','Alter Routine','Grant') | 27 | N | 低敏感 | ||||
Timestamp | timestamp | N | CURRENT_TIMESTAMP | 低敏感 | ||||
索引名 | 类型 | 包含字段 | ||||||
PRIMARY | Primary | Host,Db,User,Routine_name,Routine_type | ||||||
Grantor | Normal | Grantor |
(6)权限分配顺序
MySQL权限分配顺序是按照层级由大到小进行解析的,也就是先查看
user表(所有数据库)–>db表(某个数据库)->table_priv(某个表)->columns_pirv(某列)进行查找。
如果发现user表中某个权限是Y,那么就不会继续往下找,如果User表某个权限是N,那么就去找db表,依次往下找。
Mysql用户权限分配详解_mysql分配用户权限_对酒当歌丶人生几何的博客-CSDN博客
二、实战用户权限分配
(1)新建用户
创建用户常用的命令是CREATE USER,不过使用CREATE USER语句创建用户时,需要操作员要有相应的权限,也就是user表中的字段Create_priv为Y才能创建用户。比如创建一个名为admin的用户,并且登录密码为123456:
CREATE USER ‘admin’@‘%’ IDENTIFIED BY ‘123456’
一般创建用户的格式为:CREATE USER ‘用户名’@‘登录IP或者域名’ IDENTIFIED BY ‘登录密码’。
其中需要注意的是登录IP或者域名,很多时候会将登录IP设置为**%,%**代表所有主机,表示该用户可以在任何机器上进行登录。192.168.101.%表示允许192.168.101这个网段的主机进行登录。
当你只是完上面的创建admin用户命令后,你可以打开mysql库下的user表,你会发现里面多了一条admin的数据,但是所有的权限都是N,这表明该admin用户没有任何权限,不能查看操作任何数据库资源。
此时你可以尝试使用admin用户登录你现有的数据库,你会发现admin账号只能查看information_schema这个数据库,那是因为我们在创建admin账号时,并没有分配任何权限。
如果你想在创建账号的时候就分配给该账号一定的权限,那么你可以使用 : grant all privileges on *.* to 'admin'@'%' identified by '123456' with grant option; 该语句表示创建admin账号允许从任何主机登录并且拥有数据库全部的权限,可以将自己的权限授予给别人。我们将这条语句拆分:
创建账号时并赋予全部权限:
grant all privileges on *.* to '用户名'@'登录IP或者域名' identified by '登录密码' with grant option;
all privileges: 表示授权用户全部权限,当然你也可以指定赋予具体权限,比如SELECT、UPDATE、CREATE、DROP等。
on:表示这些权限可以作用于哪些数据库和哪些表,*.*表示作用于所有数据库和所有表,格式为 数据库名.表名。比如有一个test库,想让admin拥有查看test库所有表的权限,那么可以这样写:grant SELECT on test.* to 'admin'@'%' identified by '登录密码';
to:将权限授予哪个用户。格式:'用户名'@'登录IP或域名'。
IDENTIFIED by:指定用户的登录密码。
with grant option:表示允许用户将自己的权限授权给其它用户。
1
2
3
4
5
6
7
但请注意可能由于MySQL的数据库版本问题,有些版本不允许在创建用户时就给予权限,那么需要将创建和权限赋予分为两步:
create user 'admin'@'%' identified by '123456' -- 创建用户
GRANT all privileges ON *.* TO 'admin'@'%' -- 将所有权限赋予给admin
1
2
一般来说我们不会轻易创建一个用户给他赋予所有权限,也就是 grant all privileges,那么grant后面可以接哪些权限呢?这里简单整理了一部分权限以及其含义:
权限 意义
ALL [PRIVILEGES] 设置除GRANT OPTION之外的所有简单权限
ALTER 允许使用ALTER TABLE
ALTER ROUTINE 更改或取消已存储的子程序
CREATE 允许使用CREATE TABLE
CREATE USER 允许使用CREATE USER, DROP USER, RENAME USER和REVOKE ALL PRIVILEGES。
CREATE VIEW 允许使用CREATE VIEW
DELETE 允许使用DELETE
DROP 允许使用DROP TABLE
INDEX 允许使用CREATE INDEX和DROP INDEX
INSERT 允许使用INSERT
SELECT 允许使用SELECT
SHOW DATABASES SHOW DATABASES显示所有数据库
SHOW VIEW 允许使用SHOW CREATE VIEW
SHUTDOWN 允许使用mysqladmin shutdown
UPDATE 允许使用UPDATE
GRANT OPTION 允许授予权限
以上表格举例了部分权限以及其含义,如果你想给一个账号赋予多个权限,可以用英文逗号分开,比如Grant SELECT,UPDATE,DROP等,如果想连接更多信息,欢迎点击Mysql账号管理查看
(2)删除用户
刚刚我们已经创建了一个admin账号并且没有为其设置任何权限,此时我们可以使用 DROP USER 命令删除某个用户,例如我们要删除之前创建的admin用户,那么我们可以使用命令:
DROP USER 'admin'@'%' -- 删除admin用户,用户名(User)和主机名(Host)构成
FLUSH PRIVILEGES; -- 刷新权限
1
2
此时user表中的admin用户就删除了。
(3)禁用用户、启用用户
有时候我们只想禁用某个用户的登录,并不想将该用户进行删除,那么可以使用MySQL的禁用功能。在演示之前我们现在创建一个admin用户,该用户拥有访问数据库(db_cztl_dev)的权限,请注意db_cztl_dev是在我MySQL中存在的一个数据库,您可以使用您自己的数据库。执行命令:
create user 'admin'@'%' identified by '123456' -- 创建用户
GRANT SELECT ON `db_cztl_dev`.* TO 'admin'@'%' -- 将db_cztl_dev数据库的读权限赋予admin
1
2
此时user表会有admin账号的信息,我们可以看到user表里的admin的select_priv是为N,因为admin现在的权限只是能访问某一个数据库,而非全部数据库,所以user表里的select_pirv是为N,但是db表(数据库层级)会在db_cztl_dev那条数据的select_priv为N。
表示admin可以访问数据库db_cztl_dev,拥有该数据库下的所有SELECT权限,让我们用admin账号登录,就可以看到db_cztl_dev数据库。
如果我们要禁用admin账号,可以输入命令:
ALTER USER 'admin'@'%' ACCOUNT lock; -- 禁用admin账号
FLUSH PRIVILEGES; -- 刷新权限
1
2
此时重新使用admin用户登录,就可以提示以下信息:
解除admin禁用可以使用命令:
ALTER USER 'admin'@'%' ACCOUNT UNLOCK; --解除admin用户
FLUSH PRIVILEGES; -- 刷新权限
1
2
(4)重命名用户名
修改用户名的格式如下:
rename user '用户名'@'IP或者域名' to '新用户名'@'IP或者域名';
1
比如我们要将admin用户重名为king,那么可以这样写:
rename user 'admin'@'%' to 'king'@'%';
1
(5)修改用户密码
set password for '用户名'@'IP或者域名'=password('新密码')
1
(6)收回权限(revoke)
根据上面几小节我们指定如何给一个用户赋予权限可以用Grant命令,相对应的撤销用户的某个权限可以使用REVOKE。
(6.1)查看数据库中所有用户信息
我们知道用户的基本信息都存放在user表中,那么查看所有用户信息可以使用以下语句:
SELECT user,host FROM mysql.`user`;
1
(6.2)查看用户拥有的所有权限
查看某个用户的权限可以使用 show grants for 用户名,比如我们要查看admin用户的权限有哪些:
SHOW GRANTS FOR 'admin'@'%'
1
可以看到admin用户拥有查看数据库db_cztl_dev下所有资源的权限。
(6.3)使用REVOKE撤销权限
由4.2小节我们可以看到admin拥有访问db_cztl_dev数据库的权限,假如我们此时想撤销admin的权限,可以这样写:
REVOKE SELECT ON db_cztl_dev.* FROM 'admin'@'%'; -- 撤销admin在数据db_cztl_dev的权限
1
此时我们再使用SHOW GRANTS FOR 'admin'@'%'查看admin权限,可以看到admin访问db_cztl_dev数据库的权限已被撤销。
(7)修改用户权限(Grant 权限类型 ON 数据库.表 TO 用户)
通过6.3我们已经撤销了admin查看db_cztl_dev的权限,如果此时我们想赋予admin用户可以访问并且修改db_cztl_dev库下cztl_line表的权限,可以这样做:
GRANT SELECT,UPDATE ON db_cztl_dev.cztl_line TO 'admin'@'%';
FLUSH PRIVILEGES;
1
2
重新使用admin账号登录数据库,就可以访问和修改db_cztl_dev库下的cztl_line表。
如果想让admin用户能访问整个db_cztl_dev库下所有资源,可以追加权限:
GRANT SELECT ON `db_cztl_dev`.* TO 'admin'@'%'
1
重新admin登录就可以查到所有表
(8) 设置MySQL用户密码过期策略
设置系统参数default_password_lifetime作用于所有的用户账户,可以通过show variables like ‘default_password_lifetime’;查看密码过期策略,0表示用不过期,可以通过 set global default_password_lifetime=180;设置密码过期时间为180天。
(8.1)手动强制某个用户密码过期
ALTER USER '用户名'@'IP或者域名' PASSWORD EXPIRE;
1
假如我们要将admin账号强制密码过期,可以这样做:
ALTER USER 'admin'@'%' PASSWORD EXPIRE; --强制admin用户密码过期
1
重启使用admin登录时,会弹出重置密码界面。
相关文章:
Mysql权限-系统表user,db,talbes_priv,columns_priv详解
一、MySQL 权限场景 可以根据登录用户限制用户访问资源(库、表)可以根据登录用户限制用户的操作权限(能对哪些库、表执行增删改查操作)可以指定用户登录IP或者域名可以限制用户权限分配 二、Mysql五个层级权限级别分析 Mysql权限级别分为了五个层级,并且每个级别…...

GPT-4 模型详细教程
GPT-4(Generative Pretrained Transformer 4)是 OpenAI 的最新语言生成模型,其在各类文本生成任务中表现优秀,深受开发者和研究者喜爱。这篇教程将帮助你理解 GPT-4 的基本概念,并向你展示如何使用它来生成文本。 什么…...

智慧环保:创造绿色未来
随着全球环境问题的日益严重,智慧环保成为推动绿色发展的关键。智慧环保利用先进的技术手段和智能化设备,致力于解决环境问题,保护生态环境,实现可持续发展。它融合了物联网、人工智能、大数据等技术,将科技的力量与环…...
虚拟 DOM和render()函数和Vue.js模板语法
[TOC](虚拟 DOM和render()函数) 1. 虚拟DOM 虚拟DOM是Vue中非常重要的概念,它是一个虚拟的内存中的数据结构,用来表示真实的DOM树。Vue使用虚拟DOM来减少对真实DOM的操作次数,从而提高页面的性能。 虚拟DOM的工作原理如下: Vu…...

k8s Service网络详解(一)
k8s Service网络详解(一) 有关K8s网络的几个概念K8s网络模型k8s网络插件ServiceService的访问方式Service的种类无头服务(Headless Services)带选择算符的服务无选择算符的服务 Service的类型ClusterIPNodeportLoadBalancerExtern…...

抖音账号矩阵系统开发源码
一、技术自研框架开发背景: 抖音账号矩阵系统是一种基于数据分析和管理的全新平台,能够帮助用户更好地管理、扩展和营销抖音账号。 部分源码分享: ic function indexAction() { //面包屑 $breadcrumbs [ [tit…...

Python+Texturepacker自动化处理图片
前言 本篇在讲什么 PythonTexturepacker自动化处理图片 本篇需要什么 对Python语法有简单认知 依赖Python2.7环境 依赖Texturepacker工具 本篇的特色 具有全流程的图文教学 重实践,轻理论,快速上手 提供全流程的源码内容 ★提高阅读体验★ &…...

K8s Service网络详解(二)
K8s Service网络详解(二) Kube Proxy调度模式Kube-proxy IptablesKube-proxy IPVS Service SelectorPod DNS种常见的 DNS 服务Kube-DNSCoreDNSCorefile 配置 DNS 记录DNS 记录 ServiceDNS 记录 PodDNS 配置策略 Pod 的主机名设置优先级 Ingress Kube Pro…...
Rust vs Go:常用语法对比
这个网站 可以列出某门编程语言的常用语法,也可以对比两种语言的基本语法差别。 在此对比Go和Rust 1. Print Hello World 打印Hello World package mainimport "fmt"func main() { fmt.Println("Hello World")} fn main() { println!("…...

Vlan端口隔离(第二十四课)
一、端口隔离 1、端口隔离技术概述 1)端口隔离技术出现背景:为了实现报文之间的二层隔离,可以将不同的端口加入不同的VLAN,但这样会浪费有限的VLAN ID资源。 2)端口隔离的作用:采用端口隔离功能,可以实现同一VLAN内端口之间的隔离。 3)如何实现端口隔离功能:只需要…...

js实现框选截屏功能
实现的思路大概就是,先将dom转化为canvas画布,再对canvas进行裁切,然后通过canvas api生成图片,这里用到了一个库html2canvas 效果如图: 首先实现框选效果: const mousedownEvent (e) > {moveX 0;mo…...
Manjaro Linux 连接公司的 VPN 网络
注意:如果你公司的 VPN 网络是在苹果下使用的,本文可能不适用(苹果系统不支持 PPTP)。 用 Linux 和用 Windows/macOS 不一样,它真的需要用户操心很多东西。比如怎么连接公司的 VPN 网络…… 我是折腾了挺久࿰…...
Ama no Jaku
登录—专业IT笔试面试备考平台_牛客网 题目大意:有一个n*n且仅由0和1构成的矩阵,每次操作可以将一整行或一整列的所有数取反,问能否使所有行中构成的最小数>所有列中构成的最大数 1<n<2000 思路:首先,如果…...

视频基础知识
1.视频比特率 视频的比特率是指传输过程中单位时间传输的数据量。可以理解为视频的编码采样率。单位是kbps,即每秒千比特。视频比特率是决定视频清晰度的一个重要指标。比特率越高,视频越清晰,但数据量也会越大。比如一部100分钟的电影&#…...
安全渗透初级知识总结
Day1: xss详解:web攻防之XSS攻击详解——XSS简介与类型 - 知乎 (zhihu.com) Cookie:身份验证 网页元素属性: id: class:样式名称 console.log(div_class);----打印标签 tabindex"0"---这是…...

rocketmq客户端本地日志文件过大调整配置(导致pod缓存cache过高)
现象 在使用rocketmq时,发现本地项目中文件越来越大,查找发现在/home/root/logs/rocketmqlog目录下存在大量rocketmq_client.log日志文件。 配置调整 开启slf4j日志模式,在项目启动项中增加-Drocketmq.client.logUseSlf4jtrue因为配置使用的…...

Unity进阶-ui框架学习笔记
文章目录 Unity进阶-ui框架学习笔记 Unity进阶-ui框架学习笔记 笔记来源课程:https://study.163.com/course/courseMain.htm?courseId1212756805&_trace_c_p_k2_8c8d7393c43b400d89ae94ab037586fc 最上面的管理层(canvas) using System…...

Django实现接口自动化平台(十四)测试用例模块Testcases序列化器及视图【持续更新中】
相关文章: Django实现接口自动化平台(十三)接口模块Interfaces序列化器及视图【持续更新中】_做测试的喵酱的博客-CSDN博客 本章是项目的一个分解,查看本章内容时,要结合整体项目代码来看: python django…...

如何高效实现文件传输:小文件采用零拷贝、大文件采用异步io+直接io
一般会如何实现文件传输? 服务器提供文件传输功能,需要将磁盘上的文件读取出来,通过网络协议发送到客户端。如果需要你自己编码实现这个文件传输功能,你会怎么实现呢? 通常,你会选择最直接的方法…...
Docker运行MySQL5.7
步骤如下: 1.获取镜像: docker pull mysql:5.7 2.创建挂载目录: mkdir /home/mydata/data mkdir /home/mydata/log mkdir /home/mydata/conf 3.先启动docker把配置文件拷贝出来: docker run -it --name temp mysql:5.7 /bi…...

大数据学习栈记——Neo4j的安装与使用
本文介绍图数据库Neofj的安装与使用,操作系统:Ubuntu24.04,Neofj版本:2025.04.0。 Apt安装 Neofj可以进行官网安装:Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...

Linux 文件类型,目录与路径,文件与目录管理
文件类型 后面的字符表示文件类型标志 普通文件:-(纯文本文件,二进制文件,数据格式文件) 如文本文件、图片、程序文件等。 目录文件:d(directory) 用来存放其他文件或子目录。 设备…...

突破不可导策略的训练难题:零阶优化与强化学习的深度嵌合
强化学习(Reinforcement Learning, RL)是工业领域智能控制的重要方法。它的基本原理是将最优控制问题建模为马尔可夫决策过程,然后使用强化学习的Actor-Critic机制(中文译作“知行互动”机制),逐步迭代求解…...

关于nvm与node.js
1 安装nvm 安装过程中手动修改 nvm的安装路径, 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解,但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后,通常在该文件中会出现以下配置&…...

聊聊 Pulsar:Producer 源码解析
一、前言 Apache Pulsar 是一个企业级的开源分布式消息传递平台,以其高性能、可扩展性和存储计算分离架构在消息队列和流处理领域独树一帜。在 Pulsar 的核心架构中,Producer(生产者) 是连接客户端应用与消息队列的第一步。生产者…...
蓝桥杯 2024 15届国赛 A组 儿童节快乐
P10576 [蓝桥杯 2024 国 A] 儿童节快乐 题目描述 五彩斑斓的气球在蓝天下悠然飘荡,轻快的音乐在耳边持续回荡,小朋友们手牵着手一同畅快欢笑。在这样一片安乐祥和的氛围下,六一来了。 今天是六一儿童节,小蓝老师为了让大家在节…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序
一、开发准备 环境搭建: 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 项目创建: File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...

【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)
可以使用Sqliteviz这个网站免费编写sql语句,它能够让用户直接在浏览器内练习SQL的语法,不需要安装任何软件。 链接如下: sqliteviz 注意: 在转写SQL语法时,关键字之间有一个特定的顺序,这个顺序会影响到…...
css的定位(position)详解:相对定位 绝对定位 固定定位
在 CSS 中,元素的定位通过 position 属性控制,共有 5 种定位模式:static(静态定位)、relative(相对定位)、absolute(绝对定位)、fixed(固定定位)和…...
【HTTP三个基础问题】
面试官您好!HTTP是超文本传输协议,是互联网上客户端和服务器之间传输超文本数据(比如文字、图片、音频、视频等)的核心协议,当前互联网应用最广泛的版本是HTTP1.1,它基于经典的C/S模型,也就是客…...