MySQL之User(用户)和Privilege(权限)
用户管理
在mysql库user表中存储着所有用户:
SELECT * FROM user\G
主要字段含义:HOST:访问端 USER:用户 authentication_string:密码(加密格式)
①创建用户
CREATE USER 用户名[@访问端(ip/localhost)] identified by ‘密码’
创建新用户,默认所有远程主机(同 %),此处指定访问端时可使用通配符(%,_)
②修改名称
RENAME USER 用户名@访问端 TO 新用户名@访问端
③修改密码(mysql8.0之后)
修改当前用户密码:ALTER USER USER() IDENTIFIED BY ‘新密码’
修改其他用户密码:
ALTER USER 用户名@访问端 IDENTIFIED BY ‘新密码’
SET PASSWORD FOR 用户名@访问端 = ‘新密码’ (5.7版本前为PASSWORD(‘新密码’)
④删除用户
DROP USER 用户名@访问端
TIPS:
⑴关于 FLUSH PRIVILEGES
使用账号管理语句修改权限表,mysql服务会注意到这些改动并立即将其加载到内存当中。
账号管理语句包括GRANT, REVOKE, SET PASSWORD, RENAME USER四个。
INSERT, UPDATE, DELETE(DELETE不推荐使用)修改权限表,即MYSQL.USER表
除非你重新加载这个表,或者重启数据库,这些操作是不会影响权限检查的,此时需用FLUSH PRIVILEGES(重新加载)。
⑵有关mysql8.0之后连接SQLyog的问题
由于加密方式的改变,使得SQLyog无法正常识别用户密码,此时需修改密码加密的格式
ALTER USER 用户名@访问端 IDENTIFIED WITH mysql_native_password BY ‘新密码’
权限管理
在mysql库user表中以_priv结尾字段均为权限
①权限授予
GRANT:
GRANT INSERT/DELETE/SELECT/UPDATE等(权限类型) ON 数据库.表 TO 用户名@访问端
PS:所有权限:all privileges 所有库及所有表:*·*
在用户名@访问端 后跟 IDENTIFIED BY ‘密码’ 时,若用户不存在,则会直接创建并授权
在用户名@访问端 后跟 WITH GRANT OPTION ,表明允许该用户将权限授予其他用户
如:
GRANT all privileges ON *.* TO user01@'%' WITH GRANT OPTION;
②权限收回
REVOKE:REVOKE 权限名 ON 数据库.表 FROM 用户@访问端