1. 新建用户
create user '用户名'@'来源地址' [IDENTIFIED BY [PASSWORD] '密码'];
'用户名': 指定将创建的用户名。
'来源地址': 指定新创建的用户可在哪些主机上登录,可使用IP地址、网段、主机名的形式,本地用户可用localhost, 允许任意主机登录可用通配符%
'密码':
- 若使用明文密码,直接输入'密码',插入到数据库时由Mysql自动加密;
- 若使用加密密码,需要先使用
SELECT PASSWORD('密码');获取密文,再在语句中添加PASSWORD '密文'; - 若省略"IDENTIFIED BY" 部分,则用户的密码将为空(不建议使用)
1.1 铭文加密创建用户
create user '用户'@'登录地址' identified by '密码';
列子:
create user 'zhangsan'@'localhost' identified by '123456';
虽然使用的是铭文创建的用户密码,但是MySQL会自动把铭文的密码转换成密文进行保存
Host #登陆主机
User #用户名
authentication_string #加密的认证信息
1.2 密文加密创建用户
加密密码
select password('123456');
创建用户以后使用加密过后的密码
create user 'lisi'@'localhost' identified by password '*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9';
1.3 MySQL查看当前登录的用户
select user();
1.4 更换用户的名称,登录地址
rename user '旧用户名'@'登录主机' to '新用户名'@'登录主机';
例子:
rename user 'zhangsan'@'localhost' to 'wangwu'@'%';
1.5 删除一个用户
drop user '用户'@'登录地址'
列子:
drop user 'lisi'@'localhost';
1.6 修改用户密码
直接这样修改默认修改的是当前用户的密码
set password = password('密码');
set password for '用户'@'%' = password('新密码')
set password for 'wangwu'@'%' = password('abc123');
1.7 登录密码忘记,修改密码
vim /etc/my.cnf
[mysqld]
skip-grant-tables #不再使用授权表验证
systemctl restart mysqld.service #重启一下MySQL
1.8 修改表的配置
update user set authentication_string = password('abc123') where user='root' and host='localhost';
想要立即生效就要授权
flush privileges;
2. 新的用户对MySQL是没有任何操作权限的
2.1 实现远程登录(未授权无法登陆)
-h #指定IP地址
-P(大写) #指定MySQL端口号
3. 数据库用户授权
3.1 授予用户权限
GRANT语句:专门用来设置数据库用户的访问权限。
- 当指定的用户名不存在时,GRANT语句将会创建新的用户;
- 当指定的用户名存在时,GRANT 语句用于修改用户信息
GRANT 权限列表 ON 数据库名.表名 TO '用户名'@'来源地址' [IDENTIFIED BY '密码'];
--------------以下是注释----------------------------------------------
权限列表:
用于列出授权使用的各种数据库操作,以逗号进行分隔如"select, insert,update"。
使用"all"表示所有权限(实际上部分权限仍无法使用,只包括大部分权限),可授权执行任何操作。
数据库名.表名:
用于指定授权操作的数据库和表的名称,其中可以使用通配符*。
例如,使用"mysql.*" 表示授权操作的对象为mysql数据库中的所有表。
'用户名'@'来源地址':
用于指定用户名称和允许访问的客户机地址,即谁能连接、能从哪里连接。
来源地址可以是域名、IP地址,还可以使用“%”通配符,表示某个区域或网段内的所有地址,如“%.ww.com"、 “192.168.85.10"等。
IDENTIFIED BY:
用于设置用户连接数据库时所使用的密码字符串。在新建用户时,若省略"IDENTIFIED BY"部分,则用户的密码将为空。
3.2 允许用户 zhangsan 在本地查询w1数据库中所有表的数据记录,但禁止查询其他数据库中的表的记录。使用密码“ABC123”进行登录。
grant select on ww.* to 'lisi'@'%' identified by 'abc123';
3.3 允许用户 lisi 在所有终端远程连接mysql,并拥有所有权限。使用密码“ABC123”进行登录
grant all on *.* to 'lisi'@'%' identified by 'abc123';
3.3 使用lisi用户远程登录数据库并查看
mysql -u lisi -pabc123 -h 192.168.85.10 -P3306
#-pabc123,小写p指定登录密码
#-P3306,大写P指定端口号
#-h 192.168.85.10,指定目标IP/主机名
3.4 查看用户的权限
show grants; 查看当前登录用户的权限
show grants for 用户名@来源地址; #查看其他用户的权限
例子:
shwo grants for 'lisi'@'%';
3.5 USAGE特权说明符:
USAGE特权说明符,表示“无特权”。它与GRANT一起在全局级别上使用,以在不影响现有帐户特权的情况下修改帐户属性(例如资源限制或SSL特征)。
USAGE是一种在没有授予任何真实特权的情况下告诉MySQL帐户存在的方法。因此,他们仅具有使用 MySQL服务器的权限USAGE。它对应于mysql.user表中未设置特权的行。
对于
GRANT USAGE ON,查看⼿册有如下介绍和实例: mysql> GRANT USAGE ON . TO 'zhangkh'@'localhost’;⼀个账户有⽤户名zhangkh,没有密码。该账户只⽤于从本机连接(即登录MySQL)。未授予权限。通过GRANT语句中的USAGE权限,你可以创建账户⽽不授予任何权限。它可以将所有全局权限设为'N'。假定你将在以后将具体权限授予该账户。
3.6 撤销用户的权限
revoke 权限列表/ALL on 库名.表名 from '用户名'@'来源地址';
如果用户的权限是针对具体的库和表,那么在撤销权限时,也需要指定库和表,不能写成 *.* 的形式,否则命令不生效。
#这条命令不生效,需要指定库和表。
revoke all on *.* from 'lisi'@'%';
#撤销用户对school库内所有表的权限
revoke all on ww.* from 'zhangsan'@'localhost';
4. 授权用户权限是 all privilege,这个all privilege都有哪些权限
| all privilege | 插入数据 |
|---|---|
| insert | 查询数据 |
| select | 更新表的数据 |
| update | 更新表中的数据 |
| delete | 删除表中数据 |
| create | 创建库,表 |
| drop | 删除库,表 |
| refernces | 建立外键关系权限 |
| index | 建立索引 |
| alter | 更改表属性 |
| create temp orary tables | 创建临时表 |
| lock tables | 锁表 |
| execute | 存储 |
| create view | 创建视图 |
| show view | 显示视图 |
| create routine | 创建存储过程 |
| alter routine | 修改存储过程 |
| event | 事件 |
| trigger on | 创建触发器 |
5. 总结
MySQL的相关使用可查看官方手册:
MySQL :: MySQL 8.0 Reference Manual :: 6.2.2 Privileges Provided by MySQL
创建用户
create user '用户名'@'登录地址' identified by '密码';
修改用户名
rename user '旧用户名'@'登录地址' to '新用户名'@'登录地址';
删除用户
drop user '用户名'@'登录地址'
查看用户信息
select user,host,authentication_string from mysql.user;
查看当前登录的用户
select user();
修改当前用户密码
set password = password('新密码');
修改其他用户
set password for '用户名'@'登录地址' = password('新密码')
忘记MySQL密码
先修改MySQL配置文件,在[mysqld]下面添加 skip——grant-tables ,重启MySQL服务后使用mysql 直接登录,update语句修改 mysql.user 表中的 authentication_string 的值即可
授权,创建用户,修改密码
grant 权限列表/all on 库.表 to '用户名'@'登录地址' identified by '密码';
查看权限
show grants; #查看当前登录的用户的权限
show grants for '用户'@'登录地址'; #查看其他用户的权限
撤销权限
revoke 权限列表/all on 库.表 from '用户'@'登录地址'; #不会撤销登录权限 USAGE
远程登录
mysql -u 用户名 -p密码 -h 远程地址 -P 端口号