mysql用户管理知识点

1、权限表

1.1、user表

1.1.1、用户列

Host、User、Password分别表示主机名、用户名、密码

1.1.2、权限列

决定了用户的权限,描述了在全局范围内允许对数据和数据库进行操作。

1.1.3、安全列

安全列有6个字段,其中两个是ssl相关的,2个是x509相关的,另外2个是授权插件相关的。

ssl用于加密,x509标准用于标识用户,plugin字段标识可以用于验证用户身份的插件。

1.1.4、资源控制列

用来限制用户使用的资源,包含4个字段,分别为:

1)、max_questions:用户每小时允许执行的查询操作次数。

2)、max_updates:用户每小时允许执行的更新操作次数。

3)、max_connections:用户每小时允许执行的连接操作次数。

4)、max_user_connections:用户允许同时建立的连接次数。

1.2、db表和host表

此两个表针对的是数据库。

1.2.1、用户列

db表:Host、User、Db

host表:Host、Db

1.2.2、权限列

1.3、tables_priv表和cloumns_priv表

tables_priv表用来对表设置权限;cloumns_priv表用来对表的某一列设置权限。

tables_priv表有8个字段,各字段说明如下:

1)、Host、Db、User、Table_name:主机名、数据库名、用户名、表名

2)、Grantor:表示修改该记录的用户。

3)、Timestamp:表示修改该记录的时间。

4)、Table_priv:表示对表的操作权限包括Select、Insert、Update、Delete、Create、Drop、Grant、References、Index和Alter

5)、Cloumn_priv:表示对表中的列的操作权限,包括Select、Insert、Update、References。

cloumns_priv表只有7个字段,Host、Db、User、Table_name、Cloumn_name、Timestamp、Cloumn_priv。

Cloumn_name表示指定对哪些数据列具有操作权限。

1.4、procs_priv表

procs_priv表可以对存储过程和存储函数来设置操作权限。

procs_priv表有8个字段,各字段说明如下:

1)、Host、Db、User:主机名、数据库名、用户名

2)、Routime_name:表示存储过程或函数的名称。

3)、Routine_type:表示存储过程或函数的类型。有两个值,分别是:FUNCTION和PROCEDURE。

4)、Grantor:表示插入或修改该记录的用户。

5)、Proc_priv:表示拥有的权限,包括Execute、Alter Routine、Grant 3种。

6)、Timestamp:表示修改该记录的时间。

2、账户管理

2.1、登陆和退出MYSQL服务器

通过mysql -help命令查看mysql命令帮助信息,mysql的命令常用参数如下:

1)、-h 主机名,可以使用该参数指定主机名或IP,如果不指定,则默认为localhost。

2)、-u 用户名,可以使用该参数指定用户名。

3)、-p 密码,可以使用该参数指定密码。注意:该参数后面的字符串h和-p之间不能有空格。

4)、-P 端口号,该参数后面接MYSQL服务器端口号,默认为3306.

5)、数据库名,可以在命令的最后指定数据库名。

6)、-e 执行sql语句。

2.2、新建普通用户

2.2.1、使用CREATE USER 语句创建新用户

sql 复制代码
CREATE USER user_specification [,user_specification]...

user_specification:

'user'@'host'

[

IDENTIFIED BY [PASSWORD] 'password' | IDENTIFINED WITH auth_plugin [AS 'auth_string']

]

user:表示创建的用户的名称。

host:表示允许登陆的用户主机名称。

IDENTIFIED BY:表示用来设置用户的密码;

[PASSWORD]:表示使用哈希值设置密码,该参数可选。

'password':表示用户登录时使用的普通明文密码。

IDENTIFINED WITH:为用户指定一个身份验证插件。

auth_plugin:是插件的名称,插件的名称可以是一个带单引号的字符串,或者带引号的字符串。

auth_string:是可选的字符串参数,该参数将传递给身份验证插件,由该插件解释该参数的意义。

2.2.2、使用GRANT语句创建新用户。

CREATE USER语句创建的新用户没有任何权限,GRANT语句不仅可以创建新用户,还可以在创建的同时

对用 户授权。

格式:

sql 复制代码
GRANT privileges ON db.table

TO 'user'@'host' [IDENTIFIED BY 'password'] [,user[IDENTIFIED BY 'password']]

[WITH GRANT OPTION];

privileges:表示赋予用户的权限类型。

db.table:表示用户的权限所作用的数据库中的表。

IDENTIFIED BY:表示用来设置用户的密码。

'password':表示用户登录时使用的普通明文密码。

WITH GRANT OPTION:为可选参数,表示对新建的用户赋予GRANT权限,即该用户可对其他用户赋予权限

2.2.3、直接操作MYSQL用户表

sql 复制代码
INSERT INTO mysql.user(Host,User,Password,[privilegelist])

VALUES('host','username',PASSWORD('password'),privilegevaluelist);

用户添加成功后还需要使用 FLUSH PRIVILEGES命令,告诉服务器重新加载授权表(重启服务器也会重新加载授权表)

2.3、删除普通用户

2.3.1、使用DROP USER语句删除用户

sql 复制代码
DROP USER user[,user]

2..3.2、使用DELETE语句删除用户

sql 复制代码
DELETE FROM MYSQL.user WHERE host='hostname' and user='username';

2.4、root用户修改自己的密码

2.4.1、使用mysqladmin命令在命令行指定新密码

sql 复制代码
mysqladmin -u username -h localhost -p password 'newpwd'

2.4.2、修改MYSQL数据库的user表

sql 复制代码
UPDATE mysql.user set Password=PASSWORD('rootpwd') WHERE User='root' and Host='localhost'

执行UPDATE语句后,需要执行FLUSH PRIVILEGES语句重新加载用户权限。

2.4.3、使用SET语句修改root用户密码

sql 复制代码
SET PASSWORD=PASSWORD('rootpwd');

需要执行FLUSH PRIVILEGES语句重新加载用户权限。

2.5、root用户修改普通用户密码

2.5.1、使用set语句修改普通用户密码

sql 复制代码
SET PASSWORD FOR 'user'@'host'=PASSWORD('somepassword');

2.5.2、使用UPDATE修改普通用户密码

sql 复制代码
UPDATE mysql.user set Password=PASSWORD('rootpwd') WHERE User='userName' and Host='hostName'

执行UPDATE语句后,需要执行FLUSH PRIVILEGES语句重新加载用户权限。

2.5.3、使用GRANT语句修改普通用户密码

在全局级别使用GRANT USAGE语句指定某个账户的密码而不影响账户当前权限。

sql 复制代码
GRANT USAGE ON *.* TO 'someuser'@'%' IDENTIFIED BY 'somepassword';

2.6、普通用户修改密码

sql 复制代码
SET PASSWORD=PASSWORD('newpwd');

需要执行FLUSH PRIVILEGES语句重新加载用户权限。

2.7、root用户密码丢失的解决办法

2.7.1、使用 --skip-grant-tables选项启动MySQL服务

windows下:(先切换到MYSQL的bin目录下)

mysqld命令如下:

sql 复制代码
mysqld --skip-grant-tables

mysqld-nt命令如下:

sql 复制代码
 mysqld-nt --skip-grant-tables

linux下:

mysqld_self命令如下:

sql 复制代码
mysqld_self --skip-grant-tables user=mysql

/etc/init.d/mysql命令如下:

sql 复制代码
/etc/init.d/mysql start-mysqld --skip-grant-tables user

2.7.2、使用root用户登录,重新设置密码

windows下:

1)、使用net stop mysql命令停止MYSQL服务进程

2)、在命令行输入mysqld --skip-grant-tables选项启动MySQL服务

3)、打开另外一个命令窗口,输入不加密码的登录命令。

4)、登录成功后可以使用UPDATE语句h或者使用mysqladmin命令重新设置root密码

5)、加载权限表:需要执行FLUSH PRIVILEGES语句重新加载用户权限。

3、权限管理

3.1、MySQL各种权限

3.2、授权

3.2.1、全局层级

全局权限适用于一个给定服务器中的所有数据库。这些权限存储在mysql.user表中。

GRANT ALL ON *.* 和 REVOKE ALL ON *.*只授予和撤销全局权限

3.2.2、数据库层级

数据库权限适用于一个给定数据库中所有目标。这些权限存储在mysql.db和mysql.host表中。

GRANT ALL ON db_name.* 和 REVOKE ALL ON db_name.*只授予和撤销数据库权限

3.2.3、表层级

表权限适用于一个给定表中所有列。这些权限存储在mysql.tables_priv表中。

GRANT ALL ON db_name.table_name 和 REVOKE ALL ON db_name.table_name只授予和撤销表权限

3.2.4、列层级

列权限适用于一个给定表中单一列。这些权限存储在mysql.columns_priv表中。

3.2.5、子程序层级

CREATE ROUTINE、ALTER ROUTINE、EXECUTE和GRANT权限适用于已存储的子程序。

3.3、收回权限

3.3.1、收回所有用户的所有权限

REVOKE ALL PRIVILEGES,GRANT OPTION

sql 复制代码
     REVOKE ALL PRIVILEGES ON db_name.* FROM 'new_user'@'localhost';

3.3.2、收回指定的权限

sql 复制代码
REVOKE priv_type[(columns)][,priv_type[(columns)]]...

ON table1,table2,....,tablen

FROM 'user'@'host'[,'user'@'host'...]

3.4、查看权限

sql 复制代码
       SHOW GRANTS FOR 'user'@'host'

4、访问控制

4.1、连接核实阶段

4.2、请求核实阶段

5、安全考虑

通常建议避免使用超级用户进行日常操作,而是创建具有特定权限的普通用户。

定期审查并更新用户权限,确保安全

相关推荐
明月看潮生2 分钟前
青少年编程与数学 02-007 PostgreSQL数据库应用 11课题、视图的操作
数据库·青少年编程·postgresql·编程与数学
阿猿收手吧!10 分钟前
【Redis】Redis入门以及什么是分布式系统{Redis引入+分布式系统介绍}
数据库·redis·缓存
奈葵13 分钟前
Spring Boot/MVC
java·数据库·spring boot
leegong2311121 分钟前
Oracle、PostgreSQL该学哪一个?
数据库·postgresql·oracle
中东大鹅27 分钟前
MongoDB基本操作
数据库·分布式·mongodb·hbase
夜光小兔纸1 小时前
Oracle 普通用户连接hang住处理方法
运维·数据库·oracle
兩尛2 小时前
订单状态定时处理、来单提醒和客户催单(day10)
java·前端·数据库
web2u3 小时前
MySQL 中如何进行 SQL 调优?
java·数据库·后端·sql·mysql·缓存
Elastic 中国社区官方博客3 小时前
使用 Elasticsearch 导航检索增强生成图表
大数据·数据库·人工智能·elasticsearch·搜索引擎·ai·全文检索
小金的学习笔记4 小时前
RedisTemplate和Redisson的使用和区别
数据库·redis·缓存