十一、MySQL权限与安全管理

MySQL是一个多用户数据库,具有功能强大地访问控制系统,可以为不同用户指定允许地权限。MySQL用户可以分为普通用户和root用户。root用户是超级管理员,拥有所有权限,包括创建用户、删除用户和修改用户地密码等管理权限。用户管理包括管理用户账户、权限等。

一、权限表

MySQL服务器通过权限表来控制用户对数据库地访问,权限表存放在MySQL数据库中,由MySQL_install_db脚本初始化。存储账户权限信息地表主要有user、db、table_priv、columns_priv和procs_priv.

1、user表

user表是MySQL中最重要地一个权限表,记录允许连接到服务器地账号信息,里面的权限是全局级的。例如,一个用户在user表中被授予了DELETE权限,则该用户可以删除MySQL服务器上所有数据库中的任何记录。user表中的字段可以分为4类,分别是用户列、权限列、安全列和资源控制列。

1、用户列

user表的用户列包括Host、User、authentication_string,分别表示主机名、用户名和密码。其中User和Host为User表的联合主键。当用户与服务器之间建立连接时,输入的账户信息中的用户名称、主机名和密码必须匹配User表中对应的字段,只有3个值都匹配的时候,才允许连接的建立。这3个字段的值就是创建账户时保存的账户信息。修改用户密码时,实际就是修改user表的authentication_string字段的值。

2、权限列

权限列的字段决定了用户的权限,描述了在全局范围内允许对数据和数据库进行的操作。包括查询权限、修改权限等普通权限,还包括了关闭服务器、超级权限和加载用户等高级权限。普通权限用户操作数据库;高级权限用于数据库管理。

user表中对应的权限是针对所有用户数据库的。这些字段值的类型为ENUM,可以取的值只能为Y和N,Y表示该用户有对应的权限;N表示用户没有对应的权限。查看user表的结构可以看到,这些字段的值默认都是N。如果要修改权限,可以使用GRANT语句和UPDATE语句更改user表的这些字段来修改用户对应的权限。

3、安全列

安全列只有6个字段,其中两个是ssl相关的,两个是x509相关的,另外两个是授权插件相关的。ssl用于加密;x509标准可用于标识用户;Plugin字段标识可用于验证用户身份的插件,如果该字段为空,服务器使用内建授权验证机制验证用户身份。读者可以通过SHOW VARIABLES LIKE 'have_openssl’语句来查询服务器是否支持ssl功能。

4、资源控制列

资源控制列的字段用来限制用户使用的资源,包含4个字段,分别为:
(1)max_questions——用户每小时允许执行的查询操作次数。
(2)max_updates——用户每小时允许执行的更新操作次数。
(3)max_connections——用户每小时允许执行的连接操作次数。
(4)max_user_connections——用户允许同时建立的连接次数。
一个小时内用户查询或者连接数量超过资源控制限制,用户将被锁定,直到下一个小时,才可以在此执行对应的操作。可以使用GRANT语句更新这些字段的值。

2、db表

db表是MySQL数据库中非常重要的权限表。db表中存储了用户对某个数据库的操作权限,决定用户能从哪个主机存取哪个数据库。db表比较常用。

1、用户列

db表用户列有3个字段,分别是Host、User、Db,标识从某个主机连接某个用户对某个数据库的操作权限,这3个字段的组合构成了db表的主键。host表不存储用户名称,用户列只有2个字段,分别是Host和Db,表示从某个主机Host和Db,表示从某个主机连接的用户对某个数据库的操作权限,其主键包括Host和Db两个字段。host很少用到,一般情况下db表就可以满足权限控制需求了。

2、权限列

db表中create_routing_priv和alter_routine_priv这两个字段表明用户是否有创建和修改存储过程的权限。

3、tables_priv表和columns_priv表

tables_priv表用来对表设置操作权限,columns_priv表用来对表的某一列设置权限。

4、procs_priv表

procs_priv表可以对存储过程和存储函数设置操作权限。

2、账户管理

MySQL提供了许多语句来管理用户账户,包括登录和退出MySQL服务器,创建用户、删除用户、密码管理和权限管理等内容。MySQL数据库的安全性需要通过账户管理来保证。本接将介绍在MySQL中如何对账户进行管理。

1、登录和退出MySQL服务器

读者已经知道登录MySQL时,可以使用MySQL命令并在后面指定登录主机以及用户名和密码。本小节将详细介绍MySQL命令的常用参数以及登录、退出MySQL服务器的方法。

通过MySQL -help命令可以查看MySQL命令帮助信息。MySQL命令的常用参数如下:
(1)-h 主机名,可以使用该参数指定主机名或ip,如果不指定,默认是localhost。
(2)-u 用户名,可以使用该参数指定用户名。
(3)-p密码,可以使用该参数指定登录密码。如果该参数后面有一段字段,则该段字符串将作为用户的密码直接登录。如果后面没有内容,则登录的时候会提示输入密码。注意:该参数后面的字符串和-p之间不能有空格。
(4)-P端口号,该参数后面接MySQL服务器的端口号,默认为3306.
(5)数据库名,可以在命令的最后指定数据库名。
(6)-e执行SQL语句。如果指定了该参数,将在登录后执行-e后面的命令或SQL语句并退出。

使用root用户登录到本地MySQL服务器的mysql库中,命令如下:

mysql -h localhost -u root -p mysql

使用root用户登录到本地MySQL服务器的test_db数据库中,同时执行一条查询语句。命令如下:

mysql -h localhost -u root -p test_db -e "desc person;"

2、新建普通用户

创建新用户,必须有相应的权限来执行创建操作。在MySQL数据库中,有两种方式创建新用户:一种是使用CREATE USER语句;另一种是直接操作MySQL授权表。下面分别介绍这两种创建到用户的方法。

1、使用CREATE USER语句创建新用户

执行CREATE USER或GRANT语句时,服务器会修改相应的用户授权表,添加或者修改用户及其权限。CREATE USER语句的基本语法格式如下:

CREATE USER user_specification
[,user_specification]...

user_specification:
	user@host
	[
	 	IDENTIFIED BY [PASSWORD] 'password'
	 	| IDENTIFIED WITH auth_plugin [AS  'auth_string']
     ]

user表示创建的用户的名称;host表示允许登录的用户主机名称;IDENTIFIED BY表示用来设置用户的密码;[PASSWOED]表示使用哈希值设置密码,该参数可选;'password’表示用户登录时使用的普通明文密码;IDENTIFIED WITH语句为用户指定一个身份验证插件;auth_plugin是插件的名称可以是一个带单引号的字符串或者带双引号的字符串;auth_string是可选的字符串参数,该参数将传递给身份验证插件,由该插件解释该参数的意义。

CREATE USER语句会添加一个新的MySQL账户。使用CREATE

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值