MySQL OCP-11-用户管理

1月 28th, 2017

— 用户管理的重要性;
在MySQL中管理用户时,可以控制允许或不允许用户执行的操作;
• 创建具有与用户的职能相应的不同特权的用户帐户;
• 避免使用root帐户:
– 限制受损害的应用程序;
– 防止在例行维护期间出错;
• 通过恰当调整单个用户特权确保数据完整性:
– 允许授权用户完成其工作;
– 阻止未经授权用户访问超出其特权的数据;

— 用户帐户验证;
在连接到MySQL服务器并执行查询时,会验证您的身份并为您的活动授权;
• 验证:验证用户的身份;这是访问控制的第一个阶段,每次连接时都必须成功验证身份,如果验证失败,则无法连接,您的客户机将断开连接;
• 授权:验证用户的特权;这是访问控制的第二个阶段,面向针对成功验证了身份的活动连接的每个请求;对于每个请求,MySQL将确定您要执行的操作,然后检查您是否有执行此操作所需的恰当特权;

— 查看用户帐户设置;
mysql数据库包含服务器上所有用户帐户的信息:
1.查询mysql数据库以查看user标识信息:mysql> SELECT user, host, password FROM mysql.user WHERE user=’root’;
2.查看包括特权在内的所有user信息:SELECT * FROM mysql.user\G
1.*_priv字段中的值Y表示已启用相应特权;
2.root帐户具有完全访问权限,该帐户的所有特权列的值均为Y;
3.除了特权以外,该用户表还包含在验证过程中有用的其他信息;
4.Password列中以加密格式显示密码;password_expired:表示口令是否过期;
5.max_*:资源限制,0表示无限制;
6.ssl_*和x509_*:SSL或x509设置;
7.plugin:列出了密码插件名称(eg:mysql_native_password插件验证身份);

— 本机验证;
• 在使用mysql_native_password插件连接过程中,MySQL将使用以下各项与mysql.user表中的行进行匹配验证帐户:
– 用户名
– 口令
– 客户机主机
• 在指定主机名时,要注意恰当的方面:
– 在使用客户机连接时指定服务器的主机名;
– 在向服务器添加用户时指定客户机的主机名;
补充:
要使用mysql客户机连接到本地服务器:shell> mysql -u -p 要使用mysql客户机连接到远程服务器:shell> mysql -u -p -h

— 创建用户帐户;
1.提供每个用户帐户的用户和主机;
2.使用CREATE USER…IDENTIFIED BY语句可以:
– 为用户 jim 建立一个帐户;
– 该帐户从 localhost 发出连接;
– 该帐户使用口令 Abc123:
CREATE USER ‘jim’@’localhost’ IDENTIFIED BY ‘Abc123’;
3.在创建帐户时避免可能的安全风险:
– 不创建没有口令的帐户;
– 不创建匿名帐户;
– 在可能的情况下,避免在指定帐户主机名时使用通配符;
4.创建一个匿名账户,不需要用户名和密码即可登录,比较危险.eg:insert into user(host, user, password) values(‘%’, ”, ”);
TIPS:
1.帐户名称的格式为’user_name’@’host_name’;
2.用户名长度最多可以有16个字符,如果用户名和主机名包含特殊字符(如短划线),则必须将它们放在单引号中;如果某个值在不带引号时也有效,则引号是可选的,但是,任何情况下都可使用引号;

— 主机名模式;
1.允许的主机名格式示例:
• 主机名:localhost;
• 合格的主机名:’hostname.example.com’;
• IP编号:192.168.9.78;
• IP地址:10.0.0.0/255.255.255.0;
• 模式或通配符:%或_;
2.使用包含%或_通配符字符的主机模式设置的帐户允许用户从整个域或子网中的任何主机连接;
3.省略帐户名称的主机部分,MySQL将假定主机名为%;
1.主机值%.example.com可匹配example.com域中的任何主机;
2.主机值 192.168.%可匹配192.168子网中的任何主机;
3.主机值%可匹配任何主机,允许用户从任何主机连接;
4.用户名和主机名示例:
• john@10.20.30.40;
• john@’10.20.30.%’;
• john@’%.ourdomain.com’;
• john@’10.20.30.0/255.255.255.0′;
5.指定匿名用户帐户(即匹配任何用户名的帐户):mysql> CREATE USER ”@’localhost’;要避免创建匿名帐户,尤其是没有口令的匿名帐户,这有助于避免由于开放对MySQL安装的访问权限带来的安全风险;
6.如果某个主机匹配两个或更多模式,则MySQL将选择最具体的模式;

— 设置帐户口令;
1.设置MySQL用户口令的方法有多种:
– CREATE USER…IDENTIFIED BY:自动为提供的口令加密;
– GRANT…IDENTIFIED BY
– SET PASSWORD
– mysqladmin password:shell> mysqladmin -u root password ‘rootpass’;
– UPDATE 授权表(不推荐)
2.SET PASSWORD语句是设置或更改帐户口令的最常用方法:
1.更改现有帐户的口令但不更改其任何特权的最常用方法;
2.语法:SET PASSWORD FOR ‘jim’@’localhost’ = PASSWORD(‘NewPass’);
3.使用SET PASSWORD语句但不带FOR子句仅能更改您自己的口令;

— 确认口令;
为所有用户帐户分配唯一的强口令:
• 避免可以轻易猜测到的口令;
• 使用以下SELECT语句可列出没有口令的所有帐户:SELECT Host, User FROM mysql.user WHERE Password = ”;
• 确定重复口令:SELECT User FROM mysql.user GROUP BY password HAVING count(user)>1;
• 让口令失效:ALTER USER jim@localhost PASSWORD EXPIRE;如果密码失效,则在下次登录时必须使用SET PASSWORD语句更改口令;所有不以SET开头的执行语句将返回错误,直到更改口令为止;

— 处理用户帐户;
• 使用RENAME USER语句可重命名用户帐户:RENAME USER ‘jim’@’localhost’ TO ‘james’@’localhost’;
– 更改现有帐户的帐户名称
– 更改帐户名称的用户名或主机名部分,或同时更改两者;
• 使用DROP USER语句可删除用户帐户:DROP USER ‘jim’@’localhost’:
– 撤消现有帐户的所有特权,然后删除该帐户;
– 从存在帐户的任何授权表中删除帐户的所有记录;
• 在用户访问要求变化时,重命名或删除用户;

— 可插入验证;
MySQL支持多种通过可插入验证提供的验证机制:
1.插件是内置的,也可作为外部库提供;
2.默认的服务器端插件是内置的,始终可用,其中包括:
– mysql_native_password:这是默认机制,插件实施标准口令格式:41字节宽的散列;
– mysql_old_password:此插件的实现验证的方式与MySQL4.1.1之前的版本相同;安全性较低,16字节宽;
– sha256_password:此插件可启用口令的SHA-256散列;
3.old_passwords系统变量的值指定PASSWORD()函数用于创建口令的算法,如下所示:
• 0:标准算法,与MySQL 4.1.1及更高版本中所用的算法相同;
• 1:旧算法,与MySQL 4.1.1之前版本中所用的算法相同;
• 2:SHA-256算法;
4.启动服务器时将default-authentication-plugin选项设置为sha256_password,可将SHA-256口令用于所有新用户,也可使用CREATE USER和IDENTIFIED WITH sha256_password子句为特定用户指定SHA-256口令;

— 客户端明文验证插件;
MySQL客户机库中有一个内置的明文验证插件mysql_clear_password,该插件:
1.用于将纯文本口令发送给服务器:口令通常经过散列处理;
2.通过以下方式启用:
– LIBMYSQL_ENABLE_CLEARTEXT_PLUGIN:环境变量;
– 在运行MySQL客户机应用程序(如mysql和mysqladmin)时指定–enable-cleartext-plugin;
– mysql_options() C API函数的MYSQL_ENABLE_CLEARTEXT_PLUGIN选项;
3.有些验证方法(如PAM(Pluggable Authentication Module,可插入验证模块)验证)要求客户机向服务器发送纯文本口令,以便服务器处理普通形式的口令,mysql_clear_password插件支持此行为;

— 可装入验证插件;
1.测试验证插件(test_plugin_server):使用本机或旧口令验证进行身份验证,适用于测试和开发;此插件使用auth_test_plugin.so文件;
2.套接字对等凭证(auth_socket):仅允许通过UNIX套接字从具有相同名称的UNIX帐户登录的MySQL用户;此插件使用auth_socket.so文件;
3.PAM验证插件(authentication_pam):是一个企业版插件,允许使用外部验证机制登录,MySQL不存储您的口令,但使用PAM机制传输客户机提供的用户名和口令供操作系统进行验证;此插件使用authentication_pam.so文件;
4.要装入其中的某个插件,可在服务器启动时在命令行中或在my.cnf文件中使用plugin-load选项,并将该选项设置为插件的文件名;
[mysqld]
plugin-load=authentication_pam.so
5.可以开发自己的验证插件,测试验证插件适用于开发者创建自己的插件;

— PAM验证插件;
1.PAM验证插件是一个企业版插件,可向操作系统验证MySQL帐户;
2.PAM定义配置验证的服务:这些服务存储在/etc/pam.d中;
3.该插件针对以下各项进行验证:
– 操作系统用户和组;
– 外部验证(如LDAP,Active Directory),因此可以使用PAM向网络中的单个存储验证许多服务(包括MySQL);
4.要创建使用PAM验证的MySQL用户,请执行以下操作:CREATE USER user@host IDENTIFIED WITH authentication_pam AS ‘pam_service, os_group=mysql_user’;

eg:
1.加载PAM验证插件,在/etc/my.cnf中添加配置,然后重启MySQL服务;
[mysqld]
plugin-load=authentication_pam.so
2.创建PAM服务mysql-pam,可在创建文件/etc/pam.d/mysql-pam:
#%PAM-1.0
auth include password-auth
account include password-auth
3.创建操作系统账户:
shell> useradd bob
shell> passwd bob
4.要创建直接映射到某个操作系统用户的MySQL用户,可使用如下语句:CREATE USER bob@localhost IDENTIFIED WITH authentication_pam AS ‘mysql-pam’;
5.当bob登录时,MySQL会将从客户机接收的用户名和口令传递到PAM,后者向操作系统验证;客户机必须以明文形式发送口令,启用客户端明文验证插件以实现此目的:
shell> mysql –enable-cleartext-plugin -ubob -p
Enter password: bob’s_OS_password

1.要使用PAM验证插件启用基于组的登录,可创建一个启用PAM的匿名代理帐户,该帐户不与任何用户匹配,但指定一组从操作系统组到MySQL用户的映射:CREATE USER ”@” IDENTIFIED WITH authentication_pam AS ‘mysql-pam, sales=m_sales, finance=m_finance’;
2.上例假定您拥有sales和finance操作系统组以及m_sales和m_finance MySQL用户;然后,必须向该匿名代理帐户授予 PROXY特权,使其能以m_sales和m_finance MySQL用户身份登录:GRANT PROXY ON m_sales@localhost TO ”@”; GRANT PROXY ON m_finance@localhost TO ”@”;
3.现在,作为sales和finance组成员的用户可以在mysql命令行提示符处提供其操作系统凭证,以m_sales或 m_finance MySQL用户身份登录,从而拥有授予这些帐户的所有特权;例如,如果peter是sales组的成员,则可通过以下方式登录:
shell> mysql –enable-cleartext-plugin -upeter -p
Enter password: peter’s_OS_password
Welcome to the MySQL monitor. Commands end with ; or \g. …
mysql> SELECT CURRENT_USER();
+——————-+
| CURRENT_USER() |
+——————-+
| m_sales@localhost |
+——————-+
1 row in set (0.01 sec)

— 授权;
1.MySQL授权系统的主要功能是将经过验证的用户与数据库特权(如SELECT,INSERT,UPDATE和DELETE)关联起来;
2.授权系统的功能包括:可以拥有匿名用户,可以启用特定功能(如LOAD DATA INFILE和各种管理操作);
3.授权可确保用户只能执行已向其授予了相应特权的操作;
4.在用户验证之后,MySQL将提出以下问题以验证帐户特权:
– 用户是谁?
– 用户拥有哪些特权?
– 这些特权适用于哪些方面?
5.必须设置恰当的帐户和特权才能让授权生效;

— 确定相应的用户特权;
1.可以在不同级别向MySQL帐户授予多种类型的特权:全局级别,数据库级别,表级别,列级别,存储过程级别;
2.根据用户的访问要求授予用户特权:
1.只读用户:全局,数据库或表级别特权,例如SELECT;
2.修改数据库的用户:全局,数据库或表级别特权,例如INSERT/UPDATE/DELETE/CREATE/ALTER/DROP;
3.管理用户:全局级别特权,例如FILE/PROCESS/SHUTDOWN/SUPER;

— 授予管理特权;
1.FILE:允许用户指示MySQL服务器在服务器主机文件系统中读取和写入文件;
2.PROCESS:允许用户使用SHOW PROCESSLIST语句查看客户机正在执行的所有语句;
3.SUPER:管理特权允许用户执行额外任务,其中包括设置全局变量和终止客户机连接;
4.ALL/ALL PRIVILEGES:授予所有特权(但不能向其他用户授予特权)要尽可能少地授予管理特权,因为管理特权可能会被恶意用户或粗心用户滥用;
5.USAGE:允许连接到服务器,但没有任何特权;可以使用帐户访问服务器用于有限的目的,例如发出SHOW VARIABLES或SHOW STATUS语句;

补充:MySQL可以支持的权限类型:
1.管理权限:
CREATE TEMPORARY TABLES:创建临时表;
CREATE USER:创建/删除/重命名账户;
FILE:在sql语句中读写操作系统的文件;
LOCK TABLES:锁表;
PROCESS:查看进程的活动状态;
RELOAD:重新加载,FLUSH OR RESET;
REPLICATION CLIENT:作为复制功能的主机;
REPLICATION SLAVE:作为复制功能的备机;
SHOW DATABASES:查看数据库名称;
SHUTDOWN:关闭服务器;
SUPER:各种管理操作;
2.数据访问权限:
ALTER:修改表结构,alter table;
ALTER ROUTINE:修改或者删除存储过程和函数;
CREATE:创建数据库或者表;
CREATE ROUTINE:创建存储过程或者函数;
CREATE VIEW:创建视图;
DELETE:删除表中数据;
DROP:删除数据库或者表;
EXECUTE:执行函数或者过程;
GRANT OPTION:授权给其它账户;
INDEX:创建/删除索引;
INSERT:向表中插入记录;
SELECT:查询表的记录;
SHOW VIEW:查看视图定义,show create view;
UPDATE:更新表的记录:
3.特殊的权限:
1.ALL and ALL PRIVILEGES:即’all privileges except grant option’,授予账户除了把权限赋予其它帐号外的所有权限;
2.USAGE:即没有任何权限,但是它可以连接到数据库上,也在user表中生成一条记录.这类账户的存在就是为了执行向’show variables’ or ‘show status’这类的语句,也不能查看表的内容;
4.权限的级别
1.所有的权限都可以被授予全局的,一个账户拥有全局权限,它可以在任何数据库任何时间使用此权限,一般只授予管理员这样的权限;
2.一些权限可以被授予特定的数据库:ALTER, CREATE, CREATE TEMPORARY TABLES, CREATE VIEW, DELETE, DROP, GRANT OPTION, IDEX, INSERT, LOCK TABLES, SELECT, SHOW VIEW and UPDATE.一个数据库级别的权限可以应用于所有的tables和routines;
3.一些权限可以被授予特定的表:ALERT, CREATE, DELETE, DROP, GRANT OPTION, INDEX, INSERT, SELECT and UPDATE.一个标记别的权限可以应用于表中所有的列;
4.一些权限可以被授予表中的列:INSERT, SELECT and UPDATE;
5.一些权限可以被授予函数和存储过程:EXECUTE, ALTER ROUTINE and GRANT OPTION;

— GRANT语句;
1.GRANT语句可创建新帐户或者修改现有帐户;
2.GRANT语法:GRANT SELECT ON world_innodb.* TO ‘kari’@’localhost’ IDENTIFIED BY ‘Abc123’;
3.该语句的子句:
1.GRANT关键字:指定一个或多个指示要授予的特权的特权名称;特权名称不区分大小写,要列出多个特权,可用逗号分隔特权;;
2.ON子句:指定要授予的特权的级别:
1.全局:*.*;
2.数据库:.*;
3.表:
.;
4.存储例程:.;
3.TO子句:指定要向其授予特权的帐户;如果该帐户尚不存在,则该语句将创建此帐户;;
4.IDENTIFIED BY子句:(可选)将指定口令分配给帐户;如果帐户已存在,则该口令将替换旧口令,省略IDENTIFIED BY子句会有以下效果:
1.如果TO子句中的帐户已存在,则其口令保持不变;
2.如果TO子句中的帐户不存在,则将创建该帐户,并使用空白口令;
4.作为一项安全措施,启用NO_AUTO_CREATE_USER SQL模式可防止GRANT语句在未指定IDENTIFIED BY子句时创建新帐户;

eg:
1.授权语句:grant privileges on objects to ‘user’@’host’ identified by ‘password’;
1.on *.*:全局权限,所有的对象,eg:grant all privileges on *.* to ‘u1’@’%’ identified by ‘u1’ with grant option;
2.on db_name.*:对数据库的权限,eg:grant select, update on test.* to ‘u1’@’localhost’;
3.on db_name.tbl_name:数据库中表的权限,eg:grant select on mysql.user to ‘u1’@’localhost’;
4.on db_name.tbl_name.col_name:数据库中表的列的权限,eg:grant select(host, user) on mysql.user to ‘u1’@’%’;
5.on db_name.routine_name:数据库中routine的权限;
2.要添加用户并授权一般使用:grant 权限1,权限2,… on 数据库.表 to “username”@”host” identified by “password”;(创建用户的同时授予权限)
1.grant all privileges on *.* to “user1″@”%” identified by “pwd”:表示对user1授予所有数据库中所有表的所有权限,并可以从任意客户端连接进来;
2.grant select,insert,delete,update on mysql.user to “user1″@”192.168.0.1” identified by “pwd”:表示对用户user1授予mysql数据库的user表增删改查权限,并且只能从192.168.0.1客户端连接进来;
3.host列为%表示可以从任意的客户端连接到服务器端;
5.一般在开发的时候使host为%,在生产环境修改host的地址;

— 显示GRANT特权;
1.使用SHOW GRANTS语句显示常规帐户特权:
SHOW GRANTS;
SHOW GRANTS FOR CURRENT_USER();
2.指定帐户名称:mysql> SHOW GRANTS FOR ‘kari’@’myhost.example.com’;
3.口令以加密形式存储和显示:如果帐户有口令,则SHOW GRANTS将在GRANT语句末尾显示一条IDENTIFIED BY PASSWORD子句,该子句可列出帐户的全局特权;由于口令是 使用单向加密存储的,因此MySQL无法显示未加密的口令;

— 用户特权限制;
1.不能显式拒绝访问特定用户;
2.不能将口令与特定对象(如数据库,表或例程)关联;

— 授权表;
1.MySQL服务器在启动时将授权表从mysql数据库读取到内存中,并使所有访问控制决策都以这些表为依据;授权表还指示有关帐户的其他信息,例如:
1.应遵守的任何资源限制;
2.使用帐户的客户机连接是否必须通过使用SSL的安全连接进行;
2.表与特权级别对应:
1.user:每一个账户在user表包含一条记录,它记录了用户拥有的全局的权限,也包含了一些其它信息,比如:使用资源的限制,客户端连接进来是否需要使用SSL链接;
2.db:列出了账户对指定数据库的权限;
3.tables_priv:列出了账户对指定表的权限;
4.columns_priv:列出了账户对指定列的权限;
5.procs_priv:列出了账户对存储过程和函数的权限;
3.这些表指示了每个帐户的有效性和特权,并且每个级别的安全程度是递进的;

— 使用授权表;
1.每个授权表有host列和user列,用于标识其记录适用的帐户:
1.在连接尝试过程中,服务器会确定客户机是否能连接:将用户表中的某个记录与客户机发起连接的主机,客户机提供的用户名 以及匹配记录中列出的口令匹配;
2.在连接后,服务器会确定每条语句的访问特权;
2.MySQL安装过程会创建授权表:
1.授权表使用MyISAM存储引擎;
2.MyISAM保证可用。

— 影响特权更改;
1.MySQL会维护授权表的内存中副本以避免访问磁盘上表的开销:
1.应避免直接在授权表中修改用户帐户,原因;
1.帐户管理语句的语法设计清晰,简单明了;
2.如果在某个帐户管理语句中犯错,该语句就会失败,不会更改任何设置;
3.如果在直接更改授权表时犯错,则可能会将所有用户锁在系统外面;
2.如果直接修改授权表,应通过发出FLUSH PRIVILEGES语句(或者执行mysqladmin flush-privileges或mysqladmin reload命令显式重新装入了表)显式重新装入授权表;
2.帐户修改语句(如GRANT/REVOKE/SET PASSWORD和RENAME USER)会将更改同时应用于授权表及其内存中表副本;
3.对全局特权和口令的更改仅应用于该帐户的后续连接;
4.对数据库级别特权的更改在客户机的下一条USE db_name语句后应用;
5.对表和例程特权的更改会立即应用;

— 撤消帐户特权;
1.使用REVOKE语句可以撤消特定的SQL语句特权:
1.REVOKE关键字:指定要撤消的特权列表;
2.ON子句:指示要撤消特权的级别;
3.FROM子句:指定帐户名称;
eg:REVOKE DELETE, INSERT, UPDATE ON world_innodb.* FROM ‘Amon’@’localhost’;
2.撤消特权以便将特权授予其他用户:REVOKE GRANT OPTION ON world_innodb.* FROM ‘Jan’@’localhost’;
3.撤消所有特权(包括向他人授权):REVOKE ALL PRIVILEGES, GRANT OPTION FROM ‘Sasha’@’localhost’;
4.在发出REVOKE之前使用SHOW GRANTS语句确定要撤消的特权,随后再次确认结果;

eg:回收权限:revoke prilileges on objects from ‘user’@’host’;
1.回收全局权限:revoke all privileges, grant option from ‘u1’@’%’;
2.回收数据库的权限:revoke select, grant option on mysql.* from ‘u1’@’%’;
3.回收表的权限:revoke select on mysql.user from ‘u1’@’%’;
4.回收列的权限:revoke select(host, user) on mysql.user from ‘u1’@’%’;

— SHOW PROCESSLIST;
1.SHOW PROCESSLIST(查看INFORMATION_SCHEMA.PROCESSLIST表或mysqladmin processlist命令获取线程信息)显示了正在运行的进程线程;
2.SHOW PROCESSLIST将生成以下列:
– Id:连接标识符;
– User:发出语句的MySQL用户;
– Host:发出语句的客户机的主机名;
– db:选择默认数据库,否则为NULL;
– Command:线程正在执行的命令类型;
– Time:线程处于当前状态的时间(秒);
– State:指示线程正在执行的内容的操作,事件或状态;
– Info:线程正在执行的语句;否则为NULL;
3.PROCESS特权允许查看所有线程,否则只能查看自己的线程;
4.如果出现了“连接数太多”错误,但希望确定正在执行的语句,则使用SHOW FULL PROCESSLIST语句会非常有用;
5.MySQL额外保留了一个连接,供拥有SUPER特权的帐户使用,这样可确保即使达到连接数限制,管理员也始终可以连接并检查系统(前提是应用程序用户没有SUPER特权);
6.使用KILL语句可中止进程;

— 禁用客户机访问控制;
要指示服务器不读取授权表并禁用访问控制,可使用–skip-grant-tables选项:
1.每个连接都成功:
1.可以提供任何用户名及任何口令,并且可以从任何主机连接;
2.该选项将禁用整个特权系统:会禁用帐户管理语句,如CREATE USER,GRANT,REVOKE和SET PASSWORD;
3.连接的用户实际上拥有所有特权;
2.阻止客户机连接:
1.使用–skip-networking选项可阻止网络访问,并且仅允许在本地套接字,命名管道或共享内存上访问;
2.使用–socket选项可在非标准套接字上启动服务器以防止本地应用程序或用户随便访问;

补充:忘记用户密码:
1.Linux中的处理方法:
1.关闭服务器或者kill掉mysqld的进程;
2.使用–skip-grant-tables选项登录,启动服务器并跳过授权表
3.使用mysql登录,可以不用使用用户名和密码,并且有全部权限;
4.登录之后直接更新mysql.user表密码字段为空即可;
2.Windows中的处理方法:
1.停止mysql的服务:net stop mysql;
2.到mysql的bin目录下执行mysqld -nt –skip-grant-tables;
3.到新的命令行下执行mysqladmin -uroot flush-privileges password ‘pwd’;
4.然后关闭mysql服务:mysqladmin -uroot -p shutdown,此时输入刚刚设置的密码;
5.启动mysql服务:net start mysql;

— 设置帐户资源限制;
1.通过将全局变量MAX_USER_CONNECTIONS设置为非零值,限制使用服务器资源:这将限制任何一个帐户的同时连接数量,但不会限制客户机在连接后能执行的操作;
2.限制单个帐户的以下服务器资源:
1.MAX_QUERIES_PER_HOUR(max_queries):一个帐户每小时可发出的查询数量;
2.MAX_UPDATES_PER_HOUR(max_updates):一个帐户每小时可发出的更新数量;
3.MAX_CONNECTIONS_PER_HOUR(max_connections):一个帐户每小时可连接到服务器的次数;
4.MAX_USER_CONNECTIONS(max_user_connections):允许的同时连接数量;
3.每个限制的默认值是零,表示没有限制;
4.查看:SELECT * FROM mysql.user\G
eg:
mysql> GRANT ALL ON *.* TO ‘francis’@’localhost’
WITH MAX_QUERIES_PER_HOUR 20
MAX_UPDATES_PER_HOUR 10
MAX_CONNECTIONS_PER_HOUR 5
MAX_USER_CONNECTIONS 2;

— 课后练习;

标签:
目前还没有任何评论.