Loading

MySQL基础之安全管理

管理用户

MySQL用户账号和信息存储在名为mysql的MySQL数据库中。一般不需要直接访问mysql数据库和表, 但有时需要直接访问。需要直接访问它的时机之一是在需要获得所有用户账号列表时。为此, 可以使用如下代码

USE mysql;
SELECT user FROM user;

mysql数据库中有一个名为user的表, 它包含所有用户账号。user表有一个名为user的列, 它存储用户登录名。

创建用户账号

为了创建一个新用户账号, 使用CREATE USER语句, 如下所示:

CREATE USER ben IDENTIFIED BY 'p@$$w0rd';

CREATE USER创建用户账号, 在创建用户账号时不一定需要口令, 不过这个例子使用IDENTIFIED BY 'p@$$w0rd'给出一个口令

IDENTIFIED BY指定的口令为纯文本, MySQL将保存在user表之前对其进行加密。为了作为散列值指定口令, 使用IDENTIFIED BY PASSWORD

为重新命名一个用户账号, 使用RENAME USER语句

RENAME USER ben TO bforta;

删除用户账号

为了删除一个用户账号(以及相关的权限), 使用DROP USER语句

DROP USER bforta;

设置访问权限

在创建用户账号之后, 必须接着分片访问权限。新创建的用户没有访问权限。它们能登录MySQL, 但是不能看到数据, 不能执行任何数据库操作。

为了看到赋予用户账号的权限, 使用SHOW GRANTS FOR, 

MariaDB [(none)]> SHOW GRANTS FOR bforta;
+------------------------------------+
| Grants for bforta@% |
+------------------------------------+
| GRANT USAGE ON *.* TO 'bforta'@'%' |
+------------------------------------+
1 row in set (0.001 sec)

MariaDB [(none)]>

输出显示用户bforta有一个权限USAGE ON *.*。USAGE表示根本没有权限。

为设置权限, 使用GRANT语句。GRANT要求至少给出以下信息:

  • 要授予的权限
  • 被授予访问权限的数据库和表
  • 用户名
MariaDB [(none)]> GRANT SELECT ON crashcourse.* TO bforta;
Query OK, 0 rows affected (0.004 sec)

MariaDB [(none)]> 

此GRANT允许用户在crashcourse.*(crashcourse数据库的所有表)上使用SELECT。

GRANT的反操作是REVOKE, 用它来撤销特定的权限。

MariaDB [(none)]> REVOKE SELECT ON crashcourse.* FROM bforta;
Query OK, 0 rows affected (0.001 sec)

MariaDB [(none)]> 

GRANT和REVOKE可以在几个层次上控制访问权限

  • 整个服务器, 使用GRANT ALL和REVOKE ALL
  • 整个数据库, 使用ON database.*
  • 特定的表, 使用ON database.table
  • 特定的列
  • 特定的存储过程

可以授予和撤销的权限如下

更改口令

为了更改用户的口令, 可使用SET PASSWORD语句, 新口令必须如下加密

MariaDB [(none)]> SET PASSWORD FOR bforta = Password('n3w p@$$w0rd');
Query OK, 0 rows affected (0.003 sec)

MariaDB [(none)]> 

SET PASSWORD还可以用来设置自己的口令

MariaDB [(none)]> SET PASSWORD = Password('n3w p@$$w0rd');
Query OK, 0 rows affected (0.003 sec)

MariaDB [(none)]> 

 

posted @ 2020-08-10 21:06  愚者丶  阅读(112)  评论(0编辑  收藏  举报