1. MySQL用户管理

MYSQL提供许多语句用来管理用户帐号 , 这些语句可以用来包括登录退出MYSQL服务器、创建用户删除用户密码管理权限管理

MYSQL数据库的安全性 , 需要通过帐户管理来保证登录和退出MYSQL

  • mysql命令的常用参数

    • -h : 主机名或ip , 默认是localhost , 最好指定-h参数

    • -u : 用户名

    • -p : 密码 , 注意 : 该参数后面的字符串和-p不能有空格

    • -P : 端口号 , 默认为3306

    • 数据库名 : 可以在命令最后指定数据库名

    • -e : 执行SQL语句 , 如果指定该参数 , 将在登录后执行-e后面的命令或sql语句并退出

    [root@localhost mysql]# mysql -h localhost -u root -pdaemon  -e "show databases;"
    +--------------------+
    | Database           |
    +--------------------+
    | hellodb            |
    | information_schema |
    | mysql              |
    | performance_schema |
    | testdb             |
    +--------------------+

1.1 用户管理

  • 创建用户语法

    • IDENTIFIED BY

      CREATE USER user [IDENTIFIED BY [PASSWORD] 'password']
          [, user [IDENTIFIED BY [PASSWORD] 'password']] 
      • USER : 指定创建用户账号 , 格式为 user_name'@'host_name。这里的user_name是用户名 , host_name为主机名 , 即用户连接MySQL时所用主机的名字。如果在创建的过程中 , 只给出了用户名 , 而没指定主机名 ,那么主机名默认为"%" , 表示一组主机 ,即对所有主机开放权限。

        host_name可以指定主机名 , 默认为% , 同样可以指定IP , 需要注意可以使用%通配符 ,

        172.16.%.%   #指定为172.16. 范围内的所有IP
        user2@'192.168.1.%'
      • IDENTIFIED BY: 用于指定用户密码。新用户可以没有初始密码 , 若该用户不设密码 , 可省略此子句。

      • PASSWORD 'password' : PASSWORD表示使用哈希值设置密码 , 该参数可选。如果密码是一个普通的字符串 , 则不需要使用 PASSWORD关键字。'password'表示用户登录时使用的密码 ,需要用单引号括起来

      示例

      CREATE USER 'jeffrey'@'localhost' identified BY 'mypass';

      用户名部分为"jeffrey" ,主机名默认为"%"(即对所有主机开放权限)

      如果指定用户登录不需要密码 , 则可以省略identified BY部分 , 对于使用插件认证连接的用户 , 服务器调用指定名称的插件 , 客户端需要提供验证方法所需要的凭据。如果创建用户时或者连接服务器时 , 服务器找不到对应的插件 , 将返回一个错误。

    • IDENTIFIED WITH

      允许您指定帐户应由特定身份验证插件进行身份验证。插件名称必须是已经激活的身份验证插件,可以通过命令SHOW PLUGINS查看。如果没有通过命令SHOW PLUGINS查看到对应插件, 则需要安装插件

      CREATE user 'jeffrey'@'localhost' identified with my_auth_plugin;

      identified with只能在MYSQL5.7.7及以上版本使用。

      identified withidentified by是互斥的 , 所以对一个帐户来说只能使用一个验证方法。

      CREATE USER语句的操作会被记录到服务器日志文件或者操作历史文件中

  • 用户重命名

    RENAME USER old_user_name TO new_user_name;
  • 删除用户

    使用DROP USER语句删除用户 , 也可以直接通过DELETEmysql.user表中删除对应的记录来删除用户。DROP USER语句用于删除一个或多个MYSQL帐户。要使用DROP USER , 必须拥有MYSQL数据库的全局CREATE USER权限或DELETE权限。

    DROP USER 'USERNAME'@'HOST‘

    使用delete语句删除用户

    DELETE FROM mysql.user WHERE `Host`='localhost' and `User`='testUser'

    范例 : 删除默认的空用户

    DROP USER ''@'localhost';
  • 查看所有用户

    MariaDB [(none)]> select Host,user,Password,authentication_string from mysql.user;
    +-----------+----------+-------------------------------------------+-------------------------------------------+
    | Host      | user     | Password                                  | authentication_string                     |
    +-----------+----------+-------------------------------------------+-------------------------------------------+
    | localhost | root     | *9092E6448E8E10E8BAC1C290E16D0D2E36759BAA | *9092E6448E8E10E8BAC1C290E16D0D2E36759BAA |
    | 127.0.0.1 | root     | *9092E6448E8E10E8BAC1C290E16D0D2E36759BAA |                                           |
    | ::1       | root     | *9092E6448E8E10E8BAC1C290E16D0D2E36759BAA |                                           |
    | localhost | myfreax  | *2470C0C06DEE42FD1618BB99005ADCA2EC9D1E19 |                                           |
    | localhost | myfreax1 | *2470C0C06DEE42FD1618BB99005ADCA2EC9D1E19 | *2470C0C06DEE42FD1618BB99005ADCA2EC9D1E19 |
    | localhost | myfreax2 | *2470C0C06DEE42FD1618BB99005ADCA2EC9D1E19 | *2470C0C06DEE42FD1618BB99005ADCA2EC9D1E19 |
    | localhost | username | *2470C0C06DEE42FD1618BB99005ADCA2EC9D1E19 |                                           |
    | %         | root     | *9092E6448E8E10E8BAC1C290E16D0D2E36759BAA |                                           |
    +-----------+----------+-------------------------------------------+-------------------------------------------+
    8 rows in set (0.000 sec)
    ​

1.2 修改密码

  • 新版mysql中用户密码可以保存在mysql.user表的authentication_string字段中

  • 如果mysql.user表的authentication_stringpassword字段都保存密码 , authentication_string优先生效

1.2.1 root用户修改自己的密码

修改root密码的方式有多种

  1. 使用mysqladmin命令在命令行指定新密码。 如果没有旧密码 , 直接省略即可, 之后会提示输入密码, 直接回车即可

    mysqladmin -u root -p旧密码 password 新密码
  2. 修改mysql数据库的user表。只不过这种方式在最新版本的不适用了。因为新版本中user表格是通过视图创建的。视图无法直接修改

    UPDATE mysql.user SET `Password` =password('rootpwd') WHERE `User`='root' and `Host`='localhost'

    password('')函数用来加密用户密码。执行update之后需要执行flush privileges语句重新加载用户权限

    UPDATE mysql.user SET `authentication_string` =password('rootpwd') WHERE `User`='root' and `Host`='localhost'

    mariadb 10.4 可以给用户设置多种认证方式了,在初始安装的时候,默认创建了2个默认账号: rootmysql,并默认使用unix_socket模式认证 ,这种模式 root 不需要密码, 也不需要你去设置初始密码。

    MariaDB [(none)]> select user,plugin from mysql.user limit 1;
    +------+-----------------------+
    | User | plugin                |
    +------+-----------------------+
    | root | unix_socket |
    +------+-----------------------+

  3. 使用SET语句修改root用户的密码

    SET PASSWORD语句可以用来重新设置其他用户的登录密码或者自己使用的帐户密码

    语法: SET PASSWORD=PASSWORD("ROOTPWD")

    新密码必须用PASSWORD函数加密

    使用root用户登录到mysql之后执行下面语句

    SET password=password('123456')

    执行之后需要使用执行flush privileges语句或者重启MYSQL重新加载用户权限

  4. 使用alter user 命令方式修改密码

    ALTER USER CURRENT_USER() IDENTIFIED BY 'mariadb';

    使用示例如下

    ALTER USER foo2@test IDENTIFIED BY 'mariadb';

    IDENTIFIED BY PASSWORD 子句用于为已经哈希处理的密码提供帐户。密码应指定为由PASSWORD函数提供的哈希值。它将按原样存储到 mysql.user表中。

    例如,如果我们的密码是 mariadb,则可以使用以下方法找到哈希值:

    SELECT PASSWORD('mariadb');
    +-------------------------------------------+
    | PASSWORD('mariadb')                       |
    +-------------------------------------------+
    | *54958E764CE10E50764C2EECBB71D01F08549980 |
    +-------------------------------------------+

    然后,我们可以使用哈希值设置帐户的密码:

    ALTER USER foo2@test 
      IDENTIFIED BY PASSWORD '*54958E764CE10E50764C2EECBB71D01F08549980';

    如果您没有使用 IDENTIFIED BY 子句指定密码,则用户将能够无需密码连接到 MariaDB。空白密码不是匹配任何密码的通配符。如果未设置密码,则用户必须在未提供密码的情况下连接。

1.2.2 root用户修改普通用户密码

  1. 使用SET语句修改普通用户的密码

    SET PASSWORD FOR 'USER'@'HOST' =PASSWORD("ROOTPWD") 
  2. 使用update语句修改普通用户的密码

    UPDATE mysql.user SET `Password` =password('rootpwd') WHERE `User`='root' and `Host`='localhost'

    执行完毕之后需要使用flush privileges语句或者重启MYSQL重新加载用户权限

  3. 使用GRANT语句修改普通用户密码

    GRANT USAGE ON *.* TO 'someuser'@'%'  IDENTIFIED BY 'somepwd'

    使用下面语句把testUser用户的密码改为123456

    grant USAGE ON *testUser*TO 'localhost' identified BY '123456';

    注意 : 使用GRANT语句和MYSQLADMIN设置密码 , 他们均会加密密码 , 这种情况下 , 不需要使用PASSWORD()函数

  4. alter 命令修改密码

    ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '新密码';
    ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码';

1.2.3 普通用户修改密码

使用SET语句修改自己的密码

SET password=password('newpassword'); 

比如修改testUser这个用户的密码 , 需要使用testUser这个用户登录到mysql , 然后执行

SET password=password('123456');

1.2.4 破解密码

使用--skip-grant-tables选项启动MYSQL时 , 服务器将不加载权限判断 , 任何用户都能访问数据库。同时这种方法也可以防止超级用户被删除之后, 手动创建需要的超级用户

主要步骤如下

  1. 启动mysqld进程时 , 为其使用如下选项:

    --skip-grant-tables --skip-networking
  2. 使用UPDATE命令修改管理员密码

  3. 关闭mysqld进程 , 移除上述两个选项 , 重启mysqld

范例:

1.关闭MySQL服务器

service mysqld stop

2.使用--skip-grant-tables选项重启MySQL服务

./bin/mysqld_safe --skip-grant-tables --user=root &

其中--skip-grant-tables选项的意思是启动MySQL服务的时候跳过权限表认证。启动后 , 连接到MySQLroot将不需要命令。或者直接编辑配置文件/etc/my.cnf ,之后在启动mysql服务

[root@centos8 ~]#vim /etc/my.cnf
[mysqld]
skip-grant-tables                                                               
skip-networking

3.用空密码的root用户连接到MySQL , 并且更新root口令 :

mysql -uroot

MySQL 5.7以下版本 :

update mysql.user set password=password('新密码') where user='root' and host='localhost';

MySQL 5.7版本 :

update mysql.user set authentication_string=password('新密码') where user='root' and Host='localhost';

4.刷新权限表 , 使得权限认证重新生效 :

flush privileges;

5.重启MySQL数据库

service mysqld restart
systemctl restart mariadb

6.登录MySQL

mysql -uroot

1.2.5 查看mysql的匿名用户

如果有匿名用户 , 那么客户端就可以不用密码登录MYSQL数据库 , 这样就会存在安全隐患

检查匿名用户的方法

SELECT * FROM mysql.user WHERE `User`='';

如果查找到user字段值为空的那条记录 , 说明存在匿名用户 , 需要把这条记录删除。如果用匿名用户登录MYSQL就可以看到用户名是空的

删除语句

DELETE FROM mysql.user WHERE `User`=''; SELECT * FROM mysql.user WHERE `User`='';

1.3 密码过期

除了由 default_password_lifetime确定的自动密码过期之外,还可以在单个用户基础上设置密码过期时间,以覆盖全局设置,例如:

ALTER USER 'monty'@'localhost' PASSWORD EXPIRE INTERVAL 120 DAY;
ALTER USER 'monty'@'localhost' PASSWORD EXPIRE NEVER;
ALTER USER 'monty'@'localhost' PASSWORD EXPIRE DEFAULT;

1.4 账户锁定

帐户锁定允许特权管理员锁定/解锁用户帐户。如果帐户被锁定,则不会允许新的客户端连接(现有连接不受影响)。例如:

ALTER USER 'marijn'@'localhost' ACCOUNT LOCK;

2. 权限管理和DCL语句

在元数据数据库mysql中 , 有mysql_install_db脚本初始化权限表 , 存储权限的表有 :

  • user表 : user表列出可以连接服务器的用户及其口令 , 并且它指定他们有哪种全局(超级用户)权限。在user表启用的任何权限均是全局权限 , 并适用于所有数据库

    MariaDB 中,mysql.global_priv 表是用来存储用户全局权限的系统表。从 MariaDB 10.4 版本开始,这个表取代了之前的 mysql.user 表来存储用户权限信息。mysql.user 表现在是一个视图,用于提供一个与以前版本兼容的接口。

  • db表 : db表列出数据库 , 而用户有权限访问它们。在这里指定的权限适用于一个数据库中的所有表。

  • host表 : 指定根据host主机权限 , 5.6之前还有host表 , 现在已经把host内容整合进user表。

  • table_priv表 :tables_priv表指定表级权限 , 在这里指定的一个权限适用于一个表的所有列。

  • columns_priv表 : columns_priv表指定列级权限。这里指定的权限适用于一个表的特定列。

  • proc_priv表 : columns_priv表指定存储过程权限。这里代表允许使用某个存储过程的权限。

  • proxies_priv : 利用MySQL proxies_priv(模拟角色) 实现类似用户组管理。角色(Role)可以用来批量管理用户 , 同一个角色下的用户 ,拥有相同的权限。

MySQL存取控制包含2个阶段 :

  • 阶段1 : 服务器检查你是否允许连接。

  • 阶段2 : 假定你能连接 , 服务器检查你发出的每个请求。看你是否有足够的权限实施它。例如 , 如果你从数据库中一个表精选(select)行或从数据库抛弃一个表 , 服务器确定你对表有select权限或对数据库有drop权限。

2.1 用户权限层级

授予的权限可以分为多个层级 :

  • 全局层级

    全局权限适用于一个给定服务器中的所有数据库。这些权限存储在mysql.user表中。GRANT ALL ON *.*REVOKE ALL ON *.*只授予和撤销全局权限。

    GRANT ALL ON *.* TO 'user'@'host';  # *.* 表示数据库库的所有库和表 , 对应权限存储在mysql.user表中
  • 数据库层级

    数据库权限适用于一个给定数据库中的所有目标。这些权限存储在mysql.dbmysql.host表中。GRANT ALL ON db_name .*REVOKE ALL ON db_name.*只授予和撤销数据库权限。

    GRANT ALL ON mydb.* TO 'user'@'host';  #mydb.* 表示mysql数据库下的所有表 , 对应权限存储在mysql.db表中
  • 表层级

    表权限适用于一个给定表中的所有列。这些权限存储在mysql.talbes_priv表中。GRANT ALL ON db_name.tbl_nameREVOKE ALL ON db_name.tbl_name只授予和撤销表权限。

    GRANT ALL ON mydb.mytable TO 'user'@'host';  #mydb.mytable 表示mysql数据库下的mytable表 , 对应权限存储在mysql.tables_priv表
  • 列层级

    列权限适用于一个给定表中的单一列。这些权限存储在mysql.columns_priv表中。当使用REVOKE时 , 您必须指定与被授权列相同的列。

    GRANT ALL (col1 ,  col2 ,  col3)  ON mydb.mytable TO 'user'@'host'; #mydb.mytable 表示mysql数据库下的mytable表 ,  col1, col2,  col3表示mytable表中的列名
  • 子程序层级

    CREATE ROUTINE, ALTER ROUTINE,EXECUTEGRANT权限适用于已存储的子程序。这些权限可以被授予为全局层级和数据库层级。而且 , 除了CREATE ROUTINE外 , 这些权限可以被授予为子程序层级 , 并存储在mysql.procs_priv表中。

    GRANT EXECUTE ON PROCEDURE mydb.myproc TO 'user'@'host'; #mydb.mytable 表示mysql数据库下的mytable表 , PROCEDUR表示存储过程

当后续目标是一个表、一个已存储的函数或一个已存储的过程时 , object_type子句应被指定为TABLEFUNCTIONPROCEDURE。当从旧版本的MySQL升级时 , 要使用本子句 , 必须升级授权表。使用GRANT语句创建一个新用户grantUser , 密码为grantpwd。用户对所有的数据有查询、插入权限 , 并授予GRANT权限

2.2 权限简单分类

  • 数据权限分为 : 库、表和字段三种级别

    • 库和表级别 : 针对DATABASETABLE

      • ALTER

      • CREATE

      • CREATE VIEW

      • DROP INDEX

      • SHOW VIEW

      • WITH GRANT OPTION: 能将自己获得的权限转赠给其他用户

    • 数据操作

      • SELECT

      • INSERT

      • DELETE

      • UPDATE

    • 字段级别

      • SELECT(col1,col2,...)

      • UPDATE(col1,col2,...)

      • INSERT(col1,col2,...)

  • 管理权限主要是管理员要使用到的权限 , 包括 : 数据库创建 , 临时表创建、主从部署、进程管理等

    • CREATE USER

    • FILE

    • SUPER

    • SHOW DATABASES

    • RELOAD

    • SHUTDOWN

    • REPLICATION SLAVE

    • REPLICATION CLIENT

    • LOCK TABLES

    • PROCESS

    • CREATE TEMPORARY TABLES

  • 程序权限主要是触发器、存储过程、函数等权限。

    • CREATE

    • ALTER

    • DROP

    • EXCUTE

所有权限 ALL PRIVILEGESALL

授权 : GRANT

: 可以使用SHOW privileges ;查看所有权限

权限

含义

全局

数据库

过程

代理

ALL [PRIVILEGES]

授予除了GRANT OPTION之外的指定访问级别的所有权限

ALTER

允许用户使用ALTER TABLE语句

x

x

x

ALTER ROUTINE

允许用户更改或删除存储程序

x

x

x

CREATE

允许用户创建数据库和表

x

x

x

CREATE ROUTINE

允许用户创建存储过程

x

x

CREATE TABLESPACE

允许用户创建 , 更改或删除表空间和日志文件组

x

CREATE TEMPORARY TABLES

允许用户使用CREATE TEMPORARY TABLE创建临时表

x

x

CREATE USER

允许用户使用CREATE USER , DROP USER , RENAME USERREVOKE ALL PRIVILEGES语句。

x

CREATE VIEW

允许用户创建或修改视图

x

DELETE

允许用户使用DELETE

x

x

x

DROP

允许用户删除数据库 , 表和视图

x

x

x

EVENT

能够使用事件计划的事件

x

x

EXECUTE

允许用户执行存储过程/存储函数

x

x

FILE

允许用户读取数据库目录中的任何文件

x

GRANT OPTION

允许用户有权授予或撤销其他帐户的权限

x

x

x

x

x

INDEX

允许用户创建或删除索引

x

x

x

INSERT

允许用户使用INSERT语句

x

x

x

x

LOCK TABLES

允许用户在具有SELECT权限的表上使用LOCK TABLES

x

x

PROCESS

允许用户使用SHOW PROCESSLIST语句查看所有进程

x

PROXY

启用用户代理

REFERENCES

允许用户创建外键

x

x

x

x

RELOAD

允许用户使用FLUSH操作

x

REPLICATION CLIENT

允许用户查询主服务器或从服务器的位置

x

REPLICATION SLAVE

允许用户使用复制从站从主机读取二进制日志事件

x

SELECT

允许用户使用SELECT语句

x

x

x

x

SHOW DATABASES

允许用户显示所有数据库

x

SHOW VIEW

允许用户使用SHOW CREATE VIEW语句

x

x

x

SHUTDOWN

允许用户使用mysqladmin shutdown命令

x

SUPER

允许用户使用其他管理操作 , 如CHANGE MASTER TO , KILL , PURGE BINARY LOGS , SET GLOBALmysqladmin命令

x

TRIGGER

允许用户使用TRIGGER操作

x

x

x

UPDATE

允许用户使用UPDATE语句

x

x

x

x

USAGE

相当于"无权限"

2.3 授权语法

  • 用户授权语法

    GRANT priv_type [(column_list)] [, priv_type [(column_list)]] ...
        ON [object_type] {tbl_name | * | *.* | db_name.* | db_name.tbl_name | tbl_name | db_name.routine_name}
        TO user [IDENTIFIED BY [PASSWORD] 'password']
            [, user [IDENTIFIED BY [PASSWORD] 'password']] ...
        [REQUIRE
            NONE |
            [{SSL| X509}]
            [CIPHER 'cipher' [AND]]
            [ISSUER 'issuer' [AND]]
            [SUBJECT 'subject']]
        [WITH with_option [with_option] ...]
    ​
    routine_name : 指定库的函数,存储过程,触发器
    with_option:
        GRANT OPTION
      | MAX_QUERIES_PER_HOUR count
      | MAX_UPDATES_PER_HOUR count
      | MAX_CONNECTIONS_PER_HOUR count
      | MAX_USER_CONNECTIONS count
      | MAX_STATEMENT_TIME time
    ​

    范例

    GRANT SELECT (col1), INSERT (col1,col2) ON mydb.mytbl TO 'someuser'@'somehost‘;
    GRANT ALL ON wordpress.* TO wordpress@'192.168.8.%' IDENTIFIED BY 'cbear';
    GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.168.8.%' IDENTIFIED BY 'cbear' WITH GRANT OPTION;

  • 回收权限

    REVOKE priv_type [(column_list)] [, priv_type [(column_list)]] ... ON
    [object_type] priv_level FROM user [, user] ...
    ​
    REVOKE ALL PRIVILEGES, GRANT OPTION
        FROM user [, user] ...
    ​
    REVOKE PROXY ON user
        FROM user [, user] ...

    范例

    REVOKE DELETE ON testdb.* FROM 'testuser'@‘172.16.0.%’;
    REVOKE INSERT ON *.* FROM 'grantUser'@'localhost';
  • 查看指定用户获得的授权

    Help SHOW GRANTS
    SHOW GRANTS FOR 'user'@'host'; 

    查看当前用户的授权

    SHOW GRANTS FOR CURRENT_USER();
    等价于
    SHOW GRANTS;
    等价于
    SHOW GRANTS FOR CURRENT_USER;

注意 : MariaDB服务进程启动时会读取mysql库中所有授权表至内存

  • GRANTREVOKE等执行权限操作会保存于系统表中 , MariaDB的服务进程通常会自动重读授权表 , 使之生效

  • 对于不能够或不能及时重读授权表的命令 , 可手动让MariaDB的服务进程重读授权表 : mysql> FLUSH PRIVILEGES

2.4 查看权限

查询所有权限: 查询数据库中所有用户列表和权限信息。

MariaDB [(none)]> select distinct concat("用户:",user," 权限:",host," : ") as query from mysql.user;
+------------------------------------+
| query                              |
+------------------------------------+
| 用户:root 权限:localhost :         |
| 用户:root 权限:127.0.0.1 :         |
| 用户:root 权限:::1 :               |
| 用户:lyshark 权限:localhost :      |
| 用户:lyshark 权限:% :              |
+------------------------------------+
8 rows in set (0.46 sec)
​
MariaDB [(none)]>

查询指定权限: 查询关于lyshark的所有权限信息

MariaDB [(none)]> show grants for lyshark;
+----------------------------------------------+
| Grants for lyshark@%                         |
+----------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'lyshark'@'%' |
+----------------------------------------------+
1 row in set (0.00 sec)
​
MariaDB [(none)]>

查询指定权限: 查询lyshark用户远程%权限,和本地localhost权限

MariaDB [(none)]> show grants for "lyshark"@"%";
+----------------------------------------------+
| Grants for lyshark@%                         |
+----------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'lyshark'@'%' |
+----------------------------------------------+
1 row in set (0.00 sec)
​
MariaDB [(none)]> show grants for "lyshark"@"localhost";
+----------------------------------------------------------------------------------------------------------------+
| Grants for lyshark@localhost                                                                                   |
+----------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'lyshark'@'localhost' IDENTIFIED BY PASSWORD '*23AE809DDACAF96AF0FD78ED04B6A265E05AA257' |
+----------------------------------------------------------------------------------------------------------------+
1 row in set (0.37 sec)
​
MariaDB [(none)]>

2.5 收回权限

收回用户授权: 撤销lyshark用户,对所有数据库的远程%用户权限

MariaDB [(none)]> show grants for lyshark;
+----------------------------------------------+
| Grants for lyshark@%                         |
+----------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'lyshark'@'%' |
+----------------------------------------------+
1 row in set (0.00 sec)
​
MariaDB [(none)]> revoke all on *.* from "lyshark"@"%";
Query OK, 0 rows affected (0.00 sec)
​
MariaDB [(none)]> show grants for lyshark;
+-------------------------------------+
| Grants for lyshark@%                |
+-------------------------------------+
| GRANT USAGE ON *.* TO 'lyshark'@'%' |
+-------------------------------------+
1 row in set (0.00 sec)

收回用户授权: 撤销lyshark用户的远程登陆权限

MariaDB [(none)]> revoke create on *.* from "lyshark"@"%";
Query OK, 0 rows affected (0.01 sec)

刷新权限: 修改完成以后,记得执行权限的刷新操作.

MariaDB [(none)]> flush privileges;
Query OK, 0 rows affected (0.01 sec)

3. MySQL的图形化的远程管理工具

MySQL数据库中创建用户并授权后 , 可以使用相关图形化工具进行远程的管理。

常见的图形化管理工具 : Navicat , SQLyog , mysql-workbench

3.1 Navicat 工具

3.1.1 安装激活步骤

3.1.1.1 安装Navicat软件

官方软件下载地址: Navicat | 下载 Navicat Premium 14 天免费 Windows、macOS 和 Linux 的试用版

安装步骤如下:

  1. 双击对应软件包 , 选择下一步

    image-20230320163729842

  2. 选择我同意,点击下一步

    image-20230320163845687

  3. 选择安装路径,点击下一步

  4. 点击是否选择创建桌面快捷图标,选择下一步

    image-20230320164138603

  5. 最后选择安装即可

    image-20230320164238164

之后等软件安装完成

3.1.1.2 激活Navicat软件

激活软件,使用从网上下载的破解软件: NavicatCracker.exe

image-20230320164640283

  1. 右击该软件,选择以管理员身份运行该程序

  2. 断开电脑网络 ,在激活软件1. Patcher中选择软件安装位置 ,之后点击Patch!

    image-20230320165601810

    image-20230320165204819

    image-20230320165509509

  3. 打开navicat的注册页面。 在激活软件2. KeyGen中,点击Generate! 生成许可证, 将生成的许可证复制到navicat软件中, 点击激活

    image-20230320170406748

    image-20230320170629516

  1. 在navicat软件中选择手动激活

    image-20230320170735285

  2. 将手动激活软件页面中的请求码,复制到激活软件3. Offine Activation中的Request Code框中

    image-20230320170943205

  3. 点击Generate Activation Code! ,生成软件激活码

    image-20230320171035322

  4. 将激活软件种生成的Activation Code复制到navicat软件中激活码框架中 ,之后点击激活即可

    image-20230320171218002

  1. 验证激活成功。在帮助-->关于中查看

    image-20230320173214896

    image-20230320173418254

3.1.2 测试软件

  1. 在mariadb软件中 , 给root远程授权

    MariaDB [(none)]> GRANT ALL ON *.* TO 'root'@'%' IDENTIFIED BY 'daemon' WITH GRANT OPTION;
    MariaDB [(none)]> select Host,user,Password,authentication_string from mysql.user;
    +-----------+----------+-------------------------------------------+-------------------------------------------+
    | Host      | user     | Password                                  | authentication_string                     |
    +-----------+----------+-------------------------------------------+-------------------------------------------+
    | localhost | root     | *9092E6448E8E10E8BAC1C290E16D0D2E36759BAA | *9092E6448E8E10E8BAC1C290E16D0D2E36759BAA |
    | 127.0.0.1 | root     | *9092E6448E8E10E8BAC1C290E16D0D2E36759BAA |                                           |
    | ::1       | root     | *9092E6448E8E10E8BAC1C290E16D0D2E36759BAA |                                           |
    | localhost | myfreax  | *2470C0C06DEE42FD1618BB99005ADCA2EC9D1E19 |                                           |
    | localhost | myfreax1 | *2470C0C06DEE42FD1618BB99005ADCA2EC9D1E19 | *2470C0C06DEE42FD1618BB99005ADCA2EC9D1E19 |
    | localhost | myfreax2 | *2470C0C06DEE42FD1618BB99005ADCA2EC9D1E19 | *2470C0C06DEE42FD1618BB99005ADCA2EC9D1E19 |
    | localhost | username | *2470C0C06DEE42FD1618BB99005ADCA2EC9D1E19 |                                           |
    | %         | root     | *9092E6448E8E10E8BAC1C290E16D0D2E36759BAA |                                           |
    +-----------+----------+-------------------------------------------+-------------------------------------------+
    8 rows in set (0.000 sec)
    ​
  2. 点击navicat,选择mysql

    image-20230320174246536

  3. 选择连接名称和连接IP,和数据库用户名密码

  4. 点击测试连接 ,测试连接正常之后 , 点击确定,创建链接

    image-20230320174619673

    image-20230320174649290

  5. 创建完成链接之后点击打开连接

    image-20230320174851528

    image-20230320174946522

熊熊