首页 > 代码库 > 管理 MariaDB 用户账户

管理 MariaDB 用户账户

哪些用户可以连接到MariaDB 服务器,他们都可以从哪些地方连接,连接到服务器后又能够做什么等,都是本文将涉及到的内容。

用户的权限信息都保存在 mysql 库中的几个权限表中。对 MariaDB 的账号管理主要通过下面的SQL 语句来完成。

  • CREATE USER,DROP USER 和 RENAME USER。三条语句分别用来创建、删除和重命名 MariaDB 账户。
  • GRANT。为指定 MariaDB 账户分配权限。
  • REVOKE。撤销指定 MariaDB 账户的权限。
  • SET PASSWORD。为给定MariaDB 账户设置口令。
  • SHOW GRANT。显示指定 MariaDB账户当前拥有的全部权限。

 Mariadb 的账户管理操作

  • CREATE USER:创建一个新账户并为其设置一个口令(可选操作):
    CREATE USER account [IDENTIFIED BY ‘password’];
    这条语句只是创建帐户,未对帐户进行任何权限分配,权限分配由 GRANT 语句完成。
    示例:

     

     MariaDB [(none)]> CREATE USER yangfan IDENTIFIED BY ‘yangfan‘;
  • DROP USER:删除一个帐户及与之相关的全部权限:
    DROP USER account;
    该语句并未删除指定用户可访问到的任何数据库及相关的数据对象。
    示例:

     

     MariaDB [(none)]> DROP USER yangfan;
  • RENAME USER:改变给定账户的名称。
    RENAME USER from_account TO to_account
    示例:

     

     MariaDB [(none)]> RENAME USER ‘yangfan.lalala‘@‘127.0.0.1‘ TO ‘yangfan.lalala‘@‘%‘;

CREATE USER 等账户管理语句中的账户由一个用户名和一个主机名组成,其格式为‘user_name’@’host_name’。

主机部分是指客户从哪些主机去连接服务器。如若限制某个用户从指定的主机连接 MariaDB 服务:

MariaDB [(none)]> CREATE USER ‘yangfan‘@‘localhost‘ IDENTIFIED BY ‘yangfan‘;
MariaDB [(none)]> CREATE USER ‘yangfan‘@‘169.254.195.91‘ IDENTIFIED BY ‘yangfan‘;

第一条语句,创建一个名为 yangfan 的用户,并限制其只可从本机进行连接操作;第二条一句,创建一个名为 yangfan 的用户,并限制其只可从 ip 169.254.195.91 的客户机上连接服务。虽然用户名相同,实际上,他们并不是同一个账户,其对应的权限也可能不尽相同。

当然很多情况下并不需要严格要求用户只能从一台主机连接服务器。这个时候就可以用上通配符:

MariaDB [(none)]> CREATE USER ‘yangfan‘@‘169.254.195.%‘ IDENTIFIED BY ‘yangfan‘;
MariaDB [(none)]> CREATE USER ‘yangfan‘@‘%.yangfanweb.cn‘ IDENTIFIED BY ‘yangfan‘;
MariaDB [(none)]> CREATE USER ‘yangfan‘@‘%‘ IDENTIFIED BY ‘yangfan‘;

SQL 中 LIKE 的通配符 % 及 -,在此都可使用。如若使用 “%” 或 “-” 本身,则需使用 “\” 对其转义。

上面第一条语句创建一个名为 yangfan 的用户,并允许其在 169.254.195.* ip 段下的所有主机连接服务器;第二条语句创建一个名为 yangfan 的用户,并允许其能够从 yangfanweb.cn 域中的任意一台主机连接服务器;第三条语句创建了一个名为 yangfan 的用户,并允许其可从任意一台主机来连接服务器。(第三种方式最为方便,但对系统最不安全。)

MariaDB 对账户授权

对账户授权需要使用GRANT语句,下面是 GRANT 语句的语法:

GRANT privileges (columns) ON what To account [IDENTIFIED BY ‘password’][REQUIRE encryption requirements] [WITH grant or resource management options];

GRANT 语句里,如果用户存在,GRANT 语句则将改变它的权限;如果不存在 GRANT 语句则创建它,再将给定的权限分配给它。

下面是 GRANT 语句最为常用的几个语法元素。

  • privileges,授权账户的权限。
  • columns,权限将作用的数据列。如若需要列举多个数据列,则用逗号分隔。
  • what,权限的级别。
  • account,被授权的账户。account 的格式为 ‘user_name’@’host_name’。
  • password,账户的口令。类似于 CREATE USER 中的 IDENTIED BY。
确定账户的权限

可以授予用户的权限由很多种。下面3张表即为权限的汇总。

数据库管理权限

权限名权限所允许的操作
CREATE USER使用高级账户管理语句
FILE读、写 MariaDB 服务器主机上的文件
GRANT OPTION把账户权限授予其他账户
PROCESS查看在运行的线程的信息
RELOAD重新加载权限数据或更新日志及缓存
REPLICATION CLIENT查询主/从服务器的运行地点
REPLICATION SLAVE以复制的从服务器运行
SHOW DATBASES用 SHOW DATABASES 语句查看全部数据库名称
SHUTDOWN关闭服务器
SUPER用 KILL 命令终止线程以及进行其他超级用户操作

 

数据库对象操作权限

ALTER更改数据表或索引的定义
ALTER ROUTINE更改或删除存储函数或存储过程
CREATE创建数据库或数据表
CRATE ROUTINE创建存储函数或存储过程
CREATE TEMPORARY TABLE用 TEMPORARY 关键字创建临时表
CREATE VIEW创建视图
DELETE删除数据库中现有的数据行
DROP删除数据库、数据表或其他对象
EVENT为时间调度程序创建、删除或修改各种事件
EXECUTE执行存储函数或存储过程
INDEX创建或删除索引
INSERT往数据表中插入新数据行
LOCK TABLE用 LOCK TABLE 语句明确地锁定数据表
REFERENCE未使用(保留字)
SELECT检索数据表里的数据行
SHOW VIEW查看视图的定义
TRGGER创建或删除触发器
UPDATE修改数据行

 

其他权限

ALL [PRIVILEGES]所有操作权限(但不包含 GRANT)
USAGE一个特殊的“无权限”权限

数据库管理权限控制着服务器的运行情况,所以很少授权与普通用户。数据库对象操作权限控制着对服务器数据访问。

授予用户权限

要想把权限授予其他用户,首先发出授权的用户必须具备该权限,而且必须具备 GRANT OPTION 权限。

MariaDB 允许在数据库系统全局、数据库、数据表、数据列等多种级别上进行授权。权限级别由 ON 子句控制。

执行下面的语句:

MariaDB [(none)]> GRANT ALL ON test.* TO ‘yangfan‘@‘localhost‘ WITH GRANT OPTION;

上面语句将数据库test及其里面所有对象的所有权限授权于账户 ‘yangfan’@’localhost’。

MariaDB [(none)]> SHOW GRANTS FOR ‘yangfan‘@‘localhost‘;+----------------------------------------------------------------------------------------------------------------+| Grants for yangfan@localhost                                                                                   |+----------------------------------------------------------------------------------------------------------------+| GRANT USAGE ON *.* TO ‘yangfan‘@‘localhost‘ IDENTIFIED BY PASSWORD ‘*F6131BD316F9043F5FE0E5B95F5713D6F86A157F‘ || GRANT ALL PRIVILEGES ON `test`.* TO ‘yangfan‘@‘localhost‘ WITH GRANT OPTION                                    |+----------------------------------------------------------------------------------------------------------------+

执行以下语句:

MariaDB [(none)]> GRANT SELECT,INSERt,UPDATE ON test.* TO ‘yangfan‘@‘127.0.0.1‘;

上面语句将账户 ‘yangfan’@’127.0.0.1’ 的权限更改为,只有对数据库 test 及其里面所有对象进行 SELECT、INSERT 和 UPDATE 操作的权限。

MariaDB [(none)]> SHOW GRANTS FOR ‘yangfan‘@‘127.0.0.1‘;+----------------------------------------------------------------------------------------------------------------+| Grants for yangfan@127.0.0.1                                                                                   |+----------------------------------------------------------------------------------------------------------------+| GRANT USAGE ON *.* TO ‘yangfan‘@‘127.0.0.1‘ IDENTIFIED BY PASSWORD ‘*F6131BD316F9043F5FE0E5B95F5713D6F86A157F‘ || GRANT SELECT, INSERT, UPDATE ON `test`.* TO ‘yangfan‘@‘127.0.0.1‘                                              |+----------------------------------------------------------------------------------------------------------------+

 撤销用户权限

撤销用户授权用 REVOKE 语句,下面是 REVOKE 语句的语法:

REVOKE preivileges [ columns ] ON what FROM account;

之前我们将全部权限授予账户 ‘yangfan’@’localhost’, 现在我们对该账户进行权限的删除:

MariaDB [(none)]> REVOKE ALL ON test.* FROM ‘yangfan‘@‘localhost‘;

这样账户 ‘yangfan’@’localhost’ 对数据库 test 的权限便被全部删除了。

MariaDB [(none)]> SHOW GRANTS FOR ‘yangfan‘@‘localhost‘;+----------------------------------------------------------------------------------------------------------------+| Grants for yangfan@localhost                                                                                   |+----------------------------------------------------------------------------------------------------------------+| GRANT USAGE ON *.* TO ‘yangfan‘@‘localhost‘ IDENTIFIED BY PASSWORD ‘*F6131BD316F9043F5FE0E5B95F5713D6F86A157F‘ || GRANT USAGE ON `test`.* TO ‘yangfan‘@‘localhost‘ WITH GRANT OPTION                                             |+----------------------------------------------------------------------------------------------------------------+

注意:USAGE 便是上文提到的“无权限”的权限。

我们再删除账户 ‘yangfan’@’127.0.0.1’ 的 INSERT 和 UPDATE 的权限:

MariaDB [(none)]> REVOKE INSERT, UPDATE ON test.* FROM ‘yangfan‘@‘127.0.0.1‘;

查看结果:

MariaDB [(none)]> SHOW GRANTS FOR ‘yangfan‘@‘127.0.0.1‘;+----------------------------------------------------------------------------------------------------------------+| Grants for yangfan@127.0.0.1                                                                                   |+----------------------------------------------------------------------------------------------------------------+| GRANT USAGE ON *.* TO ‘yangfan‘@‘127.0.0.1‘ IDENTIFIED BY PASSWORD ‘*F6131BD316F9043F5FE0E5B95F5713D6F86A157F‘ || GRANT SELECT ON `test`.* TO ‘yangfan‘@‘127.0.0.1‘                                                              |+----------------------------------------------------------------------------------------------------------------+

 

管理 MariaDB 用户账户