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 小时前
SQL实战训练之,力扣:2020. 无流量的帐户数(递归)
数据库·sql·leetcode
Yaml43 小时前
Spring Boot 与 Vue 共筑二手书籍交易卓越平台
java·spring boot·后端·mysql·spring·vue·二手书籍
Channing Lewis3 小时前
salesforce case可以新建一个roll up 字段,统计出这个case下的email数量吗
数据库·salesforce
追风林3 小时前
mac 本地docker-mysql主从复制部署
mysql·macos·docker
毕业设计制作和分享4 小时前
ssm《数据库系统原理》课程平台的设计与实现+vue
前端·数据库·vue.js·oracle·mybatis
ketil274 小时前
Redis - String 字符串
数据库·redis·缓存
Hsu_kk5 小时前
MySQL 批量删除海量数据的几种方法
数据库·mysql
编程学无止境5 小时前
第02章 MySQL环境搭建
数据库·mysql
knight-n5 小时前
MYSQL库的操作
数据库·mysql
包饭厅咸鱼6 小时前
QML----复制指定下标的ListModel数据
开发语言·数据库