美文网首页
用户管理(一)

用户管理(一)

作者: 三斤耳朵 | 来源:发表于2017-12-28 09:26 被阅读86次

    一直以来都是使用的root超级管理员用户,这次我们来看看普通用户的增删与管理

    user表

    在mysql数据库中user表是MySQL数据库中相当重要的一个权限表,它记录了允许连接到服务器的账号信息以及一些全局级的权限信息,通过操作该表就可以对这些信息进行修改。

    user表结构

    user表中的字段意义

    Select_priv确定用户是否可以通过SELECT命令选择数据

    Insert_priv确定用户是否可以通过INSERT命令插入数据

    Update_priv确定用户是否可以通过UPDATE命令修改现有数据

    Delete_priv确定用户是否可以通过DELETE命令删除现有数据

    Create_priv确定用户是否可以创建新的数据库和表

    Drop_priv确定用户是否可以删除现有数据库和表

    Reload_priv确定用户是否可以执行刷新和重新加载MySQL所用各种内部缓存的特定命令,包括日志、权限、主机、查询和表

    Shutdown_priv确定用户是否可以关闭MySQL服务器。在将此权限提供给root账户之外的任何用户时,都应当非常谨慎

    Process_priv确定用户是否可以通过SHOW PROCESSLIST命令查看其他用户的进程

    File_priv确定用户是否可以执行SELECT INTO OUTFILE和LOAD DATA INFILE命令

    Grant_priv确定用户是否可以将已经授予给该用户自己的权限再授予其他用户。例如,如果用户可以插入、选择和删除foo数据库中的信息,并且授予了GRANT权限,则该用户就可以将其任何或全部权限授予系统中的任何其他用户

    References_priv目前只是某些未来功能的占位符;现在没有作用

    Index_priv确定用户是否可以创建和删除表索引

    Alter_priv确定用户是否可以重命名和修改表结构

    Show_db_priv确定用户是否可以查看服务器上所有数据库的名字,包括用户拥有足够访问权限的数据库。可以考虑对所有用户禁用这个权限,除非有特别不可抗拒的原因

    Super_priv确定用户是否可以执行某些强大的管理功能,例如通过KILL命令删除用户进程,使用SET GLOBAL修改全局MySQL变量,执行关于复制和日志的各种命令

    Create_tmp_table_priv确定用户是否可以创建临时表

    Lock_tables_priv确定用户是否可以使用LOCK TABLES命令阻止对表的访问/修改

    Execute_priv确定用户是否可以执行存储过程。此权限只在MySQL 5.0及更高版本中有意义

    Repl_slave_priv确定用户是否可以读取用于维护复制数据库环境的二进制日志文件。此用户位于主系统中,有利于主机和客户机之间的通信

    Repl_client_priv确定用户是否可以确定复制从服务器和主服务器的位置

    Create_view_priv确定用户是否可以创建视图。此权限只在MySQL 5.0及更高版本中有意义

    Show_view_priv确定用户是否可以查看视图或了解视图如何执行。此权限只在MySQL 5.0及更高版本中有意义

    Create_routine_priv确定用户是否可以更改或放弃存储过程和函数。此权限是在MySQL 5.0中引入的

    Alter_routine_priv确定用户是否可以修改或删除存储函数及函数。此权限是在MySQL 5.0中引入的

    Create_user_priv确定用户是否可以执行CREATE USER命令,这个命令用于创建新的MySQL账户

    Event_priv确定用户能否创建、修改和删除事件。这个权限是MySQL 5.1.6新增的

    Trigger_priv确定用户能否创建和删除触发器,这个权限是MySQL 5.1.6新增的

    Create_tablespace_priv创建表空间的权限

    max_questions每小时可以允许执行多少次查询,0表示没有限制

    max_updates每小时可以允许执行多少次更新

    max_connections每小时可以建立多少连接

    max_user_connections单个用户可以同时具有的连接数

    ssl_type用于加密

    ssl_cipher用于加密

    x509_issuer可以用来标识用户

    x509_subject可以用来标识用户

    plugin用于存储与授权相关的插件

    authentication_string用于存储与授权相关的插件

    这些字段大致可以分为四类

    1、用户列

    user表的用户列包括Host、User、Password,分别代表主机名、用户名和密码。其中Host和User列为user表的联合主键,当用户与服务器建立连接时,输入的用户名、主机名和密码必须匹配user表中的对应字段,只有这三个值都匹配的的时候,才玉虚建立连接。当修改密码时,只需要修改user表中的Password字段的值即可。

    2、权限列

    user表的权限列包括Select_priv、Insert_priv、Update_priv等以priv结尾的字段,这些字段决定了用户的权限,其中包括查询权限、修改权限、关闭服务等权限

    user表对应的权限是针对所有数据库的,并且这些权限列的数据类型都是ENUM,取值只有N或Y,N是这些字段的默认值,表示该用户没有该权限。

    3、安全列

    user表的安全列用于管理用户的安全信息,其中包括6个字段,具体如下:

    1.ssl_type和ssl_cipher:用于加密。

    2.x509_issuer和x509_subject标准:可以用来标识用户。

    3.plugin和authentication_string:用于存储与授权相关的插件

    通常标准的发行版不支持ssl加密,初学者可以使用SHOW VARIABLES LIKE 'have_openssl'; 查看变量的取值,DISABLED表示不支持加密。

    4、资源控制列

    user表的资源控制列是用于限制用户使用的资源,其中包括4个字段,具体如下。

    1.max_questions:每小时允许用户执行查询操作的次数。

    2.max_update:每小时允许用户执行更新操作的字数。

    3.max_connections:每小时允许用户建立连接的次数。

    4.max_user_connection:允许单个用户同时建立连接次数。

    创建普通用户

    在创建新用户之前,可以通过SELECT语句查看mysql.user表中有哪些用户,查询结果不用看也知道,因为我们机房的设备都是自动还原的,所以我们就只有root一个超级用户,其他的需要我们自己考虑创建了。

    我们MySQL数据库在很多大企业也都在用,那么它不会只有一个用户进行管理的,这样企业也无法正常运作,那就需要创建相当数量权限不同的用户来进行管理,那创建普通用户的方式有三种,我们下面对这三种方式进行讲解。

    1、使用GRANT语句创建用户

    GRANT语句不仅可以创建新用户,还可以对用户进行授权,该语句会自动加载权限表,不需要手动刷新,而且安全、准确、错误少,因此,使用GRANT语句是创建用户最常用的办法

    GRANT语句创建用户的语法格式如下:

    GRANT privileges ON database.table

            TO 'username' @ 'hostname' [IDENTIFIED BY [PASSWORD] 'password']

            [, 'username'@ 'hostname' [IDENTIFIED BY [PASSWORD] 'password']]...

    上述语法格式中,privileges参数表示该用户具有的权限信息,database.table表示新用户的权限范围,可以在指定的数据库、表上使用自己的权限,username参数是新用户的名称,hostname参数是主机名,password参数是新用户的密码。

    使用GRANT语句创建一个新用户,用户名为user1、密码为123,并授予该用户对chapter08.student表有查询权限,GRANT语句如下:

    看执行结果吧

    从执行结果可以看出,使用GRANT语句成功创建一个新用户user1,但密码显示的并不是123,而是一串字符,这是因为在创建用户时,MySQL会对用户的密码自动加密,以提高数据库的安全性。

    2、使用CREATE USER语句创建用户

    使用CREATE USER语句创建新用户时,服务器会自动修改相应的授权表,但需要注意的是,该语句创建的新用户是没有任何权限的。

    CREATE USER语句创建用户的语法格式如下。

    CREATE USER

    ‘username’@’hostname’ [IDENTIFIED BY [PASSWORD] ‘password’]  

    [‘username’@’hostname’ , [IDENTIFIED BY [PASSWORD] ‘password’]] ...

    上述语法格式中,username表示新创建的用户,hostname表示主机名,IDENTIFIED BY关键字表示使用哈希设置密码,该参数是可选的,如果密码是一个普通的字符串,就不需要使用PASSWORD关键字。

    使用CREATE USER语句创建一个新用户,用户名为user2,密码为123456,CREATE USER语句如下:

    上述语句执行成功后,可以通过SELECT语句验证用户是否创建成功,具体如下

    3、使用INSERT语句创建用户

    通过前面的讲解可知,前面两种方式的结果都是在user表中添加一条新的记录,所以嘛,我们第三种方式就是直接在user表中,插入一条新的数据。

    INSERT语句创建用户的语法格式如下:

    INSERT INTO mysql.user (Host , User , Password , ssl_cipher , x509_issuer , x509_subject)

    VALUES (‘hostname’,‘username’,PASSWORD(’password’),‘’,‘’,‘’);

    上述语法格式中,mysql.user参数表示操作的表,Host , User , Password , ssl_cipher , x509_issuer , x509_subject为相应字段,PASSWORD()是一个加密函数,用于给密码加密。

    需要注意的是,使用INSERT语句创建用户时,通常只需要添加Host , User , Password 这三个字段即可,其他的字段取其默认值,但是由于后面的三个字段是没有默认值的,因此INSERT语句创建用户时,还需要为这几个字段设置初始值。

    使用INSERT语句直接在mysql.user表中创建一个用户,用户名为user3、密码为123456789,INSERT语句如下:

    INSERT INTO mysql.user (Host , User , Password , ssl_cipher , x509_issuer , x509_subject)

    VALUES ('localhost','user3',PASSWORD('123456789'),'','','');

    上述语句执行成功后,可以查一下看看了

    从执行结果来看,确实在表中添加了数据,但是这个用户还不能使用,因为我们的新用户是没有被赋予权限的,这时候需要我们手动刷新当前的权限表,或者是重启我们的MySQL,刷新权限表的语句如下

    FLUSH PRIVILEGES;

    上述语句执行成功后,就可以使用user3用户登录MySQL数据库了。

    删除普通用户

    在MySQL中,通常会创建多个普通用户来管理数据库,但如果发现某些用户是没什么必要的,就可以将其删除,删除用户有两种方式,接下来将针对这两种方式进行详细的讲解。

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

    DROP USER语句与DROP DATABASE语句有些类似,如果要删除某个用户,只需要在DROP USER后面指定要删除的用户信息即可

    DROP USER ‘username’@’hostname’ [, ‘username’@’hostname’];

    上述语法格式中的参数这里已经看了很多遍了,就不说了,需要注意的是,删除用户时,要求必须有删除用户的权限。

    例如我们删除user3

    2. 使用DELETE语句删除用户

    DELETE语句不仅可以删除普通表的数据,还可以删除user表中的数据,这里就不详细写了,大家可以对照我们之前使用delete删除数据来修改我们的user表。

    注意的是,这样之后,还是要刷新一下的。

    相关文章

      网友评论

          本文标题:用户管理(一)

          本文链接:https://www.haomeiwen.com/subject/rnhmgxtx.html