6、Mysql创建用户以及授权

When you look into the abyss, the abyss looks into you. / 2023-07-30 / 原文

文件夹就是数据库

文件就是表

数据行就是行

 

data下的mysql这个数据库里有张User表,里面保存了用户信息

 

show databases;查看所有数据库

 

use mysql;

使用这个use数据库(进入这个文件夹)

 

show tables;

查看这个数据库下所有的表(文件)

文件最后有个user,我们登陆mysql服务器的时候,它就是在这里看有没有用户名和密码的

 

select user from user;查看user表下的user列

我能不能给它创建一个用户,以后登录的时候,不但可以用root,还可以用其他的用户

 

创建用户

create user "用户名"@"IP地址" identified by "密码"; 

比如说

create user "zhangsan"@"192.168.1.1" identified by "123";

表示创建了一个用户叫zhangsan,这个用户只能在192.168.1.1这台机器上才能登录,密码是123

create user "zhangsan"@"192.168.1.%" identified by "123";

表示创建了一个用户叫zhangsan,%表示任意,表示ip是192.168.1这个前缀的都能登录,密码是123
create user 'zhangsan'@'%' identified by '123';
表示创建了一个用户叫zhangsan,所有机器上都能登录,密码是123
 
创建完用户之后,我们还得授权,就是让他能看哪个目录,或者只能看哪个目录的哪个文件
也就是只能看某个数据库,或者某个数据库里的某个表
授权有2个特点:
1、给谁授权
2、权限是什么
 
授权
grant 权限 on 数据库.表 to "用户"@"IP地址";
 
grant select,insert,update on db1.t1 to "zhangsan"@"%";
表示zhangsan这个用户在任何机器上都能对db1数据库下的t1表做查询、插入、更新
 
设置权限的命令叫grant
on db1.*
表示查看db1目录下所有的东西,*表示这个目录下所有的文件
on *.*表示所有数据库下的所有表
如果db1下面有3个表,分别是t1、t2、t3,直接写db1.t1表示只能看db1下的t1文件,其他表都没有任何权限,看不到也做不了操作。
 
权限有了,接下来该说给哪个用户了
to表示给哪个用户 
grant all privilleges on db1.t1 to 'zhangsan'@'%';
表示zhangsan这个用户在任何机器上都能对db1数据库下的t1表做除了授权以外的任何权限
all privileges表示除了grant以外的所有权限
root是最高管理员,可以给某个人授权

 

连起来搞一遍

先创建用户

create user 'zhangsan'@'%' identified by '123';

接着给zhangsan授权

grant all privileges on db1.* to 'zhangsan'@'%';
接下来我们再打开一个终端,输入下面命令
mysql -u zhangsan -p123;

 show databases我们只能看到一个db1,information_schema是相关信息的,可以忽略它

 

在公司里数据库都是dba来搞的,dba给你创建个数据库,你这个程序只能用这个数据库,再给你创建个用户,你以后用这个用户进这个数据库就行了。咱们是看不到其他数据库的

就应该是这样,如果黑客黑了你的程序,它拿到了用户名和密码,他通过用户名和密码登录进来,也只能看这个数据库,跟你公司其他业务的数据库是不是没有关系,相当于我们把数据库和数据库通过用户进行分离,真正在公司开发的时候,dba给你提供一个用户名和密码,然后你拿着用户名和密码去登录就可以了。

 

取消授权

revoke all privileges from db1.t1 to "zhangsan"@"%";

这条命令就把张三这用户关于db1下的t1文件的所有权限都取消了

 

select * from 表名;

表示查看这个表下面所有的列

select name from 表名;

只查看这个表下name这一列

select name,age,id from 表名;

要看很多列,用逗号隔开,真实显示的时候跟你数据库里写的列的顺序是没有关系的,是按照你在select后面的写的先后顺序来显示