管理 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的流量,创建用户,队列等. ... 
随机推荐
- orale 查询每年、每月、每日统计量的sql语句
			每年 select to_char(createtime, 'YYYY') 年, count(*) from table group by to_char(createtime, 'YYYY'); ... 
- tomcat加入系统服务+开机自启
			1.首先将tomcat/bin 下的catalina.sh复制到目录/etc/init.d中,并修改名称为tomcat [root@iZ2318 ~]# sudo cp /usr/local/tomc ... 
- 【java】读取资源文件key->value,java.util.ResourceBundle
			package 国际化; import java.util.ResourceBundle; public class TestResource { public static void main(St ... 
- C++ 知识点总结复习
			C++ 1.C++是静态类型语言,使用静态类型的编程语言是在编译时执行类型检查,而不是在运行时执行类型检查. 2.面向对象程序设计 C++ 完全支持面向对象的程序设计,包括面向对象开发的四大特性: 封 ... 
- iOS支付宝支付相关问题
			支付宝实现以及相关问题:http://www.jianshu.com/p/f81578954974 1.支付宝支付流程 1.用户点击支付2.客户端请求服务器用户支付3.服务器接收请求生成金额订单等要给 ... 
- HTTP协议------->资源和URL
			1.前言 最近在研究http,希望结合书本,对网上资料进行整合,用“人话”聊聊这个玩意儿- 计划用近十篇文章,详尽的说清楚以下一些问题: URL和资源.HTTP报文是什么东西? HTTP是怎样进行链接 ... 
- visual studio 2012打开提示 未能将网站×××配置为使用 ASP.NET 4.5 和 尚未在Web服务器上注册,您需要手动将Web服务器配置为使用ASP.NET 4.5
			未能将网站×××配置为使用 ASP.NET 4.5.为了使此网站正确运行,您必须将它手动配置为使用ASP.NET 4.5. ASP.NET 4.5尚未在Web服务器上注册,您需要手动将Web服务器配置 ... 
- bzoj 3139: [Hnoi2013]比赛
			Description 沫沫非常喜欢看足球赛,但因为沉迷于射箭游戏,错过了最近的一次足球联赛.此次联 赛共N支球队参加,比赛规则如下: (1) 每两支球队之间踢一场比赛. (2) 若平局,两支球队各得 ... 
- java的运行机制(基础)
			1:高级语言的运行机制: 我们编程都是用的高级语言(写汇编和机器语言的大牛们除外),计算机不能直接理解高级语言,只能理解和运行机器语言,所以必须要把高级语言翻译成机器语言,计算机才能运行高级语言所编写 ... 
- 轻量级quill富文本编辑器
			因为公司产品需要在移动端编辑文本,所以发现了这个轻量级的好东西,网上也没找到比较好的案例,就自己总结了下,有兴趣的直接复制代码运行看看就知道啦! 下面是quill.js的CDN加速地址: <!- ... 
