管理 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 用户账户的更多相关文章
- oracle之创建和管理数据库用户账户
创建和管理数据库用户账户 sys 查看数据库里有多少用户?select username from dba_users; 9.1.1用户的缺省表空间 每个用户账户都可以指定默认的表空间,用户创建的任何 ...
- MariaDB 用户与权限管理(12)
MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可MariaDB的目的是完全兼容MySQL,包括API和命令行,MySQL由于现在闭源了,而能轻松成为MySQ ...
- 轻松学习Linux之用户账户管理及实例
Linux用户管理基础 (下载清晰视频:http://down.51cto.com/data/158699) 轻松学习Linux之用户账户管理的实例-跨硬盘移动数据 (此处视频不清楚下按下面地址下载清 ...
- Linux上FTP部署:基于mariadb管理虚拟用户
FTP原理 FTP 采用 Internet 标准文件传输协议 FTP 的用户界面, 向用户提供了一组用来管理计算机之间文件传输的应用程序.图1 FTP 的基本模型 FTP 是基于客户---服务器(C/ ...
- MongoDB学习(配置用户账户和访问控制)
理解admin数据库 安装MongoDB时,会自动创建admin数据库,这是一个特殊的库.有些用户账户角色赋予用户操作多个数据库的权限,而这些用户只能在admin数据库中创建.要创建有权操作所有数据库 ...
- 自学Linux Shell7.1-linux用户账户和组
点击返回 自学Linux命令行与Shell脚本之路 7.1-linux用户账户和组 linux安全系统的核心是用户账户.每个能进入linux系统的用户都会被分配唯一的用户账户,用户对系统中各对象的访问 ...
- 管理MariaDB
查看当前用户信息 MariaDB [aa]> select user(); 查看所有存储用户信息 MariaDB [aa]> desc mysql.user; MariaDB [aa]&g ...
- Linux运维六:用户管理及用户权限设置
Linux 系统是一个多用户多任务的分时操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统.用户的账号一方面可以帮助系统管理员对使用系统的用户进行 ...
- rabbitmq之后台管理和用户设置(三)
前言 前面介绍了erlang环境的安装和rabbitmq环境安装,接下来介绍rabbitmq的web管理和用户设置. 启用后台管理插件 通过后台管理插件我们可以动态监控mq的流量,创建用户,队列等. ...
随机推荐
- hdu 2209 bfs+状压
http://acm.hdu.edu.cn/showproblem.php?pid=2209 不知为啥有种直觉.会出状压+搜索的题,刷几道先 简单的BFS.状压表示牌的状态, //#pragma co ...
- node.js之路由,中间件,ge请求和post请求的参数
一.路由 1.什么是路由 服务器需要根据不同的URL或请求来执行不一样的操作,我们可以通过路由来实现这个步骤 2.实现路由的方法 2.1.get请求访问网址时,做什么事 1 app.get(" ...
- Python的几个常用模块
一.sys 用于提供对Python解释器相关的操作: sys.argv 命令行参数List,第一个元素是程序本身路径 sys.exit(n) 退出程序,正常退出时exit(0) sys.version ...
- 53、css补充
css其余问题补充 一.默认的高度和宽度问题 1.父子都是块级元素 <!DOCTYPE html> <html> <head> <title>...&l ...
- 统计函数:MAX,MIN,SUM,AVG,COUNT
- iOS学习——内存泄漏检查及原因分析
项目的代码很多,前两天老大突然跟我说项目中某一个ViewController的dealloc()方法没有被调用,存在内存泄漏问题,需要排查原因,解决内存泄漏问题.由于刚加入项目组不久,对出问题的模块的 ...
- OC学习9——反射机制
1.OC提供了3种编程方式与运行环境进行交互: 直接通过OC的源代码:这是最常见的方式,开发人员只是编写OC源代码,而运行环境负责在后台工作. 通过NSObject类中定义的方法进行动态编程:因为绝大 ...
- 创建一个可用的简单的SpringMVC项目,图文并茂
转载麻烦注明下来源:http://www.cnblogs.com/silentdoer/articles/7134332.html,谢谢. 最近在自学SpringMVC,百度了很多资料都是比较老的,而 ...
- ES6 Proxy和Reflect (上)
Proxy概述 Proxy用于修改某些操作的默认行为,等同于在语言层面做出修改,所以属于一种"元编程"(meta programming),即对编程语言进行编程. Proxy可以理 ...
- centOS7 mini配置linux服务器(五) 安装和配置tomcat和mysql
配置java运行环境,少不了服务器这一块,而tomcat在服务器中占据了很大一部分份额,这里就简单记录下tomcat安装步骤. 下载 首先需要下载tomcat7的安装文件,地址如下: http://t ...