1)4类SQL语句:
DDL: 操作数据库和表
DML: 增删改
DQL: 查询
DCL: 管理用户及其授权
2)DBA: 数据库管理员
3)管理用户
(1)添加用户
DCL创建用户的语法(不要用insert):create user '用户名'@‘主机名’ identified by ‘密码’;
如: create user 'zhangsan'@‘localhost’ identified by '123’;
create user 'zhangsan'@‘%’ identified by '123’; -- 该用户可以在任意主机上访问
测试登录:
mysql -uzhangsan -p123
exit
(2)删除用户
drop user '用户名'@‘主机名’;
如: drop user 'zhangsan'@‘localhost’;
(3)修改用户(注意加密,如用password函数)
需求: 修改lisi用户密码为abc
可以用的写法: update user set password = password('新密码') where name = 'lisi';
DCL的写法: set password for '用户名'@'主机名' = password('新密码');
如: set password for 'root'@'localhost' = password('123');
在mysql中忘记了root用户的密码?
1.cmd去执行net stop mysql; -- 停止mysql的服务,需要有管理员的权限(以管理员身份运行)
2.使用无验证方式启动mysql服务: mysqld --skip-grant-tables 这时光标会卡主
3.直接另起一个窗口, 输入 mysql 即可 无验证启动mysql,修改密码
use mysql;
update user set password = password('root') where user = 'root';
4.用任务管理器将mysqld.exe这个进程关闭. 关闭2个cmd窗口
5.再次用管理员运行mysql服务 net start mysql
6.发现用修改的密码就能进入了
(4)查询用户
use mysql;
select * from user;
其中, localhost是本机访问, %是通配符,可以在任意主机使用用户登录数据库
4)授权
(1)查询权限
show grants for '用户名'@'主机名';
如: show grants for 'lisi'@'%';
show grants for 'root'@'%'; -- 发现root有所有的权限
(2)授予权限
grant 权限列表 on 数据库名.表名 TO '用户名'@'主机名';
如: grant select on db3.account to 'lisi'@'%'; -- 只能看到account表,而且只能查询account表
如: grant select,delete,update on db3.account to 'lisi'@'%'; -- 权限的授予是非常细粒度的
如: 给张三用户授予所有权限(通配符:所有权限 所有数据库的所有表)
grant all on *.* to 'zhangsan'@'localhost';
(3)撤销权限
revoke 权限列表 on 数据库名.表名 from '用户名'@'主机名';
如: 撤销李四的修改权限
revoke update on db3.account from 'zhangsan'@'localhost';