在 MySQL 中使用 GRANT 语句给用户授权

本文介绍了在 MySQL 中如何使用 GRANT 语句给指定的用户账户赋予指定的权限。

作为一个数据库管理员或者维护人员,为了数据库的安全性,您需要更精确的权限控制。您可以给不同的用户赋予不同的权限。

当您创建了一个新用户之后,这个新的用户可以登录 MySQL 数据库服务器,但是他可能没有任何权限。只有在赋予他数据库和相关表的权限之后,他才可以进行选择数据库查询等操作。

在 MySQL 中, GRANT 语句用于给用户赋予权限。

MySQL GRANT 语法

下面是 MySQL GRANT 的语法:

GRANT privilege_type [,privilege_type],..
ON privilege_object
TO user_account;

在这个语法中:

privilege_type

权限类型。要赋予给用户的权限。 常用的包括: ALL, SELECT, UPDATE, DELETE, ALTER, DROP 以及 INSERT 等。 更详细的内容请参考:https://dev.mysql.com/doc/refman/8.0/en/privileges-provided.html#priv_all

privilege_object
权限对象。可以是所有对象,也可以是某个数据库中的所有对象,表 等。常用的包括: *, *.*, db_name.*, db_name.table_name, table_name 等。
user_account
用户账户。 它使用 username@host 的形式。

下面列举了几种常用的情况:

  • 分配全局权限

    GRANT ALL ON *.* TO sqliz@localhost;
    

    这里将全部数据库全部对象的全部权限分配给了用户 sqliz@localhost

  • 分配数据库全部对象的全部权限

    GRANT ALL ON sqliz.* TO sqliz@localhost;
    

    这里将 sqliz 数据库全部对象的全部权限分配给了用户 sqliz@localhost

  • 分配数据库中某个表的的查询和插入权限

    GRANT SELECT, INSERT ON sqliz.test_table TO sqliz@localhost;
    

    这里将 sqliz 数据库中的 test_table 表的 SELECTINSERT 权限分配给了用户 sqliz@localhost

MySQL GRANT 实例

请按照如下步骤执行 MySQL GRANT 实例:

  1. 使用 mysql 客户端工具连接到 MySQL 服务器,并使用 root 用户登录:

    mysql -u root -p
    

    输入 root 帐户的密码并按 Enter

    Enter password: ********
    
  2. 显示来自当前 MySQL 服务器的用户

    SELECT user FROM mysql.user;
    
    +------------------+
    | user             |
    +------------------+
    | root             |
    | test_role1       |
    | test_role2       |
    | testuser         |
    | mysql.infoschema |
    | mysql.session    |
    | mysql.sys        |
    | root             |
    +------------------+
  3. 创建一个名为 sqliz新用户

    CREATE user 'sqliz'@'%' IDENTIFIED by 'SqLiZ9879123!';
    
  4. 再次显示所有用户:

    SELECT user FROM mysql.user;
    
    +------------------+
    | user             |
    +------------------+
    | root             |
    | test_role1       |
    | test_role2       |
    | testuser         |
    | mysql.infoschema |
    | mysql.session    |
    | mysql.sys        |
    | root             |
    | sqliz            |
    +------------------+

    用户 sqliz 已成功创建。

  5. 打开一个新的会话并以 sqliz 用户身份登录 MySQL:

    mysql -u sqliz -p
    

    输入密码 sqliz 并按下 Enter

    Enter password: ********
    
  6. 查看 sqliz 可访问的数据库列表

    SHOW DATABASES;
    

    以下是 sqliz 可以访问的数据库列表:

    +--------------------+
    | Database           |
    +--------------------+
    | information_schema |
    +--------------------+
  7. 转到用户 root 的会话并创建一个新数据库,名为 sqlizdb

    CREATE DATABASE sqlizdb;
    
  8. 使用 GRANT 语句将数据库 sqlizdb 的所有权限授权给用户 sqliz

    GRANT ALL PRIVILEGES ON sqlizdb.* TO sqliz@'%';
    
  9. 进入 sqliz 的会话,显示数据库:

    SHOW DATABASES;
    

    现在, sqliz 可以看到 sqlizdb

    +--------------------+
    | Database           |
    +--------------------+
    | information_schema |
    | sqlizdb            |
    +--------------------+
  10. 选择数据库 sqlizdb

    USE sqlizdb;
    

    此后, 默认的数据库为: sqlizdb。以后的所有操作都默认在此数据库中进行。

  11. 创建一个新表, 名为 test_table

    CREATE TABLE test_table(
        id int AUTO_INCREMENT PRIMARY KEY,
        txt varchar(100) NOT NULL
    );
    
  12. sqlizdb 数据库中显示表

    SHOW TABLES;
    

    用户 sqliz 可以看到 test_table 表:

    +-------------------+
    | Tables_in_sqlizdb |
    +-------------------+
    | test_table        |
    +-------------------+
  13. 在表 test_table插入一行

    INSERT INTO test_table(txt)
    VALUES('Hello World.');
    
  14. 从表 test_table查询数据

    SELECT * FROM test_table;
    

    这是输出:

    +----+--------------+
    | id | txt          |
    +----+--------------+
    |  1 | Hello World. |
    +----+--------------+

现在, 用户 sqliz 可以在 sqlizdb 数据库中做任何事情。

结论

在本文中,您学习了如何使用 MySQL GRANT 语句对用户授予不同的权限。