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)]>