目录
一、MySQL权限表
1.MySQL权限系统的工作原理
MySQL权限表的验证过程为:
2.权限表
如果要查看user表中的字段,可以像查看欧通表那样使用SELECT语句:
user表是MySQL中最重要的权限表,用于记录允许连接到服务器的账号信息。其中的权限是全局级的,如果用户在该表中被授予了DELETE权限,则该用户可以删除MySQL服务器上所有数据库中的任何记录。
user表中的列可以分为4部分:用户列、权限列、安全列和资源控制列,通常使用最多的是用户列和权限列。
1.用户列
2.权限列
3.安全列
4.资源控制列
注:MySQL5.7还新增了4个字段,分别用于控制密码失效、最后一次i修改时间、失效时间,及账户锁定。
二、账号管理
1.创建账号
1.使用GRANT语句创建新用户
使用GRANT语句不仅可以创建新用户,还可以在创建的同时对用户授权。另外,使用GRANT语句还可以指定账户的其他特点,如使用安全连接、限制使用服务器资源等。
需要注意的是,使用GRANT语句创建新用户时必须有GRANT权限。
GRANT语句的基本语法格式如下:
其中,priv_type表示赋予用户的权限类型,比如SELECT,UPDATE等,all privileges为所有权限;db.table表示用户的权限所作用的数据库或数据库中的表,*.*表示所有数据库;user表示用户名;host表示主机名,其中%匹配任何主机名;IDENTIFIED BY关键字用于设置密码;password表示用户密码;[WITH with_option [with_option]...]为可选参数,表示对新创建的用户赋予GRANT权限,即该用户可以对其他用户赋予权限。
2.使用CREATE USER语句创建新用户
要使用CREATE USER语句创建用户,必须有全局的CREATE USER权限,或MySQL数据库的INSERT权限。每添加一个用户,CREATE USER语句会在mysql.user表中添加一条新纪录。CREATE USER语句的基本语法格式如下:
使用CREATE USER语句创建的用户没有任何权限,还需要使用GRANT语句赋予其权限。
2.删除账号
在MySQL中,可以使用DROP USER语句删除用户。其基本语法格式如下:
DROP USER语句可以一次删除一个或多个用户。要使用该语句,必须拥有MySQL数据库的全局CREATE USER权限或DELETE权限。
3.root用户修改自身密码
1.修改MySQL数据库的user表
由于所有账号信息都保存在user表中,因此可以通过修改user表中的密码字段值来改变root用户的密码。使用root用户登录MySQL服务器后,可以执行以下UPDATE语句修改其登录密码:
然后使用FLUSH PRIVILGES;语句,重新加载用户权限。
2.使用mysqladmin命令修改密码
使用mysqladmin命令修改root用户密码的基本语法形式如下:
username为要修改密码的用户名,此处指定为root用户;参数-h指定要修改的服务器地址,可以不屑,默认为localhost;-p表示输入当前密码;password为关键字,后面双引号中的内容newpwd为要设置的新密码。
3.使用SET语句修改root用户密码
使用SET语句可以重新设置自身或其他用户的登录密码。修改自身登录密码的语法结构如下:
新密码必须使用PASSWORD()函数加密。
4.root用户修改普通用户密码
1.使用SET语句修改普通用户密码
使用SET语句修改普通用户密码的语法格式如下:
如果是普通用户修改自身密码,则可以省略FOR子句:
2.使用UPDATE语句修改普通用户密码
在使用root用户登录MySQL服务器后,可以通过之心UPDATE语句修改mysql数据库中user表的authentication_string字段值,来修改普通用户的密码。使用UPDATE语句修改普通用户密码的基本语法格式如下:
PASSWORD()函数用户加密用户数据。执行该语句后需要执行FLUSH PRIVILEGES;语句刷新权限,重新加载权限表。
3.使用GRANT语句修改普通用户密码
只有拥有GRANT权限,才能使用GRANT语句修改密码。使用GRANT语句修改普通用户密码的基本语法格式如下:
注:在使用GRANT语句或mysqladimn命令修改用户密码时,密码均会自动加密,不需要使用PASSWORD()函数。
5.root用户密码丢失的解决方法
三、MySQL权限管理
1.查看账号权限
创建好账号后,可以使用SHOW GRANTS语句查看账号的权限信息,其基本语法格式如下:
其中user表示登录用户名,host表示登录的主机名或IP地址。在使用该语句时,指定的用户名和主机名都要用单引号引起来,并且在两个名字中间使用@符号连接。
GRANT可以显示全局级和非全局级权限的详细信息,如果表或列层级的权限被授予用户,它们也能在结果中显示。
除上述方法外,也可以使用SELECT语句查看权限表中各权限字段值来确定用户的权限信息,其基本语法格式如下:
其中privileges_list为想要查看的权限字段,可以为select_priv,insert_priv等,各字段之间使用逗号隔开。
2.给账号授权
给账户授权就是将某个权限授予某个用户。合理的权限可以保证数据库的安全。在MySQL中使用GRANT语句为账户授权,其基本语法格式如下:
同创建账号时一样,priv_type表示赋予用户的权限类型,比如SELECT,UPDATE等;db.table表示用户的权限所作用的数据库中的表,*.*表示所有数据库的所有表;user表示用户名;host表示主机名;[WITH with_option [with_option]...]为可选参数,除了可以对新创建的用户赋予GRANT权限外,其可取值还有4个,用户账号资源限制,各值及其意义分别如下:
3.收回权限
收回权限就是取消用户已有的某些权限。收回用户不必要的权限可以在一定程度上保证系统的安全。MySQL中使用REVOKE语句取消用户权限。取消用户权限后,用户账号的记录将从db,tables_priv和columns_priv表中删除,但是用户账号记录依然保存在user表中(可以使用DROP USER语句删除user表中的账号记录)。
REVOKE语句的基本语法格式如下:
该语句收回指定的权限,其中priv_type参数表示权限类型;db.table表示从哪个数据库哪个表上收回权限;‘user’@’host’表示用户账户,由用户名和主机名构成。
一般将在用户从user表中彻底删除之前,应该收回其所有权限,包括全局层级、数据库层级、表层级和列层级的权限。使用REVOKE语句收回用户所有权限的基本语法格式如下:
使用REVOKE语句,必须拥有MySQL数据库的全局CREATE权限或UPDATE权限。