营销型网站维护费用,手机网站演示,高唐网页定制,桂林北站附近的景点#x1f389;欢迎您来到我的MySQL基础复习专栏 ☆* o(≧▽≦)o *☆哈喽~我是小小恶斯法克#x1f379; ✨博客主页#xff1a;小小恶斯法克的博客 #x1f388;该系列文章专栏#xff1a;重拾MySQL #x1f379;文章作者技术和水平很有限#xff0c;如果文中出现错误欢迎您来到我的MySQL基础复习专栏 ☆* o(≧▽≦)o *☆哈喽~我是小小恶斯法克 ✨博客主页小小恶斯法克的博客 该系列文章专栏重拾MySQL 文章作者技术和水平很有限如果文中出现错误希望大家能指正 感谢大家的关注 ❤️ 目录 DCL-介绍
DCL-管理用户
DCL - 权限控制 DCL-介绍 DCL英文全称是Data Control Language(数据控制语言)用来管理数据库用户、控制数据库的访问权限。 DCL-管理用户
1.查询用户 在mysql数据库中用户的信息用户所具有的权限的信息都是存放在系统数据库mysql的user表中所以我们可以直接访问mysql数据库然后查询use表就行 打开表之后有4个用户前三个没有用过我们只用过一个root在这张表中第一个字段叫host指的是主机在mysql中要创建一个用户或者去删除一个用户需要通过用户名和host主机地址同时定位用户名和主机地址才能够完整的定位一个mysql的用户这个主机地址指的是当前这个用户只能在哪个主机上访问当前mysql服务器那么localhost代表只能够在本机访问能不能远程访问呢不能 use mysql ;select * from user ;select * from mysql.user ; --这里为什么是mysql.user,你要么用上面的组合要么用下面的语句才能访问到user因为user表是在mysql这个数据库中的你要先切换到那个数据库中或者用这个语句 执行如下 2.创建用户 主机名指的就是在哪一个主机上这个用户可以访问当前mysql后面identified指定密码就是当前用户的访问密码 CREATE USER 用户名主机名 IDENTIFIED BY 密码; 3.修改用户密码 ALTER USER 用户名主机名 IDENTIFIED WITH mysql_native_password BY 新密码 ; 4.删除用户 DROP USER 用户名主机名 ; 注意事项: 1.在MySQL中需要通过用户名主机名的方式来唯一标识一个用户。 2.主机名可以使用 % 通配。 3.这类SQL开发人员操作的比较少主要是DBA Database Administrator 数据库管理员使用。 案例 1.创建用户itczh, 只能够在当前主机localhost访问, 密码123456 ; 但是这个用户有没有权限呢大家会发现表格当中都是N也就是no此时我们可以通过命令行去访问一下通过itczh这个用户去访问mysql我们连接好了itczh用户然后去show一下里面所有数据库只访问到了一个而root用户可以查询到那么多数据库原因是什么呢? 原因是因为我们刚刚是仅仅创建了itczh这个用户它可以访问mysql但是它没有访问其他数据库的权限目前只是创建了用户但是没有给这个用户权限 create user itczhlocalhost identified by 123456 ;
执行如下 2.创建用户czh, 可以在任意主机访问该数据库, 密码123456 ; %代表任意主机 create user czh% identified by 123456 ; 执行如下 3.修改用户czh的访问密码为1234 ; alter user czh% identified with mysql_native_password by 1234; 执行如下 测试 4.删除 itczhlocalhost 用户 drop user itczhlocalhost; 执行如下 此时可以发现用户itczh已经被删除了 DCL - 权限控制
MySQL中定义了很多种权限但是常用的就以下几种 权限 说明 ALL, ALL PRIVILEGES 所有权限 SELECT 查询数据 INSERT 插入数据 UPDATE 修改数据 DELETE 删除数据 ALTER 修改表 DROP 删除数据库/表/视图 CREATE 创建数据库/表
上述只是简单罗列了常见的几种权限描述其他权限描述及含义可以直接参考官方文档。 1.查询权限 SHOW GRANTS FOR 用户名主机名 ; 2.授予权限 GRANT 权限列表 ON 数据库名.表名 TO 用户名主机名; 3.撤销权限 如果说要给所有的数据库所有的表赋予权限就可以写*.*如果指定数据库和指定表就写数据库名和表名即可 REVOKE 权限列表 ON 数据库名.表名 FROM 用户名主机名; 注意事项 多个权限之间使用逗号分隔 授权时数据库名和表名可以使用 * 进行通配*代表所有。 案例:
1.查询 czh% 用户的权限 查询到的权限信息如下图这是个什么权限呢usage这个指的就是我们没有其他权限你仅仅能够连接并登录mysql而已 show grants for czh%;
执行如下 2.授予 czh% 用户test数据库所有表的所有操作权限 授权的关键字grant 我们要授予的是test这个数据库所有表的权限那么就是test.*, to给哪个用户这个权限给czh这个用户授予这个权限那么在授权之前再看一下czh这个用户登陆上来之后目前能访问哪个数据库发现它只能访问information_schema这个数据库接下来我们去执行下面的SQL语句 grant all on test.* to czh%; 执行如下 此时所具有的权限是all privileges针对的是test这个数据库的所有权限此时我们打开命令行通过czh用户再次访问mysql再去看看权限此时czh这个用户就能看间test这个数据库了 里面的表也都能看见了 3.撤销 czh% 用户的test数据库的所有权限 revoke all on test.* from czh%;
执行如下 此时就没有所有权限了此时我们打开命令行重新登陆czh这个用户执行show databases我们看一下之前给他授予的test数据库的权限还有没有了有没有成功的被撤销 执行如下 此时表明权限撤销成功