资讯专栏INFORMATION COLUMN

mysql用户管理

IT那活儿 / 1892人阅读
mysql用户管理


一. 登录MySQL

要登录到MySQL只需要使用如下命令。

mysql -h localhost -u root -p

localhost:IP地址;

root:用户名;

database:数据库名(可以省略,如果有,跟在-p后面);

如果你发现这样报mysql不是有效命令。那么有两种解决方法:

我的电脑-->属性-->高级-->环境变量-->系统变量-->配置一个Path变量,值为MySQL安装文件夹里的bin目录;

  • 先用cd命令定位到MySQL安装文件夹的根目录,然后再输入以上命令;

  • 开始->所有程序->MySQL->MySQL Server 5.0->MySQL Command Line Client;

  • 当命令正确执行后,会提示输入密码,登录成功后的界面如上图所示。

以上图显示出了欢迎信息,其中还有以下信息说明如下:

Commands end with; or g:
mysql命名行下的命令以分号(;)或"g"来结束,遇到这个结束符就开始执行命令;

Your MySQL connection id is 24 Server version:5.0.67-community-nt
id表示MySQL的数据库连接次数,后面是社区版,版本号等信息;

Type help; or h for help  
表示输入help;或h可以看到帮助信息;

Type c to clear the buffer  
遇到c就会清屏;

也可以在-p后直接输入密码,-p与密码之间没有空格。


二. 更改MySQL配置

在开始菜单里,MySQL有三个小工具:

MySQL Command Line Client:
MySQL的命令行客户端;

MySQL Server Instance Config Wizard:
配置向导;

Suninventory Registration:
注册网页链接;

启动MySQL Server Instance Config Wizard能够重新配置MySQL,但是要小心操作(这个留到第三部分)。

手动更改配置

用户可以通过修改MySQL配置文件的方式来进行配置。在配置之前需要对MySQL的文件有一定的了解。在MySQL Server 5.0目录下,MySQL的数据文件安装在MySQL Server 5.0data目录下。

安装根目录中有4个文件夹和一些文件,这些目录说明如下:

  • bin:
    可执行文件,如mysql.exe、mysqld.exe等;

  • include:
    头文件,如decimal.h、errmsg.h等;

  • lib:
    库文件,分两个文件夹,分别是opt和plugin;

  • share:
    字符集、语言信息;

在根目录下,还有几个.ini后缀的文件。其中只有my.ini是正在使用的。

  • my.ini:MySQL数据库使用的配置文件,修改该文件即可修改配置;

  • my-huge.ini:适合超大型数据库的配置文件;

  • my-large-ini:适合大型数据库的配置文件;

  • my-medium.ini:适合中型数据库的配置文件;

  • my-small.ini:适合小型数据库的配置文件;

  • my-template.ini:配置文件的模板;

  • my-innodb-heavy-4G.ini:该配置文件只对InnoDB存储引擎有效,而且服务器的内存不能小于4G;

其中,my.ini的主要参数及说明如下:

  • client:客户端参数

  • password:用户的登录密码,密码存在该文件中,登录时可以不输入;

  • port:MySQL数据库端口,默认端口是3306;


2. mysql客户端参数

default-character-set:客户端默认字符集如果希望支持中文,应该设为utf8或gbk,默认是latin1


3. mysqld服务器端参数

  • port:MySQL数据库的端口,默认是3306;

  • basedir:MySQL的安装路径;

  • datadir:MySQL数据文件的存储位置;

  • default-character-set:服务器端字符集;

  • default-storage-engine:默认存储引擎;

  • sql-mode:SQL模式的参数,通过这个参数,可以设置检验SQL语句的严格程序;

  • max_connections:参数表示允许同时访问MySQL服务器的最大连接数,有一个专为管理员保留;

  • query_cache_size:表示查询时缓存的大小。缓存以前SELECT语句查询过的信息;

  • table_cache:所有进程打开表的总数;

  • tmp_table_size:内存中临时表的最大值;

  • thread_cache_size:保留客户端线程的缓存大小;

  • myisam_max_sort_file_size:重建索引时,允许的最大临时文件的大小,默认100G;

  • myisam_sort_buffer_size:重建索引时,最多能使用缓存的大小;

  • key_buffer_size:关键词缓冲的大小,一般用于缓冲MyISM表的索引块;

  • read_budder_size:MyiSAM全表扫描的缓冲大小;

  • read_rnd_buffer_size:排序好的数据存入的缓存区的大小;

  • sort_buffer_size:用于排序的缓存大小;


4. INNODB引擎参数

  • innodb_additional_mem_pool_size:附加的内存池大小;

  • innodb_flush_log_at_trx_commit:参数设置提交日志的时机(设置1、提交后写到磁盘上);

  • innodb_log_buffer_size:存储日志数据的缓冲区大小;

  • innodb_thread_concurrency:在InnoDB存储引擎允许的线程最大数;


三. 免安装的MySQL

官网上下载的zip结尾的就是免安装MySQL,msi则是需要安装的。

1. 文件介绍

  • bin:各种执行文件;

  • data:日志文件和数据库文件;

  • Docs:版权信息、MySQL的更新日志和安装信息;

  • Embedded:前入职服务器文件;

  • include:头文件;

  • lib:库文件;

  • mysql-test:测试有关的文件;

  • scripts:Perl语言编写的实用工具脚本;

  • share:字符集和语言信息;

  • sql-bench:数据库性能比较的信息和基准程序;


2. 创建my.ini文件

mysql文件夹下有多个ini文件,需要将其中一个复制到C:WINDOWS文JIANJIA下,并将其改名为my.ini。如果内存充裕,可以选择大的,如my-larage.ini拷贝到c:WINDOWS,文件夹并改名为my.ini。


3. 修改my.ini文件

在C:WINDOWS文JIANJIA下打开my.ini文件,在[mysqld]这个组中加入如下两条记录:

basedir="C:/mysql/"
datadir="C:/mysql/data/"

除此之外,还要加入一个组和一条记录:

[WindowsMySQLServer]
Server="C/mysql/bin/mysqld.exe"

组的名称为WindowsMySQLServer,意思是Windows操作系统下的MySQL服务。Server参数表示MySQL服务端程序。"C:/mysql/bin/mysqld.exe"就是幅度段程序。


4. 设置MySQL服务

配置文件没问题了,只需要将MySQL服务端程序添加到系统服务中。

在控制台输入如下命令并执行:

C:/mysql/bin/mysqld.exe -install

执行此命令后,会出现一个DOS窗口一闪而过。说明此命令已经执行成功,MySQL成功添加到系统服务。

环境变量,也需要像文章开篇那样配置,才能快速启动。

启动和关闭mysql服务的命令如下:

  net start mysql

  net stop mysql


四. 删除MySQL数据库

如果是图形化向导安装的MySQL数据库,则需要启动MySQL Server Instance Config Wizard选择Remove Instance选项。就可以删除MySQL,但不完全。如果希望彻底删除MySQL,需要使用MySQL的安装文件(msi后缀那个),在安装向导窗口中选择Remove选项,就可以完全删除MySQL数据库。

如果是免安装的MySQL,先应该在DOS窗口执行"c:/mysql/bin/mysqld.exe--remove"命令(假设安装目录是c:/mysql);当此命令完成后,在删除整个目录,然后在删除C:Windows目录下的my.ini就彻底删除MySQL免安装版了。

MySQL用户管理:MySQL分为普通用户与root用户。这两种用户的权限不一样。


1. 权限表

安装MySQL时会自动安装一个名为mysql的数据库。mysql数据库里面存储的都是权限表。

1)User表

user表有39个字段。这些字段可以分为4类:

  • 用户列;

  • 权限列;

  • 安全列;

  • 资源控制列;

2)用户列

用户列包括Host、User、Password,分别表示主机名、用户名和密码。登录用的就是这个用户名与密码;

3)权限列

user表的权限列包括Select_priv、Insert_priv等以priv结尾的字段。

这些字段的值只有Y和N。Y表示该权限可以用到所有数据库上;N表示该权限不能用到所有数据库上;

通常,可以使用GRANT语句Wie用户赋予一些权限,也可以通过Update语句更新user表的方式来设置权限;

不过,修改user表之后,一定要执行一下FLUSH PRIVILEGES,否则可能会出现如下错误:

Error (1133): Can’t find any matching row in the user table

Update修改权限:

UPDATE user SET Select_priv = N
WHERE Host = %

GRANT赋予权限

4)安全列

user表的安全列有4个字段:

  • ssl_type;

  • ssl_cipher;

  • x509_issuer;

  • x509_subject;

ssl用于加密;x509标准可以用来标识用户。普通的发行版都没有加密功能。可以使用SHOW VARIABLES LIKE have_openssl语句来查看是否具有ssl功能。如果取值为DISABLED,那么则没有ssl加密功能。

5)资源控制列

user表的4个资源控制列是:

  • max_questions:每小时可以允许执行多少次查询;

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

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

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

  默认值为0,表示无限制。


2. db表和host表

db表存储了某个用户对一个数据库的权限。

host表中存储了某个主机对数据库的操作权限,配合db表对给定主机上数据库级操作权限做更细致的控制;但是很少用,新版本已经取消了host表;

1)用户列

db表的用户列有3个字段:

  • Host:主机名;

  • Db:数据库名;

  • User:用户名;

2) 权限列

db表:

  • Create_routine_priv:是否具有创建存储过程权限;

  • Alter_routine_priv:是否具有修改存储过程权限;

user表中的权限是针对所有数据库的,如果user表中的Select_priv字段取值为Y,那么该用户可以查询所有数据库中的表;

如果为某个用户值设置了查询test表的权限,那么user表的Select_priv字段的取值为N。而这个SELECT权限则记录在db表中。db表中的Select_priv字段的取值将会是Y。

用户先根据user表的内容获取权限,然后再根据db表的内容获取权限。

3) tables_priv表和columns_priv表

tables_priv:可以对单个表进行权限设置:

  • tables_priv表包含8个字段:

  • Host:主机名;

  • DB:数据库名;

  • User:用户名;

  • Table_name:表名

  • Table_priv:对表进行操作的权限(Select,Insert,Update,Delete,Create,Drop,Grant,References,Index,Alter)

  • Column_priv:对表中的数据列进行操作的权限(Select,Insert,Update,Rederences);

  • Timestamp:修改权限的事件

  • Grantor:权限的设置者

  • columns_priv:
    可以对单个数据列进行权限设置,有7个列,作用同上:
    Host、Db、User、Table_name、Column_name、Column_priv、Timestamp。

MySQL权限分配是按照user表-> db表 -> table_priv表 -> columns_priv表的顺序进行分配的。

在数据库系统中,先判断user表中的值是否为Y,如果user表中的值是Y,就不需要检查后面的表。如果user表为N,则一次检查后面的表。

4) procs_priv表

  • procs_priv表可以对存储过程和存储函数进行权限设置。

  • procs_priv表包含8个字段,分别是:

  • Host:主机名;

  • Db:数据库名;

  • User:用户名;

  • Routine_name:存储过程或函数名称;

  • Routine_type:类型(取值有:FUNCTION或PROCEDURE);

  • Proc_priv:拥有的权限(Execute:执行;Alter Routine:修改;Grant:权限赋予);

  • Timestamp:字段存储更新的时间;

  • Grantor:字段设置者;

账户管理: 账户管理是MySQL用户管理最基本的内容。包括登录,退出MySQL服务器、创建用户、删除用户、密码管理和权限管理等内容。

其中登录方式非常简单,在这个地址:
http://www.cnblogs.com/kissdodog/p/4154068.html


1. 新建普通用户

在MySQL数据库中,建立用户有3种方式:

  • 使用CREATE USER语句来创建新的用户;

  • 直接在mysql.user表中INSERT用户;

  • 使用GRANT语句来新建用户;

1) CREATE USER

使用CREATE USER语句创建用户,必须要拥有CREATE USER权限。其格式如下:

CREATE USER user[IDENTIFIED BY [PASSWORD] password],
[user[IDENTIFIED BY [PASSWORD] password]]...
其中,user参数表示新建用户的账户,user由用户名(User)和主机名(Host)构成;IDENTIFIED BY关键字用来设置用户的密码;password参数表示用户的密码;如果密码是一个普通的字符串,就不需要使用PASSWORD关键字。可以没有初始密码。

示例:

CREATE USER admin@% IDENTIFIED BY admin
执行之后user表会增加一行记录,但权限暂时全部为‘N’。

2) 用INSERT语句新建普通用户

可以使用INSERT语句直接将用户的信息添加到mysql.user表。但必须拥有mysql.user表的INSERT权限。

另外,ssl_cipher、x509_issuer、x509_subject没有值,必须要设置值,否则INSERT语句无法执行。

示例:

INSERT INTO mysql.user(Host,User,Password,ssl_cipher,x509_issuer,x509_subject) VALUES(%,newuser1,PASSWORD(123456),,,)
  执行INSERT之后,要使用命令:
FLUSH PRIVILEGES
  命令来使用户生效。


3)用GRANT语句来新建普通用户

用GRANT来创建新的用户时,能够在创建用户时为用户授权。但需要拥有GRANT权限。

语法如下:

GRANT priv_type ON database.table
TO user[IDENTIFIED BY [PASSWORD] password]
[,user [IDENTIFIED BY [PASSWORD] password]...]
  • priv_type:参数表示新yoghurt的权限;

  • databse.table:参数表示新用户的权限范围;

  • user:参数新用户的账户,由用户名和主机构成;

  • IDENTIFIED BY关键字用来设置密码;

  • password:新用户密码;

GRANT语句可以同时创建多个用户。

GRANT SELECT ON *.* TO netUser@%

*.*与db.*的区别在于。*.*对所有数据库生效,所以user表的SELECT会变为Y。而db.*user表为N,更改的是Db表。


2. 删除普通用户

1) DROP USER语句删除普通用户

需要拥有DROP USER权限。语法如下:

DROP USER user[,user]...

user是需要删除的用户,由用户名(User)和主机名(Host)构成。

DROP USER newuser1@%


2) DELETE语句删除普通用户

可以使用DELETE语句直接将用户的信息从mysql.user表中删除。但必须拥有对mysql.user表的DELETE权限。

DELETE FROM mysql.user WHERE Host = % AND User = admin

删除完成后,一样要FLUSH PRIVILEGES才生效。


3. 修改密码

1) 使用mysqladmin命令来修改root用户的密码

语法:

mysqladmin -u -username -p password "new_password"

新密码(new_password)必须用括号括起来,单引号会报错。

示例:

(注:这个待验证,我怎么执行都不成功!)

2) 修改user表

UPDATE user表的passwor字段的值,也可以达到修改密码的目的;

UPDATE user SET Password = PASSWORD(123) WHERE USER = myuser

FLUSH PRIVILEGES后生效。

3) 使用SET语句来修改密码

使用root用户登录到MySQL服务器后,可以使用SET语句来修改密码:

修改自己的密码,不需要用户名

SET PASSWORD = PASSWORD("123");

修改其他用户密码:

SET PASSWORD FOR myuser@%=PASSWORD("123456")

FOR 用户名@主机名

4)GRANT语句来修改普通用户的密码

使用GRANT语句修改普通用户的密码,必须拥有GRANT权限。

GRANT priv_type ON database.table TO user [IDENTIFIED BY [PASSWORD] password]

示例:

GRANT SELECT ON *.* TO test3@% IDENTIFIED BY 123


5)忘记密码的解决方案

如果root用户密码丢失了,会给用户造成很大的麻烦。但是,可以通过某种特殊方法登录到root用户下,然后修改密码。

  • 使用--skip-grant-tables选项启动MySQL服务

    该选项将使MySQL服务器停止权限判断,任何用户都能够访问数据库。

    在Windows操作系统下,使用mysqlid或mysqlid-nt来启动MySQL服务。

    mysqld命令:
    mysqld --skip-grant-tables


    mysqld-nt命令:
    mysqld-nt --skip-grant-tables

    net start mysql命令:
    net start mysql --skip-grant-tables

  • 登录root用户,并且设置新密码

    mysql -u root

    必须使用UPDATE语句更新mysql数据库下的user表,而不能使用SET语句,因为--skip-grant-tables不能使用SET语句。

    修改完密码以后,FLUSH PRIVILEGES语句加载权限表,新密码即生效。


三. 权限管理

1. MySQL的各种权限

 

2. 授权

GRANT语法如下:

GRANT priv_type [(column_list)] ON database.table
TO user [IDENTIFIED BY [PASSWORD] password]
[,user [IDENTIFIED BY [PASSWORD] password]]...
WITH with_option[with_option]
  • priv_type参数表示权限类型;

  • column_list:
    参数表示权限作用于哪些列上,没设置则位于整个表上;

  • user参数由用户名和主机名构成;
    形式是"username@hostname";

  • IDENTIFIED BY参数用于为用户设置密码;

  • password:用户新密码;
    WITH关键字后面带有一个或多个with_option参数。有5个选项:

  • GRANT OPTION:
    被授权的用户可以将这些权限赋予给别的用户;

  • MAX_QUERIES_PER_HOUR count:
    设置没消失可以允许执行count次查询;

  • MAX_UPDATES_PER_HOUR count:
    设置每个消失可以允许执行count次更新;

  • MAX_CONNECTIONS_PER_HOUR count:
    设置每小时可以建立count个连接;

  • MAX_USER_CONNECTIONS count:
    设置单个用户可以同时具有的count个连接数;

  示例:

GRANT priv_type [(column_list)] ON database.table
TO user [IDENTIFIED BY [PASSWORD] password]
[,user [IDENTIFIED BY [PASSWORD] password]]...
WITH with_option[with_option]


3. 收回权限

收回权限,就是取消某个用户的某些权限。MySQL中使用REVOKE关键字来为用户设置权限。

语法如下:

GRANT SELECT,UPDATE ON *.*
    TO myuser@%
WITH GRANT OPTION;

收回全部权限的REVOKE语句的基本语法如下:

REVOKE ALL PRIVILEGES,GRANT OPTION FROM user[,user]...

示例:回收用户myuser的SELECT权限

REVOKE SELECT ON *.*FROM myuser@%

收回myuser的所有权限:

REVOKE ALL PRIVILEGES,GRANT OPTION FROM myuser@%


4. 查看权限

SHOW GRANTS语句用于查看权限。同时mysql数据库下的user表中存储着用户的基本权限。

SELECT * FROM mysql.user

SHOW GRANTS

 


END


更多精彩干货分享

点击下方名片关注

IT那活儿

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/129762.html

相关文章

  • MySQL性能调优与架构设计(三)—— MySQL安全管理

    摘要:处在局域网之内的,由于有局域网出入口的网络设备的基本保护,相对于暴露在广域网中要安全不少,主要威胁对象基本控制在了可以接入局域网的内部潜在威胁者,和极少数能够突破最外围防线局域网出入口的安全设备的入侵者。 前言 对于任何一个企业来说,其数据库系统中所保存数据的安全性无疑是非常重要的,尤其是公司的有些商业数据,可能数据就是公司的根本。 失去了数据,可能就失去了一切 本章将针对mysql...

    Eminjannn 评论0 收藏0
  • MySQL必知必会(1):了解Mysql

    摘要:比如用户表,第一行表示张三第二行表示李四,每一行都包含所有的列也就是字段。也是一种数据库管理系统。但是,活跃的社区都给出了解决办法,也在逐步成长。 本文主要介绍Mysql最基础知识:Mysql基本概念。 1.1 数据库基础 1.1.1 简介 数据库,从字面意思来理解就是一个用来装数据的容器。每天我们都在和数据库打交道,比如你每天打开APP浏览新闻,浏览微博,这些都是间接的使用数据库。 ...

    陈伟 评论0 收藏0
  • UCloud MySQL云数据库操作指南

    摘要:二进制日志是记录对数据发生或潜在发生更改的语句,并以二进制的形式保存。删除配置文件删除配置文件配置文件支持删除操作。在配置文件列表页选中需要删除的配置文件,选中删除即可完成删除操作。UCloud MySQL云数据库操作指南 基本操作 启动MySQL实例 如果要启动处于关闭状态的MySQL实例,首先选择需要启动的MySQL实例,在列表右侧点击启动按钮,弹出的确认对话框选择确定...

    raoyi 评论0 收藏0

发表评论

0条评论

IT那活儿

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<