MySQL札记8_DCL(数据控制语言)

作者: 皮皮大 | 来源:发表于2019-08-01 20:54 被阅读68次

    数据控制语言DCL主要是对数据库中的登录和用户的权限进行控制的语言,包含:

    • 用户登录MySQL数据库
    • 修改用户密码及忘记密码如何解决
    • 创建普通用户及授权
    • 撤销权限revoke
    • 查看权限及删除用户

    关于root账户

    默认登录

    默认情况下,MySQL数据库是指允许root账户登录并且在本机上登录的。

    • -uroot表示root账户
    • -p表示需要密码
    • 没有-h表示默认是本机localhost或者127.0.0.1登录
    image.png

    登录查看账户

    MySQL数据库的服务端口号是3306,通过在mysql数据库的user表中查看登录数据库用户信息:

    mysql> show databases;  # 查看所有的数据库
    mysql> use mysql;   # 选择mysql数据库
    mysql> show tables;   # 查表数据库中的所有表
    mysql> select user, host from user;   # 查看这个表中的user和host信息
    
    image.png

    删除用户

    需要注意的是删除了某个用户之后必须进行权限的刷新:

    mysql> delete from user where host="%";   # 删除host为%的用户
    Query OK, 1 row affected (0.01 sec)
    
    mysql> flush privileges;  # 刷新权限
    Query OK, 0 rows affected (0.00 sec)
    

    下图和上图进行对比发现少了%的用户

    image.png

    注意:当在实际的开发项目中,项目和数据服务器不再同一个地方,可以指定ip连接进行访问。

    mysql> update user set host="192.168.1.10" where user="root";
    Query OK, 1 row affected (0.02 sec)
    Rows matched: 1  Changed: 1  Warnings: 0
    
    mysql> select user,host from user;
    
    mysql> flush privileges;
    Query OK, 0 rows affected (0.00 sec)
    
    image.png

    当退出mysql重新进入,需要指定IP地址,就是上面设置的IP

    image.png

    密码问题

    修改密码

    同样需要进入mysql数据库的user表中,为了方便,笔者将IP又改回去啦:


    image.png
    update user set password=PASSWORD("admin")  where user="root";   # 将root账户的密码改为admin
    
    mysql> flush privileges;   # 更新操作
    Query OK, 0 rows affected (0.00 sec)
    

    忘记密码

    • 如果忘记了密码,需要进入配置文件中
    ubuntu@peter:~$ vim /etc/mysql/mysql.conf.d/mysqld.cnf
    
    • 找到下图中的skip-grant-tables,将前面的#去掉,就是取消注释:取消权限认证,后台开启新的进程免密进入MySQL

      image.png
    • 重启MySQL服务:systemctl restart mysql

    • 通过mysql直接进入:

    image.png
    • 然后按照上面的步骤重新设置密码即可
    mysql> show databases;
    mysql> use mysql;
    mysql> select user, password  from user;
    # 接下来重新设置密码即可
    
    image.png

    创建新用户及授权

    创建用户

    • 进入mysql数据库后,创建一个test用户,并且刷新:
    image.png
    • 尝试登陆,创建成功:


      image.png
    • %使用,匹配所有:
      如果想所有的IP都可以通过test账户访问mysql,将host指定为%;危险操作,谨慎使用

    >update user set host="% where user="test" ;     # 谨慎操作
    

    用户授权

    • 授权
      select、insert、delete等操作权限授权给新建的用户:use

      image.png
    • 测试授权是否成功


      image.png
    • 进入mysql数据库中,选中peter这个数据库中,创建一个test

      image.png
    • create权限成功

      image.png
    • insert和select 权限成功


      image.png
    • 将test账户的所有权限给所有数据库,谨慎操作

    grant all privileges on *.* to "test"@"192.168.21.136";
    

    撤销权限

    撤销权限使用的是revoke;承接上面的栗子,撤销test用户的select权限:

    • revoke:撤销
    • select:即将撤销的权限
    • peter:从哪个数据库中撤销
    • "test"@"192.168.21.136":用户及密码
    revoke select on peter.* from "test"@"192.168.21.136";
    
    image.png

    撤销权限一定要通过root账户进入MySQL;否则出现权限不足的问题

    image.png

    查看权限和删除用户

    查看权限

    show grants for 用户名@IP地址;

    image.png

    删除用户

    drop user 用户名@IP地址;

    image.png image.png

    相关文章

      网友评论

        本文标题:MySQL札记8_DCL(数据控制语言)

        本文链接:https://www.haomeiwen.com/subject/ejthdctx.html