【MySQL】02_MySQL用户认证及用户管理

1 创建用户

命令:
    `CREATE USER 'username'@'host' IDENTIFIED BY 'password';`

说明:
    username:你将创建的用户名
    host:指定该用户在哪个主机上可以登陆
        如果是本地用户可用localhost,如果想让该用户可以从任意远程主机登陆,可以使用通配符%
    password:该用户的登陆密码
        密码可以为空,如果为空则该用户可以不需要密码登陆服务器

案例:
    CREATE USER 'dog'@'localhost' IDENTIFIED BY '123456';
    CREATE USER 'pig'@'192.168.1.101_' IDENDIFIED BY '123456';
    CREATE USER 'pig'@'%' IDENTIFIED BY '123456';
    CREATE USER 'pig'@'%' IDENTIFIED BY '';
    CREATE USER 'pig'@'%';

2 授权

 命令:
    grant all privileges ON databasename.tablename TO 'username'@'host'
    grant all privileges ON databasename.tablename TO 'username'@'host' identified by '123456';
    
说明:
    all:代表所有权限
    privileges:用户的操作权限
        如SELECT,INSERT,UPDATE等,如果要授予增删改查的话,把all privileges换成相应的权限即可。
    databasename:数据库名
    tablename:表名
        如果要授予该用户对所有数据库和表的相应操作权限则可用*表示,如*.*
    username:是用户名
        如果没有创建该用户这里会自动创建
    host:指访问数据库的客户端IP地址
        如果所有IP地址可访问直接写%即可,如果是本地访问就是localhost。
    
    如果授权访问需要密码的话,需要加上identified by '***'参数,后面单引号里面加上权限即可。
    
案例:
    授权所有权限
    # 给leihaidong这个用户所有数据库的所有权限。
    grant all privileges on *.* to 'leihaidong'@'%' identified by '123456';
    
    # 给leihaidong这个用户查询和更新的权限。
    grant select,update on *.* to 'leihaidong'@'%' identified by '123456';
    
    授权部分权限
    # 给一个用户授权多张表权限
    grant select(user_id,username) on smp.users to mo_user@'%' identified by '123345';
    
    不是root用户登录给其它用户授权
        GRANT privileges ON databasename.tablename TO 'username'@'host' WITH GRANT OPTION;
    
注意:
    1. 授权完成后需要使用flush privileges;刷新权限才算完成授权。
    2. 如果你不是root用户登录给其它用户授权的话,需要以下写法。

3 设置与更改用户密码

命令:
    SET PASSWORD FOR 'username'@'host' = PASSWORD('newpassword');
    
    如果是当前登陆用户用:
    SET PASSWORD = PASSWORD("newpassword");

4 撤销用户权限

命令:
    REVOKE privilege ON databasename.tablename FROM 'username'@'host';
    
说明:
    privilege, databasename, tablename:同授权部分
    
    REVOKE SELECT ON *.* FROM 'pig'@'%';

注意:
  假如你在给用户'pig'@'%'授权的时候是这样的(或类似的):
  GRANT SELECT ON test.user TO 'pig'@'%',
  则在使用REVOKE SELECT ON *.* FROM 'pig'@'%';
  命令并不能撤销该用户对test数据库中user表的SELECT 操作。
  相反,如果授权使用的是GRANT SELECT ON *.* TO 'pig'@'%';
  则REVOKE SELECT ON test.user FROM 'pig'@'%';
  命令也不能撤销该用户对test数据库中user表的Select权限。

查看某个用户当前的授权情况:
    SHOW GRANTS FOR 'leihaidong'@'%'; 

5 删除用户(删除用户授权)

命令:
    DROP USER 'username'@'host';
    
注意:
    1、如果上面的撤销用户授权失败的话,可以直接使用drop user这个命令直接删除某个用户的所有授权。
    2、也可以使用Navicat Premium_11这个软件登录mysql后,查看mysql下的user表,删除对应用户的权限(前提是你远程数据使用的用户有对mysql数据库下user表有操作权限)

 

6 破解root登录密码

忘记了mysql登录密码了怎么办,只需要一下几步就可以轻松破解root登录密码。

  1. 停止mysqld或者mariadb服务,
  2. 在myqld配置文件my.cnf里面的[mysqld]模块下添加skip-grant-tables,保存退出。
  3. 重启mysqld或者mariadb服务。
  4. 使用msyql -uroot -p直接回车,无需输入密码直接登录。
  5. 使用mysql数据库
MariaDB [(none)]> use mysql;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
  1. 修改root密码。
Database changed
MariaDB [mysql]> UPDATE user SET Password = password ( 'new-password' ) WHERE User = 'root' ;
Query OK, 5 rows affected (0.06 sec)
Rows matched: 5  Changed: 5  Warnings: 0
  1. 刷新权限,并退出
MariaDB [mysql]> flush privileges ;
Query OK, 0 rows affected (0.00 sec)
 
MariaDB [mysql]> quit
Bye
  1. 删除或注释上面我们加的skip-grant-tables,重启mysqld或者mariadb服务。
  2. 使用mysql -uroot -p命令,输入新密码登录。
posted @ 2023-04-14 16:14  烟墨  阅读(64)  评论(0)    收藏  举报