用户信息存放在?mysql
?数据库下的?user
?表(MySQL 服务下存在一个系统自带的 mysql 数据库)。
use mysql ;
show tables;
desc user;
查看密码信息的命令:
能看到密码信息:是经过加密后的密码信息?
select user,host,authentication_string from user;
明文密码创建用户格式:
create user '用户名'@'主机' identified by '密码'
?加密密码创建用户 :
SELECT PASSWORD('密码'); #先获取加密的密码
?
CREATE USER 'lisi'@'localhost' IDENTIFIED BY PASSWORD '加密的密码';
RENAME USER '旧的用户名'@'旧的主机地址' TO '新的用户名'@'新的主机地址';
drop user '用户名'@'登录地址';
select user();
普通用户只有修改自身密码的权限
明文密码修改:
set password = password ('新密码');
root用户是超级管理员,它不仅可以修改自身密码,还能修改其他用户的密码。??
set password for '用户'@'登录地址' =password ('密码');
该操作必须是在数据库本机且为root用户,才可进行
vim /etc/my.cnf
skip-grant-tables
systemctl restart mysql.service
mysql
mysql> UPDATE mysql.user SET AUTHENTICATION_STRING = PASSWORD('abc123') where user='root';
mysql> flush privileges; #刷新数据库
?
mysql> quit #退出
mysql -u root -pabc123
#删除配置文件中的配置,之后重启服务。
注意:最后再把/etc/my.conf 配置文件里的skip-grant-tables 删除,并重启mysql服务。
vim /etc/my.cnf
systemctl restart mysqld.service
权限?? | ?权限说明?? | ?权限级别 |
CREATE?? ? | 创建数据库、表或索引的权限?? ? | 数据库、表或索引 |
DROP? | ? 删除数据库或表的权限?? ? | 数据库或表 |
GRANT OPTION?? ??? | 赋予权限选项 | ?数据库或表 |
REFERENCES?? | ?引用权限?? ? | 数据库或表 |
ALTER??? | ?更改表的权限 | ? ?数据表 |
DELETE?? ? | ?删除表数据的权限?? | 数据表 |
INDEX?? ?? | 操作索引的权限 | ? ?数据表 |
INSERT?? ? | 添加表数据的权限?? | ?数据表 |
SELECT?? | ?查询表数据的权限?? | ?数据表 |
UPDATE?? | ?更新表数据的权限?? | ?数据表 |
CREATE VIEW?? ??? | 创建视图的权限 | ?视图 |
SHOW VIEW?? ??? | 查看视图的权限 | ?视图 |
ALTER ROUTINE?? ? | 更改存储过程的权限?? | ?存储过程 |
CREATE ROUTINE?? | ?创建存储过程的权限?? ? | 存储过程 |
EXECUTE?? ? | 执行存储过程权限?? | ?存储过程 |
FILE?? ? | ?服务器主机文件的访问权限?? | 文件管理 |
CREATE TEMPORARY TABLES?? ?? | ?创建临时表的权限 | ?服务器管理 |
LOCK TABLES?? | ?锁表的权限?? | ?服务器管理 |
CREATE USER???? | ?创建用户的权限 | ?服务器管理 |
RELOAD???? ? | ?执行 flush privileges, refresh, reload 等刷新命令的权限 | 服务器管理 |
PROCESS?? ?? ? | 查看进程的权限? | 服务器管理 |
REPLICATION CLIENT?? ? ? | 查看主从服务器状态的权限?? | 服务器管理 |
REPLICATION SLAVE?? ?? | ?主从复制的权限 | ?服务器管理 |
SHOW DATABASES??? | ?查看数据库的权限 | ? ?服务器管理 |
SHUTDOWN?? ? | ?关闭数据库的权限 | ? ?服务器管理 |
SUPER?? ? | 超级权限? | ? ?服务器管理 |
ALL [PRIVILEGES]?? ? | 所有权限 | |
USAGE? ?? | ? ?没有任何权限?? ? |
SHOW GRANTS; #查看当前用户(自己)的权限
SHOW GRANTS FOR 用户名@来源地址; #查看其他用户的权限
[
NO_AUTO_CREATE_USER
], 即在grant语句中禁止创建空密码的账户,使用grant语法创建用户必须带上 “identified by”关键字设置账户密码,否则就被认为是非法的创建语句。?
GRANT 权限列表 ON 数据库名.表名 TO '用户名'@'来源地址' [IDENTIFIED BY '密码'];
权限列表: ?用于列出授权使用的各种数据库操作,以逗号进行分隔如"select, insert,update"。 使用"all"表示所有权限(实际上部分权限仍无法使用,只包括大部分权限),可授权执行任何操作。
?? ?数据库名.表名: ?用于指定授权操作的数据库和表的名称,其中可以使用通配符*。 例如,使用"mysql.*" 表示授权操作的对象为mysql数据库中的所有表。 ?? ?'用户名'@'来源地址': ?用于指定用户名称和允许访问的客户机地址,即谁能连接、能从哪里连接。 来源地址可以是域名、IP地址,还可以使用“%”通配符,表示某个区域或网段内的所有地址。
?IDENTIFIED BY: ?用于设置用户连接数据库时所使用的密码字符串。在新建用户时,若省略"IDENTIFIED BY"部分,则用户的密码将为空。
GRANT ALL PRIVILEGES ON *.* TO '用户名'@'来源地址' IDENTIFIED BY '密码';
revoke 权限列表/ALL on [库名.]表名 from '用户名'@'来源地址';
mysql -u 用户名 -p[密码] -h 目标IP/主机名 -P 端口号 #远程连接mysql
注意:远程登录只可登录授权远程登录的用户,像本地主机这样的本机用户是无法远程登录的
create user 'username'@'address' identified by 'password'; ?
#创建用户 ??
?select user,host,authentication_string from mysql.user; ?
#查看用户信息 ??
?rename user old_user to new_user; ? ? ? ?
#修改用户名 ??
?drop user '用户名'@'来源地址'; ? ? ? ? ? ?
#删除用户 ?? ?
set password = password('XXXX'); ? ? ? ?
#修改当前登录用户的密码 ??
?set password for '用户名'@'来源地址' = password('XXXX'); ? ?
#修改其他用户的密码 ??
?select user (); ? ?
?#查看当前登录用户和来源地址 ??
?###忘记root用户密码的解决方法: ?
修改mysql配置文件/etc/my.cnf,在 [mysqld] 配置项下加入 skip-grant-tables
service mysqld restart ? #重启服务
?mysql ? #免密登陆 ?
?update mysql.user set authentication_string=password('新密码') where user='root'; ?
#修改密码 flush privileges; #刷新数据库
grant 权限列表/ALL ON 库名.表名 to 'username'@'address' identified by '密码'; ??? ?
#授予用户权限 ?
show grants; ? ?
#查看当前用户(自己)的权限 ? ? ? ? ? ? ? ?
show grants for 'username'@'address'; ? ? ?
#查看其他用户的权限 ??
?revoke 权限列表/ALL on 库名.表名 from 'username'@'address'; ?
#撤销用户的权限 ?? ?
mysql -u 用户名 -p[密码] -h 目标IP/主机名 -P 端口号 ? ? ? ? ? ?
#远程连接mysql