mysql--用户与授权

anjingsi 1年前 ⋅ 586 阅读

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;

全部评论: 0

    我有话说: