Linux下MySQL用户管理、权限、密码

发布时间:2024年01月15日

一、原理

MySQL的用户管理实质上是对用户表的管理,系统中的数据库mysql存在一张用户表(user),所有的用户都在该表内,对用户的管里也就是对该表进行增删查改的操作。

show databases;

如图中的mysql数据库,所有的用户信息都存在这个数据内的user表中。

use mysql;

select host,user,authentication_string from user;

进入该数据库后,查看user表中的内容:

如图显示了当前系统下的所有用户信息,root就是超级用户,剩下两个是系统自带的,由于没有创建普通用户,所有只有此三项。

字段含义:

host: 表示这个用户可以从哪个主机登陆,如果是localhost,表示只能从本机登陆
user: 用户名
authentication_string: 用户密码,通过password函数加密后的

二、创建普通用户

create user '用户名'@'登陆主机/ip' identified by '密码';

'登陆主机/ip' 可选项:

localhost:表示只能在本主机进行登录。

指定的ip地址:表示只允许特定ip的主机才能登录。

% :表示允许远端登录,可以在任意主机上进行登录。(建议少用)

注意:如果创建的时候报错,先执行flush privileges; 刷新一下再进行创建。

三、用户登录

本机登录:

mysql -u用户名 -p;

远程登录:

远程连接其他服务器下的mysql。需要对方的mysql下的用户登录主机设置的是指定ip或%,才能远程登录。

远程登录指令:

mysql -u用户名 -h需要连接的ip -p

四、删除用户

方式1. 使用对表的删除语句删除

DELETE FROM mysql.user WHERE user = 'username' AND host = 'localhost';

方式2.? 使用DROP USER语句:

drop user '用户名'@'localhost';

?五、修改密码

方法1.?

只能给本用户自己设置密码。

set password=password('新的密码');

方法2.?

root用户修改指定用户的密码

set password for '用户名'@'主机名'=password('新的密码');

?修改密码后需要使用flush privileges;刷新一下。

root忘了密码重置

方法:先设置免密登录,登录后,在重新设置密码。

1. # vim /etc/my.cnf

2. 在[mysqld]下添加 skip-grant-tables

这时就可以无密码登录。

3. # mysql -uroot -p

4. 输入密码的时候直接回车

5. 进入后输入 #?flush privileges;

6. 设置密码,指令:

set password for root@localhost=password(‘你的密码’);

这样退出后就可以使用密码登录了。

如果是普通账户密码忘了,可以直接在root下进行重置。

六、权限赋予

权限?? ?意义
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 权限列表 on 库.对象名 to '用户名'@'登陆位置' [identified by '密码'];
// grant select on ...
// grant select, delete, create on ...
// grant all [privileges] on ... -- 表示赋予该用户在该对象上的所有权限

*.* :? 代表本系统中的所有数据库的所有对象(表,视图,存储过程等)
库.* :? 表示某个数据库中的所有数据对象(表,视图,存储过程等)
identified by可选。 如果用户存在,赋予权限的同时修改密码,如果该用户不存在,就是创建用户

权限赋予后需要刷新才能使用:flush privileges;
例:

赋予zhangsan关于test数据库的select所有表的权限。

grant select on test.* to 'zhangsan'@'localhost';

?权限查看:

show grants for 'username'@'localhost';

查看某用户被赋予的权限。

七、权限收回

指令:

revoke 权限列表 on 库.对象名 from '用户名'@'登陆位置';

例:

revoke all on test.* from 'zhangsan'@'localhost';

回收张三关于test数据库的所有权限。

?

文章来源:https://blog.csdn.net/qzt__l0ve/article/details/135608598
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。