DB:数据库,存储数据的容器。
DBMS:数据库管理系统,又称为数据库软件或数据库产品,用于创建或管理DB。
SQL:结构化查询语言,用于和数据库通信的语言,不是某个数据库软件持有的,而是几乎所有的主流数据库软件通用的语言。
bit
、bool
、tinyint
、smallint
、mediumint
、int
、bigint
float
、double
、decimal
char
、varchar
、tinyblob
、blob
、mediumblob
、longblob
、tinytext
、text
、mediumtext
、longtext
Date
、DateTime
、TimeStamp
、Time
、Year
Mysql权限验证分为2个阶段:
阶段1:连接数据库,此时mysql会根据你的用户名及你的来源(ip或者主机名称)判断是否有权限连接
阶段2:对mysql服务器发起请求操作,如create table、select、delete、update、create index等操作,此时mysql会判断你是否有权限操作这些指令
权限生效时间
用户及权限信息放在库名为mysql的库中,mysql启动时,这些内容被读进内存并且从此时生效,所以如果通过直接操作这些表来修改用户及权限信息的,需要重启mysql
或者执行flush privileges;
才可以生效。
查看mysql中所有用户
用户信息在mysql.user
表中
创建用户
语法
create user 用户名[@主机名] [identified by '密码'];
说明:
主机名默认值为%,表示这个用户可以从任何主机连接mysql服务器
密码可以省略,表示无密码登录
示例1:test1的主机为localhost表示本机,此用户只能登陆本机的mysql
create user 'test1'@'localhost' identified by '123';
示例2:test2可以从任何机器连接到mysql服务器
create user 'test2'@% identified by '123';
示例3:test3可以从192.168.11段的机器连接mysql
create user 'test3'@'192.168.11.%' identified by '123';
修改密码
方式1:通过管理员修改密码
SET PASSWORD FOR '用户名'@'主机' = PASSWORD('密码');
方式2:create user 用户名[@主机名] [identified by '密码'];
set password = password('密码');
方式3:通过修改mysql.user表修改密码
use mysql;
update user set authentication_string = password('321') where user = 'test1' and host = '%';
flush privileges;
注意:通过表的方式修改之后,需要执行flush privileges;
才能对用户生效
给用户授权
用户创建以后,需要给用户授权,才有意义
语法:
grant privileges ON database.table TO 'username'[@'host'] [with grant option]
说明:
priveleges (权限列表),可以是all
,表示所有权限,也可以是select、update
等权限,多个权限之间用逗号分开。
ON 用来指定权限针对哪些库和表,格式为数据库.表名
,点号前面用来指定数据库名,点号后面用来指定表名,*.* 表示所有数据库所有表。
TO 表示将权限赋予某个用户, 格式为username@host
,@前面为用户名,@后面接限制的主机,可以是IP、IP段、域名以及%,%表示任何地方。
WITH GRANT OPTION 这个选项表示该用户可以将自己拥有的权限授权给别人。注意:经常有人在创建操作用户的时候不指定WITH GRANT OPTION选项导致后来该用户不能使用GRANT命令创建用户或者给其它用户授权。
备注:可以使用GRANT重复给用户添加权限,权限叠加,比如你先给用户添加一个select权限,然后又给用户添加一个insert权限,那么该用户就同时拥有了select和insert权限
示例1:给test1授权可以操作所有库所有权限,相当于dba
grant all on *.* to 'test1'@‘%’;
示例2:给test1授权可以操作所有库所有权限,相当于dba
grant select on seata.* to 'test1'@'%';
示例3:test1可以对seata库中所有的表执行select、update
grant select,update on seata.* to 'test1'@'%';
示例4:test1用户只能查询mysql.user表的user,host字段
grant select(user,host) on mysql.user to 'test1'@'localhost';
查看用户权限
show grants for '用户名'[@'主机']
主机可以省略,默认值为%
查看当前用户的权限:show grants;
撤销用户的权限
语法:
revoke privileges ON database.table FROM '用户名'[@'主机'];
可以先通过show grants
命令查询一下用户对于的权限,然后使用revoke
命令撤销用户对应的权限,示例:
mysql> show grants for 'test1'@'localhost';
+--------------------------------------------------------------------+
| Grants for test1@localhost |
+--------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'test1'@'localhost' |
| GRANT SELECT (host, user) ON `mysql`.`user` TO 'test1'@'localhost' |
+--------------------------------------------------------------------+
2 rows in set (0.00 sec)
mysql> revoke select(host) on mysql.user from test1@localhost;
Query OK, 0 rows affected (0.00 sec)
mysql> show grants for 'test1'@'localhost';
+--------------------------------------------------------------+
| Grants for test1@localhost |
+--------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'test1'@'localhost' |
| GRANT SELECT (user) ON `mysql`.`user` TO 'test1'@'localhost' |
+--------------------------------------------------------------+
2 rows in set (0.00 sec)
上面我们先通过grants
命令查看test1的权限,然后调用revoke命令撤销对mysql.user
表host
字段的查询权限,最后又通过grants命令查看了test1的权限,和预期结果一致
删除用户【2种方式】
1,rop user '用户名'[@‘主机’],示例:
mysql> drop user test1@localhost;
Query OK, 0 rows affected (0.00 sec)
drop的方式删除用户之后,用户下次登录就会起效
2,通过删除mysql.user表数据的方式删除,如下:
delete from user where user='用户名' and host='主机';
flush privileges;
注意通过表的方式删除的,需要调用flush privileges;
刷新权限信息(权限启动的时候在内存中保存着,通过表的方式修改之后需要刷新一下)。