一.MySQL权限分类
- mysql.user 全局权限
- mysql.db 只能操作某个数据库
- mysql.table_priv 只能操作某个表
- mysql.columns 只能对某个列进行操作
二.查看用户权限
show grants; -- 查询当前用户权限
grants for root@localhost; --查询用户root的权限
三.用户管理
查询用户 (以root身份登录)
use mysql; -- 系统数据库
select * from user; -- 用户都在mysql.user表
创建用户
(1)使用CREATE USER语句创建用户
create user ‘用户名’@’主机名’ identified by ‘密码’;
#没指定主机名,那么主机名默认为“%”,表示一组主机,即对所有主机开放权限
(2)使用INSERT语句新建用户
当拥有对mysql.user表的INSERT权限后,可使用INSERT语句将用户的信息添加到mysql.user表中。
INSERT INTO mysql.user(Host, User, authentication_string,...) VALUES ('hostname', 'username','password',....);
#通常INSERT语句只添加Host、User和authentication_string这3个字段的值
注意:如果通过该账户登录MySQL服务器,不能成功,是因为新创建的用户还没有生效。可以使用FLUSH命令让用户生效,命令如下: FLUSH PRIVILEGES;
删除用户
语法格式如下:
DROP USER ‘用户名’@’主机名’;
delete from mysql.user WHERE Host='hostname' AND User='username';
#delete使用时需用户拥有mysql.user表的DELETE权限才能进行
修改用户名
rename ‘旧用户名’@’主机名’ to ‘新用户名’@’主机名’
修改用户密码
alter user ‘用户名’@’主机名’ indentified by ‘新密码’;
四.权限管理
1.查看用户权限
show grants for ‘用户名’@‘主机名’ ;
2.授予用户权限
GRANT PRIVILEGES ON DATABASE.TABLE TO "用户名"@"主机名";
- PRIVILEGES代表要赋予用户的权限
- DATABASE是数据库名,可以用*代表所有的数据库
- TABLE是数据表名,可以用*代表所有的数据表
- “用户名”和“主机名”标识要授权的登陆用户
3.删除用户权限
revoke 权限列表 on 对象类型 对象名 from ‘用户名’@’主机名’..... ;
案例
建立用户admin,密码"123456",在所有机器上均可登录 对所有数据库的数据表都有权限
#建立用户create user 'admin' identified by '123456'; #用户授权grant all on *.* to 'admin' identified by '123456' with grant option; #测试 select host,user,Update_priv,Alter_priv from mysql.user where user='admin' ;
建立用户user
,密码为888888
,在本机(172.0.0.1)
登录,对province
数据库的jdxx
数据表有查询权限
use province; #建立用户create user 'user'@'172.0.0.1' identified by '888888'; #用户授权 grant select on table jdxx to 'user'@'172.0.0.1'; #代码结束select host,db,table_name,Table_priv from mysql.tables_priv where user='user';
建立用户user,在本机(172.0.0.1)登录,密码为666666.对数据库province库的所有数据表有所有的权限,对数据库library库的book表有查询的权限
#代码开始#建立用户create user 'user' @'172.0.0.1' identified by '666666';#用户授权grant all on province.* to 'user'@'172.0.0.1';grant select on library.book to 'user'@'172.0.0.1'; #代码结束select host,db,user,Delete_priv,Index_priv from mysql.db where user='user' ;select host,db,table_name,Table_priv from mysql.tables_priv where user='user';
table_priv表结构如下图
来源地址:https://blog.csdn.net/m0_62428181/article/details/128007580