mysql用户和权限管理

用户和权限管理,会在内存中读取几个表,分别是:
user:关于用户账号、全局权限
host:这种表目前已经废弃(已经整合到user表中)
db:库级别权限
table_priv:表级别权限
column_priv:列级别权限
procs_priv:存储过程和存储函数相关的权限
proxies_priv:代理用户权限

用户账号:
用户名@主机组成
用户名:
可以是主机名:www.magedu.com,mysql
可以是ip:172.16.100.1
可以是网络地址:172.16.0.0/255.255.0.0
还可以是通配符:172.16.%.%,%.magedu.com

权限级别:
全局级别
库级别
表级别
列级别
存储过程和存储函数级别

命令用法:
help create user; #查看create user的用法
create user user_name@host identified by ‘password’;
user_name@’%’ #%代表所有主机
show grants for user_name@host; #查看用户权限
usage代表没有任何权限(但是基本的查看权限还是有的,这种不需要经过授权)
flush privileges; #重读授权表,使配置生效

help grant; #查看grant命令帮助
grant all privileges on [object_type] db.* to user_name@’%’;

#object_type指明类型,是table、function、procedure,如果不指明object_type,db.*表示数据库底下的所有表、函数和存储过程。如果表和存储过程有同名的话,需要指明类型

grant create on cactidb.* to ‘cactiuser‘@’%’; #赋予创建的权限
grant insert on cactidb.* to ‘cactiuser‘@’%’; #赋予插入的权限
grant update(age) on cactidb.testdb to ‘cactiuser‘@’%’; #赋予对testdb的age字段的更新权限
grant super on *.* to ‘cactiuser‘@’%’; #赋予super权限(赋予super权限之后可以进行全局设置,比如set global tx_isolation=’read-uncommited’;)
备注:
有时候赋予权限之后不生效,可能需要重连才会生效。

删除用户:drop user username@host
重命名用户:rename user old_name to new_name
撤销权限:revoke select on cactidb.* from ‘cactiuser‘@’%’; #撤销select权限

忘记管理员密码:
编辑/etc/init.d/mysqld文件
在$bindir/mysqld_safe 这一行加上以下两个选项:
–skip-grant-tables #跳过授权表
–skip-networking #跳过网络(不设置这一项的话,因为跳过授权,别人可以通过网络随便连到你的mysql)

设置密码:
set password for ‘root‘@’localhost’=password(‘123456’);#设置了skip-grant-tables之后,通过这种方式设置密码会报错
只能手动修改user文件:
update user set password=password(‘123456’) where user=’root’;
\q #退出mysql命令行
编辑/etc/init.d/mysqld文件,移除新加的两个权限,重启mysql服务