user 1.0 mysql 用户账号管理
文章目录
- 用户名和密码
- 增加新用户账号
- 使用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 限制。
当服务器启动时所有记数从零开始。
设置账户密码
- 用 mysqladmin命令:
shell> mysqladmin -u user_name -h host_name password "newpwd"
该命令重设密码的账户为 user 表内匹配 User 列的 user_name 和 Host列你发起连接的客户端的记录。
- SET PASSWORD语句:
mysql> SET PASSWORD FOR 'jeffrey'@'%' = PASSWORD('biscuit');
只有root等可以更新mysql数据库的用户可以更改其它用户的密码。如果你没有以匿名用户连接,省略FOR子句便可以更改自己的密码:
mysql> SET PASSWORD = PASSWORD('biscuit');
- 在全局级别使用GRANT USAGE语句(在*.*)来指定某个账户的密码而不影响账户当前的权限:
mysql> GRANT USAGE ON *.* TO 'jeffrey'@'%' IDENTIFIED BY 'biscuit';
一般情况下最好使用上述方法来指定密码
- 你还可以直接修改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 用户账号管理相关推荐
- mysql8.0创建属性,MySQL 8.0新特性 — 管理端口的使用简介
前言 下面这个报错,相信大多数童鞋都遇见过:那么碰到这个问题,我们应该怎么办呢?在MySQL 5.7及之前版本,出现"too many connection"报错,超级用户root ...
- mysql 账户管理_如何用MySQL 命令来实现账户管理
今天我们要学习的是如何用MySQL 命令的方式来对账号进行管理,我们大家都知道在实际应用中MySQL 命令可以完成多种任务,以下的文章主要是对用MySQL 命令的方式来对账号进行管理的具体内容介绍. ...
- MySQL事务管理+安全管理+MySQL数据类型
[0]README 0.1)本文部分文字描述转自"MySQL 必知必会",旨在review"MySQL事务管理+安全管理+MySQL数据类型" 的基础知识: [ ...
- 等级保护测评2.0 mysql 数据库
等级保护测评2.0 mysql 数据库 安全控制点 控制项 测评方法 预期结果或主要证据 身份鉴别 a) 应对登录的用户进行身份标识和鉴别,身份标识具有唯一性,身份鉴别信息具有复杂度要求并定期更换: ...
- mysql备份数据库语句6_13.4 MySQL用户管理;13.5 常用sql语句;13.6 MySQL数据库备份恢复...
扩展 : SQL语句教程 什么是事务?事务的特性有哪些? 根据binlog恢复指定时间段的数据 mysql字符集调整 使用xtrabackup备份innodb引擎的数据库 innobackupex ...
- mysql用户管理,常用sql语句,mysql数据库备份恢复
2019独角兽企业重金招聘Python工程师标准>>> mysql用户管理 grant all on . to 'user1' identified by 'passwd'; gra ...
- [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 ...
- MySQL索引管理及执行计划
MySQL索引管理及执行计划 第1章 索引介绍: 索引是对数据库表中一列或者多列 的值进行排序的一种结构,使用索引可以快速访问数据库表中的特定信息,如果想按特定职员的姓名来查找,则与他在表中搜索所有的 ...
- python操作三大主流数据库(6)python操作mysql⑥新闻管理后台功能的完善(增、ajax异步删除新闻、改、查)...
python操作mysql⑥新闻管理后台功能的完善(增.删.改.查) 安装表单验证 D:\python\python_mysql_redis_mongodb\version02>pip inst ...
最新文章
- Head First设计模式之目录
- 大学毕业生如何应对“没有工作经验”的难题
- 简述configure,pkg-config,pkg_config_path三者的关系
- 这是我的卡,去买个包吧
- 车油表灯亮了,还能开多久?
- [Git] 撤销操作
- java 降低jdk版本_jdk1.7降级到1.6 | 学步园
- MySQL grant 语法的详细解析
- 信号灯绿波服务器,主干道绿波与红波控制策略
- 使用代理ccproxy设置outlook2013 收QQ邮箱(IMAP-SMTP方式)
- 机器学习神器Scikit-Learn保姆级入门教程
- 显示iPhone已停用,连接iTunes 时,如何解锁又能保留数据
- 魔术轮胎,dugoff轮胎建模 采用模块化建模方法,搭建非线性魔术轮胎PAC2002,dugoff模型
- 3P(PS、PR、PDF编辑器Acrobat)中的基基本操作(一)
- 东风日产全新劲客首次搭载BOSE PERSONAL PLUS音响;艾比森举办秋季发布会推出多个新品 | 全球TMT...
- i3 1005G1和 i5 1035G1 哪个好
- 计算机word做课程表实验报告,《用Word制作课程表》“学讲方式”案例分析
- Excel基础操作1
- 有关QSignalMapper的只言片语
- java打印空白页_java - DocPrintJob在随机主机上打印空白页 - 堆栈内存溢出