mysql--用户与授权
准备工作需要登录数据库
bash-4.2# mysql -u root -p
Enter password:
用户
查看
用户保存在mysql数据库的user表里
mysql> select user,host from mysql.user;
+---------------+-----------+
| user | host |
+---------------+-----------+
| root | % |
| mysql.session | localhost |
| mysql.sys | localhost |
| root | localhost |
+---------------+-----------+
4 rows in set (0.00 sec)
新建
格式
create user 'username'@'ip' [IDENTIFIED BY 'password']
- username: 指定将创建的用户名
- ip: 指定新创建的用户可在哪些主机上登录,可以使用IP地址段,网段,主机名的形式,本地用户可以用localhost,允许任意主机登录,可使用通配符%。
- password: 若使用明文密码,直接输入‘密码’,插入到数据库时由mysql自动加密,若使用加密密码,需要先使用select password(‘密码’) ,获取密文,再在语句中添password’密文’。
- 若省略‘IDENTIFIED BY’ 部分,则用户的密码将为空(不建议使用)
示例
创建一个新用户 testuser 密码为 testuserpass
- 可以在任意机器上登录 CREATE USER 'testuser'@'%' IDENTIFIED BY 'testuserpass';
- 在前缀为192.168的任意机器上登录,%表示任意 create user 'testuser'@'192.168.%' identified by 'testuserpass';
- 只能在IP为192.168.0.1机器上登录 CREATE USER 'testuser'@'192.168.0.1' IDENTIFIED BY 'testuserpass';
删除
删除用户testuser
drop user 'testuser'@'%';
更新
将testuser的用户名更改为testuser1,并且修改用户的登录ip
rename user 'testuser'@'%' to 'testuser1'@'localhost';
修改密码
当前登录用户
修改当前用户的密码为abcd1234,任何的用户都能执行此语句
set password = password('abcd1234');
其他用户
修改用户testuser的密码为‘abcd1234’(需要在root用户下修改别的用户)
set password for 'testuser'@'%' = password('abcd1234');
忘记root密码
- 修改/etc/my.cnf 配置文件,设置免密登录mysql的root用户
[mysqld]
skip-grant-tables #添加,使得登录mysql不使用授权表
-
重启mysql服务
-
登录,因为取消了登录授权,使用mysql就能登录成功
-
mysql
-
更改密码为abcd1234
update mysql.user set authentication_string = password('abcd1234') where user='root';
flush privileges;
- 将配置文件中的ship-grant-tables删除,并重启
授权
查看
mysql> show grants for 'testuser'@'%';
+------------------------------------------------------+
| Grants for testuser@% |
+------------------------------------------------------+
| GRANT PROCESS ON *.* TO `testuser`@`%` |
| GRANT ALL PRIVILEGES ON `testDB`.* TO `testuser`@`%` |
+------------------------------------------------------+
2 rows in set (0.00 sec)
授权
格式
grant 权限 on 数据库名.表名 to 'username'@'ip';
- 权限列表: 用于列出权限使用的各种数据库操作,以逗号进行分隔,如“select ,insert,update”。如果使用“all” 表示所有权限,可授权执行的任何操作。
- 数据库名.表名: 用于指定授权操作的数据库和表的名称,其中可以使用通配符""。例如:使用"wk."表示授权操作的对象为kgc数据库中的所有的表。
- 'username'@'ip': 用于指定用户名称和允许访问的客户机地址,就是谁能连接,能从哪里连接,来源地址可用是域名,ip,还可以使用%通配符,表示某个区域网段内的所有地址,如“%.ydq.com”、"20.0.0.%"等。
给用户wangkuo赋予wk库中所有表的权限
grant all privileges on wk.* to 'wangkuo'@'%';
flush privileges;
撤销权限
格式
revoke all privileges on 数据库 from '用户名'@'IP地址'
撤销wangkuo用户的wk库的所有查询权限 revoke select on wk.* from 'wangkuo'@'%';
可能会出现的错误
Access denied; you need (at least one of) the PROCESS privilege(s) for this operation
GRANT PROCESS ON *.* TO 'wangkuo'@'%';
flush privileges;
授权远程访问
8.0之前的版本
# 修改root的用户密码为123456@.Qaz
ALTER USER 'root'@'localhost' IDENTIFIED BY '123456@.Qaz';
#授权所有主机都可以通过root用户,密码123456@.Qaz,进行访问数据库 %:代表所有主机,也可以具体到主机ip地址
grant all privileges on *.* to 'root' @'%' identified by '123456@.Qaz';
#刷新权限
flush privileges;
8.0后的版本的版本
#删除用户
drop user root@'%';
#开通远程访问(8版本后)
#创建用户
create user root@'%' identified by '23456@.Qaz';
#授权远程访问
grant all privileges on *.* to root@'%' with grant option;
#刷新权限
flush privileges;
注意:本文归作者所有,未经作者允许,不得转载