文章目录

  • 用户名和密码
  • 增加新用户账号
    • 使用MySQL客户端程序来设置新用户
      • 使用 GRANT
      • 使用 INSERT
    • 例子
      • 想用GRANT创建账户
      • 使用 insert 语句
    • 指定域
  • 删除用户
  • 限制账户资源
  • 设置账户密码

用户名和密码

当用命令行客户端连接MySQL服务器时,你应为想要使用的账户指定用户名和密码:

shell> mysql --user=monty --password=guess db_name

用较短的选项,命令应为:

shell> mysql -u monty -pguess db_name

注意:-p 选项和后面的密码值之间绝对不能有空格。密码这儿是个特例。

前面的命令包括命令行中的密码值,会很危险。

shell> mysql --user=monty --password db_name
shell> mysql -u monty -p db_name

然后客户端程序输出提示符并等待你输入密码。

提示:输入密码的时候屏幕是不显示 ****** 类似这样的,一片空白,放心输入即可。

增加新用户账号

可以用两种方式创建MySQL账户:

  • 使用GRANT语句
  • 直接操作MySQL授权表

最好的方法是使用GRANT语句,因为这样更精确,错误少。

使用MySQL客户端程序来设置新用户

你必须以MySQL root用户连接MySQL服务器,并且root账户必须有mysql数据库的INSERT权限和RELOAD管理权限。

使用 GRANT

首先,使用 MySQL 程序以 MySQL root 用户来连接服务器:

shell> MySQL --user=root MySQL

如果你为root账户指定了密码,还需要为该MySQL命令和本节中的其它命令提供 --password 或 -p 选项。

shell> mysql -uroot-p MYSQL

使用GRANT来设置四个新账户:

mysql> GRANT ALL PRIVILEGES ON *.* TO 'monty'@'localhost'->     IDENTIFIED BY 'some_pass' WITH GRANT OPTION;
mysql> GRANT ALL PRIVILEGES ON *.* TO 'monty'@'%'->     IDENTIFIED BY 'some_pass' WITH GRANT OPTION;
mysql> GRANT RELOAD,PROCESS ON *.* TO 'admin'@'localhost';
mysql> GRANT USAGE ON *.* TO 'dummy'@'localhost';

注意:在 mysq 5 中以上可以。但是在 mysql 8 中,则在使用 grant 之前需要 先创建用户。

# 创建用户
create user 'root'@'172.16.10.203' identified by  'password';# 赋予权限,with grant option这个选项表示该用户可以将自己拥有的权限授权给别人
grant all privileges on *.* to 'root'@'172.16.10.203' with grant option;#改密码&授权超用户,flush privileges 命令本质上的作用是将当前user和privilige表中的用户信息/权限设置从mysql库(MySQL数据库的内置库)中提取到内存里
flush privileges;

用 GRANT 语句创建的账户有下面的属性:

  • 其中两个账户有相同的用户名 monty 和密码 some_pass。两个账户均为超级用户账户,具有完全的权限可以做任何事情。一个账户 (‘monty’@‘localhost’)只用于从本机连接时。另一个账户(‘monty’@’%’)可用于从其它主机连接。请注意 monty 的两个账户必须能从任何主机以 monty 连接。没有 localhost 账户,当 monty 从本机连接时,mysql_install_db 创建的 localhost 的匿名用户账户将占先。结果是,monty将被视为匿名用户。原因是匿名用户账户的 Host 列值比 ‘monty’@’%’ 账户更具体,这样在user表排序顺序中排在前面。
  • 一个账户有用户名admin,没有密码。该账户只用于从本机连接。授予了 RELOAD 和 PROCESS 管理权限。这些权限允许 admin 用户执行 mysqladmin reload、mysqladmin refresh 和 mysqladmin flush-xxx命令,以及 mysqladmin processlist。未授予访问数据库的权限。你可以通过GRANT语句添加此类权限。
  • 一个账户有用户名dummy,没有密码。该账户只用于从本机连接。未授予权限。通过GRANT语句中的USAGE权限,你可以创建账户而不授予任何权限。它可以将所有全局权限设为’N’。假定你将在以后将具体权限授予该账户。

使用 INSERT

除了GRANT,你可以直接用INSERT语句创建相同的账户,然后使用FLUSH PRIVILEGES告诉服务器重载授权表。

shell> mysql --user=root mysql
mysql> INSERT INTO user->     VALUES('localhost','monty',PASSWORD('some_pass'),->     'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y');
mysql> INSERT INTO user->     VALUES('%','monty',PASSWORD('some_pass'),->     'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y');
mysql> INSERT INTO user SET Host='localhost',User='admin',->     Reload_priv='Y', Process_priv='Y';
mysql> INSERT INTO user (Host,User,Password)->     VALUES('localhost','dummy','');
mysql> FLUSH PRIVILEGES;

当你用 INSERT 创建账户时使用 FLUSH PRIVILEGES 的原因是告诉服务器重读授权表。否则,只有重启服务器后更改方会被注意到。使用 GRANT,则不需要使用 FLUSH PRIVILEGES。

用 INSERT 使用 PASSWORD() 函数是为了加密密码。GRANT 语句为你加密密码,因此不需要 PASSWORD()。

'Y’值启用账户权限。对于admin账户,还可以使用更加可读的 INSERT 扩充的语法(使用SET)。

在为 dummy 账户的 INSERT 语句中,只有 user 表中的 Host、User 和 Password 列记录为指定的值。没有一个权限列为显式设置,因此MySQL 将它们均指定为 默认值 ‘N’。这样等同于 GRANT USAGE 的操作。

请注意要设置超级用户账户,只需要创建一个权限列设置为’Y’的user表条目。user表权限为全局权限,因此其它 授权表不再需要条目。

例子

下面的例子创建3个账户,允许它们访问专用数据库。每个账户的用户名为custom,密码为obscure。

想用GRANT创建账户

shell> MySQL --user=root MySQL
shell> mysql --user=root mysql
mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP->     ON bankaccount.*->     TO 'custom'@'localhost'->     IDENTIFIED BY 'obscure';
mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP->     ON expenses.*->     TO 'custom'@'whitehouse.gov'->     IDENTIFIED BY 'obscure';
mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP->     ON customer.*->     TO 'custom'@'server.domain'->     IDENTIFIED BY 'obscure';

这3个账户可以用于:

  • 第1个账户可以访问 bankaccount 数据库,但只能从本机访问。
  • 第2个账户可以访问 expenses 数据库,但只能从主机 whitehouse.gov 访问。
  • 第3个账户可以访问 customer 数据库,但只能从主机 server.domain 访问。

使用 insert 语句

shell> mysql --user=root mysql
mysql> INSERT INTO user (Host,User,Password)->     VALUES('localhost','custom',PASSWORD('obscure'));
mysql> INSERT INTO user (Host,User,Password)->     VALUES('whitehouse.gov','custom',PASSWORD('obscure'));
mysql> INSERT INTO user (Host,User,Password)->     VALUES('server.domain','custom',PASSWORD('obscure'));
mysql> INSERT INTO db->     (Host,Db,User,Select_priv,Insert_priv,->     Update_priv,Delete_priv,Create_priv,Drop_priv)->     VALUES('localhost','bankaccount','custom',->     'Y','Y','Y','Y','Y','Y');
mysql> INSERT INTO db->     (Host,Db,User,Select_priv,Insert_priv,->     Update_priv,Delete_priv,Create_priv,Drop_priv)->     VALUES('whitehouse.gov','expenses','custom',->     'Y','Y','Y','Y','Y','Y');
mysql> INSERT INTO db->     (Host,Db,User,Select_priv,Insert_priv,->     Update_priv,Delete_priv,Create_priv,Drop_priv)->     VALUES('server.domain','customer','custom',->     'Y','Y','Y','Y','Y','Y');
mysql> FLUSH PRIVILEGES;

前3个 INSERT 语句在 user 表中加入条目,允许用户 custom 从各种主机用给定的密码进行连接,但不授予全局权限(所有权限设置为 默认值’N’)。后面3个 INSERT 语句在 user 表中加入条目,为 custom 授予 bankaccount、expenses 和 customer 数据库权限,但只能从合适的主机访问。通常若直接修改 授权表,则应告诉服务器用 FLUSH PRIVILEGES重载授权表,使权限更改生效。

指定域

如果你想要让某个用户从给定域的所有机器访问(例如,mydomain.com),你可以在账户名的主机部分使用含‘%’通配符的GRANT语句:

mysql> GRANT ...->     ON *.*->     TO 'myname'@'%.mydomain.com'->     IDENTIFIED BY 'mypass';

要想通过直接修改授权表来实现:

mysql> INSERT INTO user (Host,User,Password,...)->     VALUES('%.mydomain.com','myname',PASSWORD('mypass'),...);
mysql> FLUSH PRIVILEGES;

删除用户

要想移除账户,应使用 DROP USER 语句

限制账户资源

限制 MySQL服务器资源使用的一个方法是将 max_user_connections 系统变量设置为非零值。但是,该方法严格限于全局,不允许管理具体账户。并且,它只限制使用单一账户同时连接的数量,而不是客户端连接后的操作。许多MySQL管理员对两种类型的控制均感兴趣,特别是Internet服务提供者。

在MySQL 5.1中,你可以为具体账户限制下面的服务器资源:

  • 账户每小时可以发出的查询数
  • 账户每小时可以发出的更新数
  • 账户每小时可以连接服务器的次数

客户端可以执行的语句根据查询限制来记数。只有修改数据库或表的语句根据更新限制来记数。

还可以限制每个账户的同时连接服务器的连接数。

本文中的账户为 user 表中的单个记录。根据 User 和 Host 列值唯一识别每个账户。

做为使用该特性的先决条件,mysql 数据库的 user 表必须包含资源相关的列。资源限制保存在 max_questions、max_updates、max_connections 和 max_user_connections列内。如果user表没有这些列,必须对它进行升级。

要想用GRANT语句设置资源限制,使 WITH 子句来命名每个要限制的资源和根据每小时记数的限制值。例如,要想只以限制方式创建可以访问 customer 数据库的新账户,执行该语句:

mysql> GRANT ALL ON customer.* TO 'francis'@'localhost'->     IDENTIFIED BY 'frank'->     WITH MAX_QUERIES_PER_HOUR 20->          MAX_UPDATES_PER_HOUR 10->          MAX_CONNECTIONS_PER_HOUR 5->          MAX_USER_CONNECTIONS 2;

限制类型不需要全部在 WITH 子句中命名,但已经命名的可以按任何顺序。每个每小时限制值均应为整数,代表每小时的记数。如果GRANT 语句没有 WITH 子句,则每个限制值设置为 默认值零(即没有限制)。对于 MAX_USER_CONNECTIONS,限制为整数,表示账户一次可以同时连接的最大连接数。如果限制设置为 默认值零,则根据 MAX_USER_CONNECTIONS 系统变量确定该账户可以同时连接的数量。

要想设置或更改已有账户的限制,在全局级别使用 GRANT USAGE语句(在*.*)。下面的语句可以将francis的查询限制更改为100:

mysql> GRANT USAGE ON *.* TO 'francis'@'localhost'->     WITH MAX_QUERIES_PER_HOUR 100;

该语句没有改变账户的已有权限,只修改了指定的限制值。

要想取消已有限制,将该值设置为零。例如,要想取消 francis 每小时可以连接的次数的限制,使用该语句:

mysql> GRANT USAGE ON *.* TO 'francis'@'localhost'->     WITH MAX_CONNECTIONS_PER_HOUR 0;

当账户使用资源时如果有非零限制,则对资源使用进行记数。

服务器运行时,它统计每个账户使用资源的次数。如果账户在最后一个小时的连接次数达到限制,该账户的进一步的连接被拒绝。类似地,如果账户达到查询或更新次数的限制,进一步的查询或更新被拒绝。在这种情况下,会给出相关错误消息。

根据每个账户进行资源计算,而不是根据每个客户端。例如,如果你的账户的查询限制为50,你不能通过两个客户端同时连接服务器将限制增加到100。两个连接的查询被计算到一起。

可以为所有账户从全局重设当前的每小时资源使用记数,或单独重设给定的账户:

  • 要想将所有账户当前的记数重设为零,可以执行 FLUSH USER_RESOURCES 语句。还可以通过重载授权表来重设记数(例如,使用FLUSH PRIVILEGES语句或mysqladmin reload命令)。
  • 将具体账户的限制重新授予任何值,可以将它设置为零。要想实现,按照前面所述使用 GRANT USAGE,并将限制值指定为该账户当前的限制值。

计数器重设不影响 MAX_USER_CONNECTIONS 限制。

当服务器启动时所有记数从零开始。

设置账户密码

  1. 用 mysqladmin命令:
shell> mysqladmin -u user_name -h host_name password "newpwd"

该命令重设密码的账户为 user 表内匹配 User 列的 user_name 和 Host列你发起连接的客户端的记录。

  1. SET PASSWORD语句:
mysql> SET PASSWORD FOR 'jeffrey'@'%' = PASSWORD('biscuit');

只有root等可以更新mysql数据库的用户可以更改其它用户的密码。如果你没有以匿名用户连接,省略FOR子句便可以更改自己的密码:

mysql> SET PASSWORD = PASSWORD('biscuit');
  1. 在全局级别使用GRANT USAGE语句(在*.*)来指定某个账户的密码而不影响账户当前的权限:
mysql> GRANT USAGE ON *.* TO 'jeffrey'@'%' IDENTIFIED BY 'biscuit';

一般情况下最好使用上述方法来指定密码

  1. 你还可以直接修改user表:

4.1 要想在创建新账户时建立密码,在Password列提供一个值:

shell> mysql -u root mysql
mysql> INSERT INTO user (Host,User,Password)-> VALUES('%','jeffrey',PASSWORD('biscuit'));
mysql> FLUSH PRIVILEGES;

·
4.2 要想更改已有账户的密码,使用UPDATE来设置Password列值:

shell> mysql -u root mysql
mysql> UPDATE user SET Password = PASSWORD('bagel')-> WHERE Host = '%' AND User = 'francis';mysql> FLUSH PRIVILEGES;

当你使用SET PASSWORD、INSERT或UPDATE指定账户的密码时,必须用PASSWORD()函数对它进行加密。(唯一的特例是如果密码为空,你不需要使用PASSWORD())。需要使用PASSWORD()是因为user表以加密方式保存密码,而不是明文。如果你忘记了,你可能会象这样设置密码:

shell> mysql -u root mysql
mysql> INSERT INTO user (Host,User,Password)-> VALUES('%','jeffrey','biscuit');
mysql> FLUSH PRIVILEGES;

结果是密码’biscuit’保存到user表后没有加密。当jeffrey使用该密码连接服务器时,值被加密并同保存在user表中的进行比较。但是,保存的值为字符串’biscuit’,因此比较将失败,服务器拒绝连接:

shell> mysql -u jeffrey -pbiscuit test
Access denied

如果你使用GRANT … IDENTIFIED BY 语句或 mysqladmin password命令设置密码,它们均会加密密码。在这种情况下,不需要使用 PASSWORD()函数。

user 1.0 mysql 用户账号管理相关推荐

  1. mysql8.0创建属性,MySQL 8.0新特性 — 管理端口的使用简介

    前言 下面这个报错,相信大多数童鞋都遇见过:那么碰到这个问题,我们应该怎么办呢?在MySQL 5.7及之前版本,出现"too many connection"报错,超级用户root ...

  2. mysql 账户管理_如何用MySQL 命令来实现账户管理

    今天我们要学习的是如何用MySQL 命令的方式来对账号进行管理,我们大家都知道在实际应用中MySQL 命令可以完成多种任务,以下的文章主要是对用MySQL 命令的方式来对账号进行管理的具体内容介绍. ...

  3. MySQL事务管理+安全管理+MySQL数据类型

    [0]README 0.1)本文部分文字描述转自"MySQL 必知必会",旨在review"MySQL事务管理+安全管理+MySQL数据类型" 的基础知识: [ ...

  4. 等级保护测评2.0 mysql 数据库

    等级保护测评2.0 mysql 数据库 安全控制点 控制项 测评方法 预期结果或主要证据 身份鉴别 a) 应对登录的用户进行身份标识和鉴别,身份标识具有唯一性,身份鉴别信息具有复杂度要求并定期更换: ...

  5. mysql备份数据库语句6_13.4 MySQL用户管理;13.5 常用sql语句;13.6 MySQL数据库备份恢复...

    扩展 : SQL语句教程 什么是事务?事务的特性有哪些? 根据binlog恢复指定时间段的数据 mysql字符集调整 使用xtrabackup备份innodb引擎的数据库  innobackupex  ...

  6. mysql用户管理,常用sql语句,mysql数据库备份恢复

    2019独角兽企业重金招聘Python工程师标准>>> mysql用户管理 grant all on . to 'user1' identified by 'passwd'; gra ...

  7. [MySQL Reference Manual] 5 MySQL 服务管理

    5. MySQL 服务管理 5. MySQL 服务管理 5.1 The Mysql Server 5.2 Mysql 服务日志 5.2.1 选择General query log和slow query ...

  8. MySQL索引管理及执行计划

    MySQL索引管理及执行计划 第1章 索引介绍: 索引是对数据库表中一列或者多列 的值进行排序的一种结构,使用索引可以快速访问数据库表中的特定信息,如果想按特定职员的姓名来查找,则与他在表中搜索所有的 ...

  9. python操作三大主流数据库(6)python操作mysql⑥新闻管理后台功能的完善(增、ajax异步删除新闻、改、查)...

    python操作mysql⑥新闻管理后台功能的完善(增.删.改.查) 安装表单验证 D:\python\python_mysql_redis_mongodb\version02>pip inst ...

最新文章

  1. Head First设计模式之目录
  2. 大学毕业生如何应对“没有工作经验”的难题
  3. 简述configure,pkg-config,pkg_config_path三者的关系
  4. 这是我的卡,去买个包吧
  5. 车油表灯亮了,还能开多久?
  6. [Git] 撤销操作
  7. java 降低jdk版本_jdk1.7降级到1.6 | 学步园
  8. MySQL grant 语法的详细解析
  9. 信号灯绿波服务器,主干道绿波与红波控制策略
  10. 使用代理ccproxy设置outlook2013 收QQ邮箱(IMAP-SMTP方式)
  11. 机器学习神器Scikit-Learn保姆级入门教程
  12. 显示iPhone已停用,连接iTunes 时,如何解锁又能保留数据
  13. 魔术轮胎,dugoff轮胎建模 采用模块化建模方法,搭建非线性魔术轮胎PAC2002,dugoff模型
  14. 3P(PS、PR、PDF编辑器Acrobat)中的基基本操作(一)
  15. 东风日产全新劲客首次搭载BOSE PERSONAL PLUS音响;艾比森举办秋季发布会推出多个新品 | 全球TMT...
  16. i3 1005G1和 i5 1035G1 哪个好
  17. 计算机word做课程表实验报告,《用Word制作课程表》“学讲方式”案例分析
  18. Excel基础操作1
  19. 有关QSignalMapper的只言片语
  20. java打印空白页_java - DocPrintJob在随机主机上打印空白页 - 堆栈内存溢出

热门文章

  1. MW75蓝牙5.2双模热插拔PCB
  2. 小米商城主页面的实现(HTML+CSS)
  3. Android文件夹路径/data/data/包名/
  4. Echarts时间轴补刻度
  5. 大一机电转计算机申请书,大学转专业申请书范文合集9篇.docx
  6. 家庭太阳能发电,何时能告别“两极分化”?
  7. 转载:太阳能发电技术路线和前景分析
  8. 【JsvaScript】——运算符
  9. 2021年湖北副高考试成绩查询,2021年湖北卫生资格考试成绩查询入口已开通!
  10. 用户注册填写手机号接收短信验证码怎么实现?