MySQL用户权限管理
1.linux用户和mysql用户对比
|
linux系统 |
mysql数据库 |
用户的作用 |
1.登录系统 2.管理系统文件、服务 |
1.登录数据库 2.管理数据库数据 |
创建用户 |
1.useradd 2.adduser |
1.create user root@'localhost'; 2.grant ... |
用户密码 |
1.password lhd 2.useradd lhd -p 12345678 |
1.create user 2.grant 3.mysqladmin |
删除用户 |
1.userdel -r |
1.drop user root@'localhost'; 2.delete |
修改用户 |
1.usermod |
1.update 2.grant |
2.在mysql中,用户是怎么定义的?
#在MySQL中,一个完整的用户是: '用户'@'主机域'
#创建一个用户后一定要刷新授权表才生效!!!
1.用户名定义方法:
1)如果是数字为用户名,需要加引号
mysql> create user '123'@'locahost';
mysql> flush privileges;
2)如果是字符为用户名,不需要加引号
mysql> create user lhd@'locahost';
mysql> flush privileges;
2.主机域的定义方式:
1)localhost
2)127.0.0.1
3)db01
4)::1
5)%
6)10.0.0.% (10.0.0.1-255)
7)10.0.%.%
8)10.%.%.%
9)10.0.0.5% (10.0.0.50-59)
10)10.0.0.0/255.255.255.0
#可以设置,但是不能使用该用户连接
11)10.0.0.0/24
3.用户管理
1)创建用户并设置密码
mysql> create user lhd@'172.16.1.%' identified by '123';
Query OK, 0 rows affected (0.02 sec)
mysql> flush privileges;
2)查看用户
mysql> select user,host from mysql.user;
+--------+------------------------+
| user | host |
+--------+------------------------+
| qiudao | 10.0.0.0/24 |
| lhd | 10.0.0.0/255.255.255.0 |
| lhd | 172.16.1.% |
| root | localhost |
+--------+------------------------+
4 rows in set (0.00 sec)
3)删除用户
mysql> drop user qiudao@'10.0.0.0/24';
Query OK, 0 rows affected (0.00 sec)
4)修改用户密码
#1.方式一:命令行修改密码
[root@db02 /service]# mysqladmin -uroot -p password
Enter password: 123456
New password: 123
Confirm new password: 123
#2.方式二:授权的方式修改密码
mysql> grant all on *.* to lhd@'10.0.0.0/255.255.255.0' identified by '123456';
Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges;
#3.方式三:更新数据库密码
mysql> update mysql.user set password=PASSWORD('123456') where user='lhd' and host='172.16.1.%';
Query OK, 1 row affected (0.01 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> flush privileges;
#4.方式四:直接设置密码
mysql> set password=PASSWORD('123456');
Query OK, 0 rows affected (0.00 sec)
5)忘记root密码怎么办
#1.停止数据库
#2.跳过授权表和网络启动
#3.连接数据库
#4.刷新授权表
#5.修改密码
#6.正常启动数据库
4.权限管理
1)权限管理的命令
mysql> grant all on *.* to root@'172.16.1.51' identified by '123';
mysql> flush privileges;
grant all on *.* to root@'172.16.1.51' identified by '123';
grant # 授权命令
all # 所有权限
on # 在。。。上
*.* # 所有库.(包含)所有表
to # 给。。
root@'172.16.1.51' # 定义的用户 '用户名'@'主机域'
identified # 设置密码
by # 是
'123';
2)查看所有权限
#1.回收权限
mysql> revoke select on *.* from root@'172.16.1.51';
Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges;
#2.查看用户的权限
mysql> show grants for root@'172.16.1.51';
#3.所有权限包括:
SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER, CREATE TABLESPACE, GRANT
5.授权的对象
grant all on *.* to root@'172.16.1.%' identified by '123'; # 所有库下的所有表
grant all on mysql.* to root@'172.16.1.%' identified by '123'; # mysql库下的所有表,单库授权
grant all on mysql.user to root@'172.16.1.%' identified by '123'; # 单表授权
#单列授权,企业称之为脱敏,脱敏:脱离敏感信息
1.普通用户只能查看用户名字
mysql> grant select(user) on mysql.user to diaosi@'172.16.1.%' identified by '123';
mysql> flush privileges;
2.VIP用户可以查看用户用户较多的信息
mysql> grant select(user,host) on mysql.user to diaosi@'172.16.1.%' identified by '123';
mysql> flush privileges;
3.超级VIP可以查看用户所有的信息
mysql> grant select on mysql.user to diaosi@'172.16.1.%' identified by '123';
mysql> flush privileges;
# 单列授权,企业中叫做脱敏,脱敏:脱离敏感信息
6.在企业里一般我们怎么给权限
#开发要一个用户登录数据库
1.跟开发沟通:
1)你要操作的是哪个库哪个表
2)你要对这个表进行哪些操作
3)你从哪个IP连过来
4)你对用户名的要求
5)你对密码有什么要求
6)你的用户要用多久
7)发邮件
2.一般怎么授权
grant select,insert,update on mysql.* to dev@'172.16.1.51' identified by 'Dev@123456';
flush privileges;
3.开发要root用户怎么办?
7.授权总结
1.不同级别授权,权限是相加关系
2.不推荐在多级别定义重复的权限
3.常见的授权方式是单库授权
grant select,insert,update on mysql.* to dev@'172.16.1.51' identified by 'Dev@123456';
mysql> flush privileges;
4.如果涉及到用户的敏感信息,可以使用脱敏,单列授权
5.查看用户的权限
mysql> show grants for root@'172.16.1.%';