MySQL权限与安全管理之权限表与账户管理

目录

        • MySQL权限与安全管理之权限表与账户管理
          • 权限表
            • user表
            • db表
            • tables_priv表和columns_priv表
            • procs_priv表
          • 账户管理
            • 登录和退出MySQL服务器
            • 新建普通用户
            • 删除普通用户
            • root用户修改自己的密码
            • root用户修改普通用户的密码

MySQL权限与安全管理之权限表与账户管理_第1张图片

MySQL权限与安全管理之权限表与账户管理

MySQL用户可以分为root用户和普通用户。root用户是超级管理员,拥有所有权限,包括创建用户,删除用户和修改用户的密码等管理权限;普通用户只拥有被授予的各种权限。

权限表

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

user表

user表记录允许连接到服务器的账号信息,里面的权限是全局级的。

用户列

user表的用户列包括Host、User、authentication_string,分别表示主机名、用户名和密码。用户连接服务器,输入的账户信息中的用户名、主机名和密码三值与User表中对应匹配的时候才允许建立连接。

权限列

决定用户权限。包括查询权限、修改权限等普通权限,还包括了关闭服务器、超越权限和加载用户等高级权限。普通权限用于操作数据库;高级权限用于数据库管理。

user表中对应的权限是针对所有用户数据库的。字段值的类型为ENUM,默认值为N。如果要修改权限,可以使用GRANT语句或UPDATE语句更改user表的字段来修改用户对应的权限。

安全列

安全列只有六个字段,两个是ssl相关的,两个是x509相关的,另外两个是授权插件相关的。ssl用于加密;x509标准可用于标识用户;Plugin字段标识可以用于验证用户身份的插件。可以通过SHOW VARLABLES LIKE 'have_openssl'语句来查询服务器是否支持ssl功能。

资源控制列

资源控制列:限制用户使用的资源

(1)max_questions----用户每小时允许执行的查询操作次数。

(2)max_updates----用户每小时允许执行更新的操作次数。

(3)max_connections----用户每小时允许执行的连接操作次数。

(4)max_users_connections----用户允许同时建立连接的次数。

一小时用户操作次数超过资源控制限制,用户将被锁定,直到下一小时才可以执行对应操作。可以使用GRANT语句更新字段值。

db表

db表存储用户对数据库的操作权限,决定哪个主机存取哪个数据库。

用户列

用户列字段:Host、User、Db,标识从某个主机连接某个用户对某个数据库的操作权限。

权限列

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

tables_priv表和columns_priv表

tables_priv表:对表设置操作权限,columns_priv表对表某一列设置权限。

tables_priv表有8个字段:Host、Db、User、Table_name、Grantor、Timestamp、Table_priv和column_priv

(1)Host、Db、User、Table_nam 四个字段表示主机名,数据库名、用户名和表名。

(2)Grantor表示修改该记录的用户。

(3)Timestamp字段表示修改该记录的时间。

(4)Table_priv表示对表的操作权限,包括Select、Insert、Update、Delete、Create、Drop、Grant、References、Index和Alter。

(5)Column_priv字段表示对表中列的操作权限,包括Select、Insert、Update、References。

columns_priv表有7个字段:Host、Db、User、Table_name、Column_name、Timestamp、Column_priv。其中Column_name用来指定对哪些数据列具有操作权限。

procs_priv表

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

procs_priv表有8个字段:Host、Db、User、Routine_name、Routine_type、Grantor、Timestamp、Proc_priv。

(1)Routine_name表示存储过程或函数的名称。

(2)Routine_type表示存储过程或函数的类型。该字段的两个值:FUNCTION(函数)和PROCEDURE(存储过程)

(3)Grantor是插入或修改该记录用户。

(4)Proc_priv表示拥有的权限,包括Execute、Alter Routine、Grant 3种。

(5)Timestamp表示记录更新时间.

账户管理
登录和退出MySQL服务器

查看命令帮助信息:MySQL -help

常用参数:

-h 主机名,指定主机名或ip,默认是local host。

-u 用户名,指定用户名。

-p 密码,指定登录密码。注意:该参数后面的字符串和-p之前不能有空格。

-P 端口号,MySQL服务器的默认端口号为3306。

-e 执行SQL语句。指定了该参数,将在登录后执行-e后面的命令或SQL语句并退出。

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

mysql -h localhost -u root -p mysql

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

mysql -h localhost -u root -p test_db "DESC person;"
新建普通用户

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

CREATE USER语句会添加一个新的MySQL账户。使用CREATE USER语句用户,必须有全局的CREATE USER权限。

例3:使用CREATE USER语句创建新用户,用户名是chlinrei,密码是123456,主机名是localhost,命令如下:

CREATE USER 'chlinrei'@'localhost' IDENTIFIED BY '123456';

如果只指定用户名部分chlinrei,主机名部分为%,则对所有主机开放权限。

如果指定用户登录不需要密码,可以省略IDENTIFIED BY部分:

CREATE USER 'chlinrei'@'localhost' ;

2.直接操作MySQL用户表

使用INSERT语句,必须拥有MySQL数据库的INSERT权限。

例4:使用INSERT创建新账户,用户名为chlinrei,主机名称为localhost,密码为123456,语句如下:

INSERT INTO user(Host,User,authentication_string)
VALUES('localhost','chlinrei',MD5('123456'));
删除普通用户

1.使用DROP USER语句删除用户

DROP USER语句的语法如下:

DROP USER user[,user];

DROP USER语句用于删除一个或多个用户。要使用DROP USER,必须有MySQL数据库的全局create user权限或delete权限。使用GRANT或REVOKE相同的格式为每个账户命名。

使用DROP USER,可以删除一个账户和其权限,操作如下:

DROP USER 'user'@'localhost';
DROP USER;

第1条语句可以删除user在本地登录权限;第2条语句可以删除来自所有授权表的账户权限记录

2.使用DELETE语句删除用户

DELETE 语句基本语法格式如下:

  DELETE FROM MySQL.user WHERE host='hostname' and user='username'

host和user为user表中的两个字段,两个字段的组合确定所要删除的账户记录。

root用户修改自己的密码

使用UPDATA语句修改root用户密码的语句如下:

UPDATA mysql.user set authentication_string=MD5("123456") WHERE USER="root" and host="localhost";

PASSWORD()函数用来加密用户密码。执行UPDATA语句后,需要执行FLUSH PRIVILEGES语句重新加载用户权限。

root用户修改普通用户的密码

1.使用set语句修改普通用户的密码

使用SET语句修改普通用户密码的语法格式如下:

SET PASSWORD FOR 'user'@'localhost'='123456';

SET语句执行成功,user用户的密码被设置为123456.

2.使用UPDATE语句修改普通用户的密码

使用UPDATA语句修改用户密码的语法如下:

  UPDATE MySQL.user SET authentication_string=MD5("123456")  WHERE User="username" AND Host="hostname";

MD5()函数用来加密用户密码。执行UPDATE语句后,需要执行FLUSH PRIVILEGES语句重新加载用户权限。MySQL权限与安全管理之权限表与账户管理_第2张图片

你可能感兴趣的:(MySQL,mysql,安全,服务器)