「前言」文章内容大致是MySQL的用户管理。
「归属专栏」MySQL
「主页链接」个人主页
「笔者」枫叶先生(fy)
在MySQL里,默认带有一个mysql
的数据库
该数据库中有一张user
表
该表存放的就是MySQL用户相关的信息(\G
按行打印)
部分字段说明:
user
:表示该用户的用户名host
:表示这个用户可以从哪个主机登陆,如果是localhost
,表示只能从本机登陆,%
表示可以从任意地方登录authentication_string
:用户密码通过password函数加密后形成的字符串*_priv
(xxx_priv
):表示用户拥有的权限,Y拥有该权限,N没有查看当前用户
select user();
注:root是用户名,localhost是主机名
创建用户的SQL如下:
create user '用户名'@'登陆主机/ip' identified by '密码';
创建一个用户名为test,可以从任意地方登录的用户
create user 'test'@'%' identified by '123123aa';
注:%
表示可以从任意地方登录,是localhost
,表示只能从本机登陆
MySQL本身的认证级别比较高,因此创建用户时设置的密码不能太简单,否则会出现报错,这时你可以选择将密码设置复杂一些,也可以对密码相关的设置进行调整
要降低MySQL输入密码的安全强度,可以通过修改validate_password
的相关变量来实现
查看当前的validate_password相关变量
show variables like 'validate_password%';
validate_password_policy
的默认值为1,表示密码必须包含数字、小写字母、大写字母和特殊字符。将其设置为0将禁用这些要求
set global validate_password_policy=0;
创建新用户成功后,该用户的相关信息也就被写入到刚才的user表中了,进行查看该用户(信息太多,进行过滤)
select user,host,authentication_string from user;
可以用新创建的普通用户来连接MySQL服务器
创建的这个用户可以从任意地方登录,因此如果你在Windows下也安装了MySQL,那么就可以在Windows的cmd窗口进行远程登录
注意:
删除用户语法如下:
drop user '用户名'@'主机名';
例如,删除上面的test用户
drop user 'test'@'%';
自己改自己密码
语法如下:
set password=password('新的密码');
root用户修改指定用户的密码
语法如下:
set password for '用户名'@'主机名'=password('新的密码');
MySQL数据库提供的权限列表
注意:新创建的用户没有任何权限,因此创建用户后需要给用户授权
刚创建的用户没有任何权限,需要给用户授权,语法如下:
grant 权限列表 on 库.对象名 to '用户名'@'登陆地址/ip' [identified by '密码']
说明:
to
:to后面跟的是用用户,表示给哪一个用户授权库名.对象名
:表示要授予用户哪个数据库下的哪个对象(表)的权限*.*
: 代表本系统中的所有数据库的所有对象(表,视图,存储过程等)库.*
: 表示某个数据库中的所有数据对象(表,视图,存储过程等)identified by
可选项:如果用户存在,赋予权限的同时修改密码,如果该用户不存在,就是创建用户权限列表
:表示要授予用户何种权限,多个权限之间用逗号隔开-- 权限列表,例如
grant select on ... -- 赋予select权限
grant select, delete, create on -- 表示赋予select, delete, create权限
grant all [privileges] on ... -- 表示赋予该用户在该对象上的所有权限
创建一个新用户zhangsan,然后通过一些命令可以查看该用户现有的权限
show grants for '用户名'@'登录地址';
例如:
show grants for 'zhangsan'@'localhost';
注:
USAGE
权限,该权限只能用于数据库登录,不能执行任何操作查看该用户的数据库,只有一个系统自带的,root用户下的数据库普通用户看不到
在root用户下创建一个test_db的数据库,授予zhangsna用户在test_db数据库下所有对象的select权限
grant select on test_db.* to 'zhangsan'@'localhost';
注:*.*
表示所有数据库的所有对象,库名.*
表示某个数据库的所有对象(表、视图、存储过程等)
此时查看该用户的数据库,就能查看到该数据库了
该用户目前只能查看表中的信息,而不能对表中的数据进行其他操作,如果需要进行其他操作,需要赋予相应的权限
下面将test_db该数据库的所有权限赋予给该用户,授权之后该用户就可以对该数据库进行任何操作了(不演示了)
grant all on test_db.* to 'zhangsan'@'localhost';
注意:如果发现赋权限后,没有生效,执行如下指令:
flush privileges;
回收用户权限SQL语法如下:
revoke 权限列表 on 库.对象名 from '用户名'@'登陆地址/ip';
回收权限的语法与授权语法相似,不解释了
例如,将zhangsan用户在test_db数据库的所有权限进行回收
revoke all on test_db.* from 'zhangsan'@'localhost';
注意:如果回收权限时该用户正在使用对应数据库,那么回收权限后该用户仍然拥有对应的权限,只有下一次该用户再进入该数据库时新权限才会起作用
--------------------- END ----------------------
「 作者 」 枫叶先生
「 更新 」 2023.9.13
「 声明 」 余之才疏学浅,故所撰文疏漏难免,
或有谬误或不准确之处,敬请读者批评指正。