MySQL:47---安全管理(用户管理(create/drop user)、访问权限(grant、revoke)、更改用户口令)

一、root用户

  • 为了执行数据库的操作,需要登录MySQL。MySQL创建一个名为root的用户账号,其对整个MySQL服务器具有完全的控制。不过在现实工作中,决不能轻易的使用root,应该创建一系列的账号,有的用于管理,有的供用户使用,有的供开发人员使用,等等

不要使用root

  • 应该严肃对等root登录的使用。仅在绝对需要的时候才去使用它

二、管理用户

  • MySQL用户账号和信息存储在名为mysql的数据库中,该数据库中有一个名为user的表,它包含所有用户账号,例如下面查询用户登录名

用多个客户机进行实验

  • 实验对用户账号和权限进行更改的最好办法是打开多个数据库客户机(如mysql命令行实用程序的多个副本),一个作为登录管理,其他作为被测试的用户登录

三、创建用户账号(create user)

  • 可以使用下面的语句创建一个新用户账号:
    • 在创建新用户时不一定需要口令,但是下面的例子用“identified by 'p@$$w0rd'”给出了一个口令
create user user_name identified by 'p@$$w0rd';
  • 新创建的用户没有任何权限,需要为其设置相关权限(见下) 

指定散列口令

  • identified by指定的口令为纯文本,MySQL将在保存到user表之前对其进行加密。为了作为散列值指定口令,使用identified by password

使用grant或insert

  • grant语句也可以创建用户账号(下面介绍),但一般来说create user是最清楚和最简单的句子
  • 此外,也可以通过直接插入行到user表来增加用户,不过为安全起见,一般不建议这样做。MySQL用来存储用户账号信息的表(以及表模式等)极为重要,对它们的任何毁坏都可能严重地伤害到MySQL服务器。因此,相对于直接处理来说,最好是用标记和函数来处理这些表

四、重命名一个用户账号(rename)

  • 可以使用下面的语句重新命名一个用户账号
rename user old_anme to new_name;

update更新

  • rename是在MySQL 5之后出来的,在MySQL 5之前以及现在可以使用update直接更新user表,不过不建议

五、删除用户账号

  • 可以使用下面的语句删除一个用户账号(及其相关权限)
drop user user_name;

MySQL 5之前

  • MySQL 5之前drop user语句只能删除用户账号,不能删除相关的权限,因此MySQL 5之前需要先用revoke删除与账号相关的权限,然后再使用drop user语句删除账号
  • MySQL 5之后的drop user语句同时删除用户账号和权限

六、访问权限管理(grant、revoke)

  • 新创建的用户账号没有访问权限,因此只能登录MySQL,缺看不到任何数据,不能执行任何数据库的操作

查看用户账号权限(show grant)

show grants for root;
  • 下面是查看root用户的相关权限

  • 例如下面是查看一个新创建还没有分配权限的名为“bforta”用户的权限信息
    • 其中“USAGE ON *.*”的USAGE表示没有权限

 

添加用户权限(grant)

  • 可以使用grant语句来给用户设置权限。grant要求你至少给出以下信息:
    • 要授予的权限
    • 被授予权限的数据库或表
    • 用户名
  • 例如,下面给bforta用户授予crashcourse数据库上的select权限(只可读)
grant select on crashcourse.* to bforta;

移除用户权限(revoke)

  • revoke用来移除用户的权限(注意:被撤销的权限必须存在,否则会出错)
  • 例如,下面移除bforta用户在crashcourse数据库上的select权限
revoke select on crashcourse.* from bforta;
  • grant和revoke可在下面几个层次上控制访问权限:
    • 整个服务器,使用grant all和revoke all
    • 整个数据库,使用on database.*
    • 特定的表,使用on databases.table
    • 特定的列
    • 特定的存储过程
  • 可以授予和撤销的每个权限如下:

未来的授权

  • 在使用grant和revoke时,用户账号必须存在,但是所指示的数据库或表可以不存在,这允许管理员在创建数据库和表之前设计和实现安全错误
  • 这样做的副作用是:当某个数据库或表被删除时(用drop语句),相关的访问权限仍然存在。而且,如果将来重新创建该数据库或表,这些权限仍然存在

简化多次授权

  • 可通过列出个权限并用逗号分隔,将多条grant语句串在一起,如下所示,将select和insert权限同时赋予给bforta用户:
grant select,insert on crashcourse.* to bforta;

七、更改口令

  • 可以使用set命令更改用户的口令,新口令必须使用password()函数进行加密
  • 下面是更改指定用户(bforta)的口令:
set password for bforta=Password('n3w p@$$w0rd');
  • 也可以更改当前用户的口令:
set password=Password('n3w p@$$w0rd');
发布了1342 篇原创文章 · 获赞 876 · 访问量 23万+

猜你喜欢

转载自blog.csdn.net/qq_41453285/article/details/104055973
今日推荐