第18章 管理用户以及授权

  • 内容
  • 评论
  • 相关

在生产环境中总不能一直”死啃”root管理员。为了保障数据库系统的安全性,以及让其他用户协同管理数据库,我们可以在MariaDB数据库管理系统中为他们创建多个专用的数据库管理账户,然后再分配合理的权限,以满足他们的工作需求。为此,可使用root管理员登录数据库管理系统,然后按照”CREATE USER 用户名@主机名 IDENTIFIED BY ‘密码’; “的格式创建数据库管理账户。再次提醒大家,一定不要忘记每条数据库命令后面的分号(;)。

MariaDB [(none)]> CREATE USER dabian@localhost IDENTIFIED BY ‘linux’;

创建的账户信息可以使用select命令语句来查询。下面命令查询的是账户dabian的主机名称、账户名称以及经过加密的密码值信息:

MariaDB [(none)]> use mysql

MariaDB [mysql]> SELECT HOST,USER,PASSWORD FROM user WHERE USER=”dabian”;

不过,用户dabian仅仅是一个普通账户,没有数据库的任何操作权限。不信的话,可以切换到dabian账户来查询数据库管理系统中当前都有哪些数据库。可以发现,该账户甚至没法查看完整的数据库列表(刚才使用root账户时可以查看到3个数据库列表):

数据库管理系统所使用的命令一般都比较复杂。我们以grant命令为例进行说明。grant命令用于为账户进行授权,其常见格式如下所示。在使用grant命令时需要写上要赋予的权限、数据库及表单名称,以及对应的账户及主机信息。其实,只要理解了命令中每个字段的功能含义,也就不觉得命令复杂难懂了。

GRANT命令的常见格式以及解释

命令

作用

GRANT 权限 ON 数据库.表单名称 TO 用户名@主机名

对某个特定数据库中的特定表单给予授权

GRANT 权限 ON 数据库.* TO 用户名@主机名

对某个特定数据库中的所有表单给予授权

GRANT 权限 ON *.* TO 用户名@主机名

对所有数据库及所有表单给予授权

GRANT 权限1,权限2 ON 数据库.* TO 用户名@主机名

对某个数据库中的所有表单给予多个授权

GRANT ALL PRIVILEGES ON *.* TO 用户名@主机名

对所有数据库及所有表单给予全部授权(需谨慎操作)

当然,账户的授权工作肯定是需要数据库管理员来执行的。下面以root管理员的身份登录到数据库管理系统中,针对mysql数据库中的user表单向账户dabian授予查询、更新、删除以及插入等权限。

MariaDB [(none)]> use mysql

MariaDB [mysql]> GRANT SELECT,UPDATE,DELETE,INSERT ON mysql.user TO dabian@localhost;

在执行完上述授权操作之后,我们再查看一下账户dabina的权限:

MariaDB [mysql]> SHOW GRANTS FOR dabian@localhost;


上面输出信息中显示账户dabian已经拥有了针对mysql数据库中user表单的一系列权限了。这时我们再切换到账户dabian,此时就能够看到mysql数据库了,而且还能看到表单user(其余表单会因无权限而被继续隐藏):

MariaDB [(none)]> show databases;

MariaDB [(none)]> use mysql;

MariaDB [mysql]> show tables;



我们接下来会慢慢学习数据库内容的修改方法。当前,先切换回root账户,移除刚才的授权。

[root@rhel7 ~]# mysql -u root -p

MariaDB [(none)]> use mysql;

MariaDB [mysql]> REVOKE SELECT,UPDATE,DELETE,INSERT ON mysql.user FROM dabian@localhost;


可以看到,除了移除授权的命令(revoke)与授权命令(grant)不同之外,其余部分都是一致的。这不仅好记而且也容易理解。执行移除授权命令后,再来查看账户dabian的信息:

MariaDB [mysql]> SHOW GRANTS FOR dabian@localhost;