用户管理
相关数据库和表
元数据数据库:mysql
系统授权表:db, host, user,columns_priv, tables_priv, procs_priv, proxies_priv
用户账号
格式:'USERNAME'@'HOST' 如:wenzi@'192.168.28.10'
HOST支持通配符:% 和 _ 如:wenzi@'192.168.28.%'
创建用户
CREATE USER 'USERNAME'@'HOST' [IDENTIFIED BY 'password'];
mysql> create user wenzi@'localhost' identified by 'Admin.';
新建用户的权限默认为:USAGE
重命名用户
RENAME USER old_user_name TO new_user_name;
mysql> rename user wenzi@'localhost' to zs@'192.168.28.10';
删除用户
DROP USER 'USERNAME'@'HOST'
删除默认的空用户:DROP USER ''@'localhost';
mysql> drop user zs@'192.168.28.10';
用户密码
早期MySQL版本密码存储在mysql.user的password字段;从MySQL5.7开始,password字段被废弃,使用authentication_string字段。若这两个字段都保存了密码,则authentication_string优先。
密码插件
MySQL5.7以前版本
默认密码验证插件是 mysql_native_password
MySQL 5.7 及以后版本
默认密码验证插件变为 caching_sha2_password
MariaDB 10.1.12 以前版本
默认密码验证插件是 mysql_native_password
MariaDB 10.1.12 及以后版本
默认密码验证插件变为 caching_sha2_password
通用修改密码语法
ALTER USER 'username'@'host' IDENTIFIED BY 'new_password';
兼容问题
若要与旧版本的 MySQL 或 MariaDB ,在创建用户或更改用户密码时,可以通过 ALTER USER 语句指定密码验证插件。例如:
ALTER USER 'root'@'localhost' IDENTIFIED WITH 'mysql_native_password' BY 'new_password';
若alter user 语句不能使用,可以使用如下通用语法,且无需指定密码验证插件
SET PASSWORD FOR 'username'@'host' = PASSWORD('new_password');
或非交互式修改
mysqladmin -u root -p password 'new_password'
忘记管理员密码的解决办法
mysql 或 mariadb 通用
1、编辑配置文件
vim /etc/my.cnf
[mysqld]
skip-grant-tables
skip-networking
2、登入数据库,修改密码
mysql 此时是无视密码,可直接登录数据库
alter user root@'localhost' identified by 'newpassword';
3、退出数据库,注释配置文件中的选项
vim /etc/my.cnf
[mysqld]
#skip-grant-tables
#skip-networking
4、重启数据库,验证
systemctl restart mysqld
权限管理
权限级别
Global level:所有库,所有表的权限
Database level:某个数据库中所有表的权限
Table level:某个数据库中某个表的权限
Column level:表中某个字段的权限
授权
grant 权限列表 on 权限范围 to ‘用户名’@’客户端主机’ [with grant option];
权限列表
all为所有权限,select为查询权限,update为更新权限,insert为新增权限;
多个权限间用英文逗号,隔开
权限范围
库名.表名
*.*:所有库所有表
库名.*:某个库下所有表
库名.表名:某个库下某个表
with grant option
被授权的用户可以将自己的权限赋予其它用户
授予用户someuser从somehost主机连接到MySQL数据库时,对mydb数据库中的mytbl表的
col1列执行SELECT操作,对col1和col2列执行INSERT操作
GRANT SELECT (col1),INSERT (col1,col2) ON mydb.mytbl TO 'someuser'@'somehost';
授予用户root从10.0.0.%主机范围连接到MySQL数据库时,对所有数据库和所有表具有所有权限,
且可以将其权限授予其他用户
GRANT ALL PRIVILEGES ON *.* TO 'root'@'10.0.0.%' WITH GRANT OPTION;
取消权限
REVOKE 权限列表 ON 权限范围 FROM 用户名@‘客户端主机’;
取消用户所有权限
REVOKE ALL PRIVILEGES ON *.* FROM 用户名@’主机地址’;
查看权限
查看自己权限
show grants;
查看指定用户权限
show grants for zhangsan@’192.168.174.132′;
刷新权限
FLUSH PRIVILEGES;