• 通过revoke命令收回用户权限
• mysql> show grants for'mysql.sys'@localhost;
• +---------------------------------------------------------------+
• | Grants for mysql.sys@localhost |
• +---------------------------------------------------------------+
• | GRANT USAGE ON *.* TO'mysql.sys'@'localhost'|
• | GRANT TRIGGER ON `sys`.* TO'mysql.sys'@'localhost'|
• | GRANT SELECT ON `sys`.`sys_config` TO'mysql.sys'@'localhost'|
• mysql> revoke select on `sys`.`sys_config` from'mysql.sys'@localhost;
• mysql> show grants for'mysql.sys'@localhost;
• +-----------------------------------------------------+
• | Grants for mysql.sys@localhost |
• +-----------------------------------------------------+
• | GRANT USAGE ON *.* TO'mysql.sys'@'localhost'|
• | GRANT TRIGGER ON `sys`.* TO'mysql.sys'@'localhost'|删除MySQL用户• 通过执行drop user命令删除MySQL用户
• mysql> DROP USER'jeffrey'@'localhost';
设置MySQL用户资源限制
• 通过设置全局变量max_user_connections可以限制所有用户在同一时间连接MySQL实例的数量,但此参数无法对每个用户区别对待,所以MySQL提供了对每个用户的资源限制管理
• MAX_QUERIES_PER_HOUR:一个用户在一个小时内可以执行查询的次数(基本包含所有语句)
• MAX_UPDATES_PER_HOUR:一个用户在一个小时内可以执行修改的次数(仅包含修改数据库或表的语句)
• MAX_CONNECTIONS_PER_HOUR:一个用户在一个小时内可以连接MySQL的时间
• MAX_USER_CONNECTIONS:一个用户可以在同一时间连接MySQL实例的数量
• 从5.0.3版本开始,对用户‘user’@‘%.example.com’的资源限制是指所有通过example.com域名主机连接user用户的连接,而不是分别指从host1.example.com和host2.example.com主机过来的连接设置MySQL用户资源限制
• 通过执行create user/alter user设置/修改用户的资源限制
• mysql> CREATE USER'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;
• mysql> ALTER USER'francis'@'localhost'WITH MAX_QUERIES_PER_HOUR 100;
• 取消某项资源限制既是把原先的值修改成0
• mysql> ALTER USER'francis'@'localhost'WITH MAX_CONNECTIONS_PER_HOUR 0;
• 当针对某个用户的max_user_connections非0时,则忽略全局系统参数max_user_connections,反之则全局系统参数生效
设置MySQL用户的密码
• 执行create user创建用户和密码
• mysql> CREATE USER'jeffrey'@'localhost'IDENTIFIED BY'mypass';
• 修改用户密码的方式包括:
• mysql> ALTER USER'jeffrey'@'localhost'IDENTIFIED BY'mypass';
• mysql> SET PASSWORD FOR'jeffrey'@'localhost'= PASSWORD('mypass');
• mysql> GRANT USAGE ON *.* TO'jeffrey'@'localhost'IDENTIFIED BY'mypass';
• shell> mysqladmin -u user_name -h host_name password "new_password"
• 修改本身用户密码的方式包括:
• mysql> ALTER USER USER() IDENTIFIED BY'mypass';
• mysql> SET PASSWORD = PASSWORD('mypass');
设置MySQL用户密码过期策略
• 设置系统参数default_password_lifetime作用于所有的用户账户
• default_password_lifetime=180 设置180天过期
• default_password_lifetime=0 设置密码不过期
• 如果为每个用户设置了密码过期策略,则会覆盖上述系统参数
• ALTER USER'jeffrey'@'localhost'PASSWORD EXPIRE INTERVAL 90 DAY;
• ALTER USER ‘jeffrey’@‘localhost’ PASSWORD EXPIRE NEVER; 密码不过期
• ALTER USER ‘jeffrey’@‘localhost’ PASSWORD EXPIRE DEFAULT; 默认过期策略
• 手动强制某个用户密码过期
• ALTER USER'jeffrey'@'localhost'PASSWORD EXPIRE;
mysql> SELECT 1;
ERROR 1820 (HY000): You must SET PASSWORD before executing this statement
mysql> ALTER USER USER() IDENTIFIED BY'new_password';
Query OK, 0 rows affected (0.01 sec)
mysql> SELECT 1;
| 1 |
MySQL用户lock
• 通过执行create user/alter user命令中带account lock/unlock子句设置用户的lock状态
• Create user语句默认的用户是unlock状态
• mysql> create user abc2@localhost identified by'mysql'account lock;
• Query OK, 0 rows affected (0.01 sec)
• Alter user语句默认不会修改用户的lock/unlock状态
• mysql> alter user'mysql.sys'@localhost account lock;
• Query OK, 0 rows affected (0.00 sec)
• mysql> alter user'mysql.sys'@localhost account unlock;
• Query OK, 0 rows affected (0.00 sec)
• 当客户端使用lock状态的用户登录MySQL时,会收到如此报错
Access denied for user'user_name'@'host_name'.
Account is locked.
企业应用中的常规MySQL用户
• 企业生产系统中MySQL用户的创建通常由DBA统一协调创建,而且按需创建
• DBA通常直接使用root用户来管理数据库
• 通常会创建指定业务数据库上的增删改查、临时表、执行存储过程的权限给应用程序来连接数据库
• Create user app_full identified by ‘mysql’;
• Grant select,update,insert,delete,create temporary tables,execute on esn.* to app_full@’10.0.0.%’;
• mysql> show grants for app_full@'10.0.0.%';
• +------------------------------------------------------------------------------------------------------------+
• | Grants for app_full@10.0.0.% |
• +------------------------------------------------------------------------------------------------------------+
• | GRANT USAGE ON *.* TO'app_full'@'10.0.0.%'|
• | GRANT SELECT, INSERT, UPDATE, DELETE, CREATE TEMPORARY TABLES, EXECUTE ON `esn`.* TO'app_full'@'10.0.0.%'|
• 通常也会创建指定业务数据库上的只读权限给特定应用程序或某些高级别人员来查询数据,防止数据被修改
• Create user app_readonly identified by ‘mysql’;
• Grant select on esn.* to app_readonly identified by ‘mysq’;
企业应用中的MySQL用户密码设定
• 企业生产系统中MySQL用户的密码设定有严格的规范,通常要有密码复杂度、密码长度等要求
• 搜索网上的密码生成器,能按要求生成随机密码
• http://suijimimashengcheng.51240.com/