zoukankan      html  css  js  c++  java
  • 管理 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'                                                              |
    +----------------------------------------------------------------------------------------------------------------+
    

     

  • 相关阅读:
    将训练好的Tensorflow模型部署到web应用中
    python pip升级
    python time
    python 队列模拟递归遍历目录(广度遍历)
    python 栈模拟递归遍历目录(深度遍历)
    python 递归遍历目录
    python 队列
    python 栈
    python 递归
    python 语音模块
  • 原文地址:https://www.cnblogs.com/conanwang/p/5932579.html
Copyright © 2011-2022 走看看