SQL-DCL-如何用户管理,如何给用户权限?

 🎉欢迎您来到我的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 'itczh'@'localhost' 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.删除 itczh@localhost 用户

drop user 'itczh'@'localhost';

执行如下:

此时可以发现用户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数据库的权限还有没有了,有没有成功的被撤销

执行如下:

此时表明权限撤销成功!


相关推荐

  1. SQL_DCL_管理用户

    2024-01-12 18:08:02       37 阅读
  2. StarRocks用户权限管理

    2024-01-12 18:08:02       13 阅读
  3. MySQL 管理用户授权 DCL

    2024-01-12 18:08:02       18 阅读
  4. oracle用户授权查询权限

    2024-01-12 18:08:02       42 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-01-12 18:08:02       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-12 18:08:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-12 18:08:02       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-12 18:08:02       20 阅读

热门阅读

  1. Excel办公--常见快捷指令

    2024-01-12 18:08:02       32 阅读
  2. Mybatis 分页

    2024-01-12 18:08:02       33 阅读
  3. #Uniapp:uni-app加载全局组件的方法easycom

    2024-01-12 18:08:02       41 阅读
  4. springboot 集成 @Cacheable简单示例

    2024-01-12 18:08:02       39 阅读
  5. 平方朋友对C++

    2024-01-12 18:08:02       30 阅读
  6. Jenkins相关问题及答案(2024)

    2024-01-12 18:08:02       29 阅读
  7. Docker快速安装MongoDB数据库

    2024-01-12 18:08:02       36 阅读
  8. 停止css @keyframes动画

    2024-01-12 18:08:02       36 阅读