MySQL多表&事务04-DCL3
1、SQL分类
1. DDL:操作数据库和表
2. DML:增删改表中数据
3. DQL:查询表中数据
4. DCL:管理用户,授权
2、DBA:数据库管理员,专门管理公司的数据库。
去了公司,dba会给员工创建一个新的用户,并且对用户进行一些权限的授予,我可以使用自己的用户登录数据库来访问数据库。所有的开发人员访问同一个数据库但是使用自己的账号。不可能使用root用户,因为root用户权限太高了,操作太危险。
3、DCL:管理用户,授权
1. 管理用户
a. 添加用户:CREATE USER '用户名'@'主机名' IDENTIFIED BY '密码';
示例1:CREATE USER 'zhangsan'@'localhost' IDENTIFIED BY '123'; -- 查询结果如下:
示例2:CREATE USER 'lisi'@'%' IDENTIFIED BY '123'; -- 查询结果如下:
cmd终端登录:
>mysql -uzhangsan -p123
>mysql -ulisi -p123 -----------由此可见,%也是可以在当前主机登录的
b. 删除用户:DROP USER '用户名'@'主机名';
示例1:DROP USER 'zhangsan'@'localhost';
示例2:DROP USER 'lisi'@'%';
c. 修改用户密码:
i. UPDATE USER SET PASSWORD = PASSWORD('新密码') WHERE USER = '用户名';
UPDATE USER SET PASSWORD = PASSWORD('abc') WHERE USER = 'lisi';
ii. SET PASSWORD FOR '用户名'@'主机名' = PASSWORD('新密码');
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('123');
注意:mysql中忘记了root用户的密码?
1. cmd--> net stop mysql 停止mysql服务
* 需要以管理员身份运行该cmd,否则报系统错误。
2. 使用无验证方式启动mysql服务:mysqld --skip-grant-tables,执行后第二行光标一直在闪烁
3. 打开新的cmd窗口,直接输入mysql命令,敲回车就能连接数据库成功
4. 新窗口执行use mysql;
5. 新窗口执行修改密码命令update user set password = password('新密码') where user = 'root';
6. 关闭两个cmd终端窗口
7. 菜单栏右键打开任务管理器,手动结束mysqld.exe 的进程
8. 以管理员身份运行cmd终端,启动mysql服务:net start mysql
9. 使用新密码登录:mysql -uroot -proot
d. 查询用户:
-- 1. 切换到mysql数据库
USE mysql;
-- 2. 查询user表
SELECT * FROM USER; -- Host=localhost表示root用户可以在当前主机上登录;通配符 % 表示可以在任意主机使用用户登录数据库,表示远程访问。
2. 权限管理
a. 查询权限:
语法:SHOW GRANTS FOR '用户名'@'主机名';
示例1:SHOW GRANTS FOR 'lisi'@'%';
usage表示只有登录权限,use db3;执行就会报没访问权限
示例2:SHOW GRANTS FOR 'root'@'%';
root用户有所有权限。
b. 授予权限:
语法:grant 权限列表 on 数据库.表名 to '用户名'@'主机名';
示例1:GRANT SELECT ON db3.account TO 'lisi'@'%';
给lisi赋予查询权限后,通过show tables只能看到db3中的account表,其他表看不到,且只有account表的查询权限。
示例2:GRANT SELECT,DELETE,UPDATE ON db3.account TO 'lisi'@'%';
示例3:给zhangsan用户授予所有权限,在任意数据库任意表上 GRANT ALL ON *.* TO 'zhangsan'@'localhost';
c. 撤销权限:
语法:REVOKE 权限列表 ON 数据库.数据表 FROM '用户名'@'主机名';
示例1:REVOKE UPDATE ON db3.account FROM 'lisi'@'%';
示例2:REVOKE ALL ON *.* FROM 'lisi'@'%';